CC=gcc NASM=nasm LD=ld ifeq ($(DEBUG), 1) CFLAGS=-ggdb -fPIC -Wall -DDEBUG LDFLAGS=-g NASMCFLAGS=-g -f elf64 #PYTHON=python3dm PYTHON=python3-dbg else CFLAGS=-fPIC -Wall -Werror LDFLAGS=-s NASMCFLAGS=-f elf64 PYTHON=python3 endif PYTHON_CONFIG=$(PYTHON)-config PYTHON_CFLAGS=`$(PYTHON_CONFIG) --includes` `$(PYTHON_CONFIG) --cflags` PYTHON_LDFLAGS=-shared -fPIC `$(PYTHON_CONFIG) --libs` `$(PYTHON_CONFIG) --ldflags|cut -d' ' -f1,2` all: .deps pyrpn.so 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 $(LD) $(LDFLAGS) $(PYTHON_LDFLAGS) -o $@ $^ python_pyrpn.o: python_pyrpn.c python_rpnexpr.h python_rpnexpr.o rpn_jit.o $(CC) $(PYTHON_CFLAGS) $(CFLAGS) -c $< python_rpnexpr.o: python_rpnexpr.c python_rpnexpr.h rpn_jit.o $(CC) $(PYTHON_CFLAGS) $(CFLAGS) -c $< rpn_jit.o: rpn_jit.c rpn_jit.h rpn_parse.o rpn_lib.o $(CC) $(CFLAGS) -c $< rpn_parse.o: rpn_parse.c rpn_parse.h rpn_lib.o $(CC) $(CFLAGS) -c $< rpn_mutation.o: rpn_mutation.c rpn_mutation.h rpn_parse.o $(CC) $(CFLAGS) -c $< rpn_if.o: rpn_if.c rpn_if.h rpn_jit.o $(CC) $(CFLAGS) -c $< rpn_if_default.o: rpn_if_default.c rpn_if_default.h rpn_if.o $(CC) $(CFLAGS) -c $< rpn_ifs.o: rpn_ifs.c rpn_ifs.h rpn_if.o $(CC) $(CFLAGS) -c $< rpn_lib.o: rpn_lib.asm rpn_lib.h $(NASM) $(NASMCFLAGS) -o $@ $< # Doxygen documentation doc: doc/.doxygen.stamp Doxyfile: Doxyfile.mk echo "PROJECT_NUMBER = `cat VERSION`_rev:`git rev-parse --short HEAD`" > $@ cat $< >> $@ doc/.doxygen.stamp: $(wildcard *.c) $(wildcard *.h) Doxyfile touch doc/.doxygen.stamp doxygen 1>/dev/null echo "Documentation in file://`pwd`/doc/html/index.html" # Dependencies checking .deps: check_deps.sh sh check_deps.sh "$(CC)" "$(LD)" "$(NASM)" "$(PYTHON)" "$(PYTHON_CONFIG)" && touch .deps .PHONY: clean distclean checks runtest unittest benchmark checks: runtest unittest benchmark benchmark: pyrpn.so PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py 0x200 0x3000 unittest: pyrpn.so PYTHONPATH=`pwd` $(PYTHON) -m unittest -v runtest: make -C tests clean: -rm -fv *.o pyrpn.so test;\ rm -fRv doc/.doxygen.stamp doc/* Doxyfile;\ make -C tests clean distclean: clean -rm -vf .deps;\ rm -Rvf tests/__pycache__;