VPATH = @srcdir@ LLVM_OPTIONS = \ -D_GNU_SOURCE \ -D__STDC_CONSTANT_MACROS \ -D__STDC_FORMAT_MACROS \ -D__STDC_LIMIT_MACROS \ PLUGIN_OPTIONS = \ -shared \ -fPIC INCDIR = @srcdir@/.. PLUGIN_INSTALL_DIR = `clang --print-seach-dirs | gawk -e'BEGIN { FS = ":" } /libraries/ { print gensub(" =","",1,$2) } END { }'` PLUGIN_NAME = annobin-for-llvm.so all: $(PLUGIN_NAME) $(PLUGIN_NAME): annobin.cpp clang++ $(LLVM_OPTIONS) $(PLUGIN_OPTIONS) -I$(INCDIR) $< -o $@ install: $(PLUGIN_NAME) install -Dpm0755 -t ${PLUGIN_INSTALL_DIR} $< clean: rm -f $(PLUGIN_NAME) hello.o llvm-plugin-test.out CLANG = clang READELF = readelf PLUGIN = @abs_builddir@/$(PLUGIN_NAME) PLUGIN_TEST_OPTIONS = \ -D_FORTIFY_SOURCE=2 \ -O2 \ -g -grecord-gcc-switches \ -fPIE \ -fstack-protector-strong \ -fsanitize=safe-stack # -fcf-protection \ check: @srcdir@/hello.c @ $(CLANG) -Xclang -load -Xclang $(PLUGIN) $(PLUGIN_TEST_OPTIONS) -c @srcdir@/hello.c @ $(READELF) --wide --notes hello.o > llvm-plugin-test.out @ grep --silent -e "annobin built by llvm version" llvm-plugin-test.out @ grep --silent -e "running on LLVM version" llvm-plugin-test.out @ grep --silent -e "stack_clash" llvm-plugin-test.out @ echo "PASS LLVM plugin test"