Fast IFS using RPN notation
python
c
x86-64
nasm
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Makefile 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. CC=gcc
  2. NASM=nasm
  3. LD=ld
  4. ifeq ($(DEBUG), 1)
  5. CFLAGS=-ggdb -fPIC -Wall -DDEBUG
  6. LDFLAGS=-g
  7. NASMCFLAGS=-g -f elf64
  8. #PYTHON=python3dm
  9. PYTHON=python3-dbg
  10. else
  11. CFLAGS=-fPIC -Wall -Werror
  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. all: .deps pyrpn.so
  20. pyrpn.so: python_pyrpn.o python_rpnexpr.o rpn_lib.o rpn_jit.o rpn_parse.o rpn_mutation.o rpn_if.o rpn_if_default.o rpn_ifs.o
  21. $(LD) $(LDFLAGS) $(PYTHON_LDFLAGS) -o $@ $^
  22. python_pyrpn.o: python_pyrpn.c python_rpnexpr.h python_rpnexpr.o rpn_jit.o
  23. $(CC) $(PYTHON_CFLAGS) $(CFLAGS) -c $<
  24. python_rpnexpr.o: python_rpnexpr.c python_rpnexpr.h rpn_jit.o
  25. $(CC) $(PYTHON_CFLAGS) $(CFLAGS) -c $<
  26. rpn_jit.o: rpn_jit.c rpn_jit.h rpn_parse.o rpn_lib.o
  27. $(CC) $(CFLAGS) -c $<
  28. rpn_parse.o: rpn_parse.c rpn_parse.h rpn_lib.o
  29. $(CC) $(CFLAGS) -c $<
  30. rpn_mutation.o: rpn_mutation.c rpn_mutation.h rpn_parse.o
  31. $(CC) $(CFLAGS) -c $<
  32. rpn_if.o: rpn_if.c rpn_if.h rpn_jit.o
  33. $(CC) $(CFLAGS) -c $<
  34. rpn_if_default.o: rpn_if_default.c rpn_if_default.h rpn_if.o
  35. $(CC) $(CFLAGS) -c $<
  36. rpn_ifs.o: rpn_ifs.c rpn_ifs.h rpn_if.o
  37. $(CC) $(CFLAGS) -c $<
  38. rpn_lib.o: rpn_lib.asm rpn_lib.h
  39. $(NASM) $(NASMCFLAGS) -o $@ $<
  40. # Doxygen documentation
  41. doc: doc/.doxygen.stamp
  42. Doxyfile: Doxyfile.mk
  43. echo "PROJECT_NUMBER = `cat VERSION`_rev:`git rev-parse --short HEAD`" > $@
  44. cat $< >> $@
  45. doc/.doxygen.stamp: $(wildcard *.c) $(wildcard *.h) Doxyfile
  46. touch doc/.doxygen.stamp
  47. doxygen 1>/dev/null
  48. echo "Documentation in file://`pwd`/doc/html/index.html"
  49. # Dependencies checking
  50. .deps: check_deps.sh
  51. sh check_deps.sh "$(CC)" "$(LD)" "$(NASM)" "$(PYTHON)" "$(PYTHON_CONFIG)" && touch .deps
  52. .PHONY: clean distclean checks runtest unittest benchmark
  53. checks: runtest unittest benchmark
  54. benchmark: pyrpn.so
  55. PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py 0x200 0x3000
  56. unittest: pyrpn.so
  57. PYTHONPATH=`pwd` $(PYTHON) -m unittest -v
  58. runtest:
  59. make -C tests
  60. clean:
  61. -rm -fv *.o pyrpn.so test;\
  62. rm -fRv doc/.doxygen.stamp doc/* Doxyfile;\
  63. make -C tests clean
  64. distclean: clean
  65. -rm -vf .deps;\
  66. rm -Rvf tests/__pycache__;