Fast IFS using RPN notation
python
c
x86-64
nasm
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. CC=gcc
  2. NASM=nasm
  3. LD=ld
  4. ifeq ($(DEBUG), 1)
  5. CFLAGS=-ggdb -fPIC -Wall -DDEBUG -Wsign-compare
  6. LDFLAGS=-g
  7. NASMCFLAGS=-g -f elf64
  8. #PYTHON=python3dm
  9. PYTHON=python3-dbg
  10. else
  11. CFLAGS=-fPIC -Wall -Werror -DNDEBUG
  12. LDFLAGS=-s
  13. NASMCFLAGS=-f elf64
  14. PYTHON=python3
  15. endif
  16. PYTHON_CONFIG=$(PYTHON)-config
  17. PYTHON_CFLAGS=`$(PYTHON_CONFIG) --includes` `$(PYTHON_CONFIG) --cflags`
  18. PYTHON_LDFLAGS=-shared -fPIC `$(PYTHON_CONFIG) --libs` `$(PYTHON_CONFIG) --ldflags|cut -d' ' -f1,2`
  19. C_SOURCES=$(wildcard *.c)
  20. C_OBJS=$(patsubst %.c,%.o,$(C_SOURCES))
  21. HEADERS=$(wildcard *.h)
  22. ASM_SOURCES=$(wildcard *.asm)
  23. ASM_OBJS=$(patsubst %.asm,%.o,$(ASM_SOURCES))
  24. OBJS=$(ASM_OBJS) $(C_OBJS)
  25. LIB=pyrpn.so
  26. CFLAGS_COV=$(CFLAGS) --coverage
  27. LDFLAGS_COV=$(LDFLAGS)
  28. C_OBJS_COV=$(patsubst %.c,%_cov.o,$(C_SOURCES))
  29. C_GCNO=$(patsubst %.o,%.gcno,$(C_OBJS_COV))
  30. C_GCDA=$(patsubst %.o,%.gcda,$(C_OBJS_COV))
  31. OBJS_COV=$(ASM_OBJS) $(C_OBJS_COV)
  32. LIB_COV=tests/pyrpn.so
  33. all: .deps pyrpn.so
  34. $(C_OBJS): %.o: %.c $(HEADERS)
  35. $(CC) $(PYTHON_CFLAGS) $(CFLAGS) -c -o $@ $<
  36. $(ASM_OBJS): %.o: %.asm $(HEADERS)
  37. $(NASM) $(NASMCFLAGS) -o $@ $<
  38. $(LIB): $(OBJS)
  39. $(LD) $(LDFLAGS) $(PYTHON_LDFLAGS) -o $@ $^
  40. $(C_OBJS_COV): %_cov.o: %.c $(HEADERS)
  41. $(CC) $(PYTHON_CFLAGS) $(CFLAGS_COV) -c -o $@ $<
  42. $(LIB_COV): $(OBJS_COV)
  43. gcc $(LDFLAGS_COV) $(PYTHON_LDFLAGS) -o $@ $^ --coverage -lgcov
  44. # Doxygen documentation
  45. doc: doc/.doxygen.stamp
  46. Doxyfile: Doxyfile.mk
  47. echo "PROJECT_NUMBER = `cat VERSION`_rev:`git rev-parse --short HEAD`" > $@
  48. cat $< >> $@
  49. doc/.doxygen.stamp: $(wildcard *.c) $(wildcard *.h) Doxyfile
  50. touch doc/.doxygen.stamp
  51. doxygen 1>/dev/null
  52. echo "Documentation in file://`pwd`/doc/html/index.html"
  53. # Dependencies checking
  54. .deps: check_deps.sh
  55. sh check_deps.sh "$(CC)" "$(LD)" "$(NASM)" "$(PYTHON)" "$(PYTHON_CONFIG)" && touch .deps
  56. .PHONY: clean distclean checks runtest unittest benchmark
  57. checks: runtest unittest
  58. benchmark: $(LIB)
  59. PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py -c 0x500 -i 0x2000 -s 0x50; \
  60. PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py -c 0x500 -i 0x2000 -s 0xa0; \
  61. PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py -c 0x500 -i 0x2000 -s 0x100; \
  62. PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py -c 0x500 -i 0x5000 -s 0x50; \
  63. PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py -c 0x500 -i 0x5000 -s 0xa0; \
  64. PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py -c 0x500 -i 0x5000 -s 0x100; \
  65. unittest: $(LIB_COV)
  66. cd tests;\
  67. $(PYTHON) -m unittest -v -f
  68. lcov.info: unittest runtest
  69. lcov --no-external --base-directory ./ --capture --directory ./ --output-file $@
  70. lcov_html: lcov.info
  71. genhtml $< --output-directory $@
  72. coverage: lcov_html
  73. runtest:
  74. make -C tests
  75. clean:
  76. -rm -fv $(OBJS) $(LIB) test;\
  77. rm -fRv doc/.doxygen.stamp doc/* Doxyfile;\
  78. rm -fRv $(OBJS_COV) $(C_GCNO) $(C_GCDA) $(LIB_COV) lcov_html lcov.info;\
  79. make -C tests clean
  80. distclean: clean
  81. -rm -vf .deps;\
  82. rm -Rvf tests/__pycache__;