1 2#PIN_ROOT is taken from env var. 3PIN_BIN=${PIN_ROOT}/pin 4 5INLINE= 6OPTLEVEL=-O3 7CXXFLAGS_L=$(OPTLEVEL) $(INLINE) -Wall -Werror -Wno-unknown-pragmas -g -fno-omit-frame-pointer -fno-strict-aliasing -fPIC 8CXXFLAGS_L64=-DBIGARRAY_MULTIPLIER=1 -DUSING_XED -DTARGET_IA32E -DHOST_IA32E -DTARGET_LINUX 9CXXFLAGS_L32=-DBIGARRAY_MULTIPLIER=1 -DUSING_XED -DTARGET_IA32 -DHOST_IA32 -DTARGET_LINUX 10INCLUDES_L64=-I.. -I$(PIN_ROOT)/extras/xed2-intel64/include -I$(PIN_ROOT)/source/include -I$(PIN_ROOT)/source/include/gen 11INCLUDES_L32=-I.. -I$(PIN_ROOT)/extras/xed2-ia32/include -I$(PIN_ROOT)/source/include -I$(PIN_ROOT)/source/include/gen 12LIBPATHS_L64=-L$(PIN_ROOT)/extras/xed2-intel64/lib -L$(PIN_ROOT)/intel64/lib -L$(PIN_ROOT)/intel64/lib-ext 13LIBPATHS_L32=-L$(PIN_ROOT)/extras/xed2-ia32/lib -L$(PIN_ROOT)/ia32/lib -L$(PIN_ROOT)/ia32/lib-ext 14LDFLAGS_L=-g -shared -Wl,-Bsymbolic -Wl,--version-script=$(PIN_ROOT)/source/include/pintool.ver 15LIBS_L= -lpin -lxed -ldwarf -lelf -ldl -lpthread 16 17 18ifeq ($(OS), l) 19 SO=so 20 OBJ=o 21 CXX=g++ 22 LD=g++ 23 LIBS=$(LIBS_L) 24 ifeq ($(B), 64) 25 CXXFLAGS=$(CXXFLAGS_L) $(CXXFLAGS_L64) $(INCLUDES_L64) -m64 26 LDFLAGS=$(LDFLAGS_L) $(LIBPATHS_L64) -m64 27 else 28 CXXFLAGS=$(CXXFLAGS_L) $(CXXFLAGS_L32) $(INCLUDES_L32) -m32 29 LDFLAGS=$(LDFLAGS_L) $(LIBPATHS_L32) -m32 30 endif 31else ifeq ($(OS), w) 32 SO=dll 33 OBJ=obj 34 CXX=cl 35 LD=link 36 CXXFLAGS=/c /MT /EHs- /EHa- /wd4530 /DTARGET_WINDOWS /DBIGARRAY_MULTIPLIER=1 /DUSING_XED /D_CRT_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /nologo /Gy /O2 /DTARGET_IA32 /DHOST_IA32 \ 37 /I.. /I$(PIN_ROOT)/source/include /I$(PIN_ROOT)/source/include/gen /I$(PIN_ROOT)/extras/xed2-ia32/include 38 LDFLAGS=/DLL /EXPORT:main /NODEFAULTLIB /NOLOGO /INCREMENTAL:NO /OPT:REF /MACHINE:x86 /ENTRY:Ptrace_DllMainCRTStartup@12 /BASE:0x55000000 \ 39 /LIBPATH:$(PIN_ROOT)/ia32/lib /LIBPATH:$(PIN_ROOT)/ia32/lib-ext /LIBPATH:$(PIN_ROOT)/extras/xed2-ia32/lib 40 LIBS=pin.lib libxed.lib libcpmt.lib libcmt.lib pinvm.lib kernel32.lib ntdll-32.lib 41else 42 43endif 44 45ifeq ($(DEBUG), 1) 46 BUILD_SUFIX=_deb 47 DEFINES=-DDEBUG=1 48else 49 BUILD_SUFIX=_opt 50 DEFINES=-DINCLUDE_THREAD_SANITIZER_CC=1 51endif 52 53 54SUFIX=_${OS}$(B)$(BUILD_SUFIX) 55 56ALL_OBJECTS=ts_pin$(SUFIX).$(OBJ) ts_util$(SUFIX).$(OBJ) thread_sanitizer$(SUFIX).$(OBJ) 57 58all: 59 60pintool: ts_pin$(SUFIX).$(SO) 61 62l: l32 l64 63l64: l64o l64d 64l32: l32o l32d 65ld: l64d l32d 66lo: l64o l32o 67 68l64d: 69 $(MAKE) pintool OS=l B=64 DEBUG=1 70l64o: 71 $(MAKE) pintool OS=l B=64 DEBUG=0 72 73l32d: 74 $(MAKE) pintool OS=l B=32 DEBUG=1 75l32o: 76 $(MAKE) pintool OS=l B=32 DEBUG=0 77 78w32d: 79 $(MAKE) pintool OS=w B=32 DEBUG=1 80 81 82 83 84ts_pin$(SUFIX).so: $(ALL_OBJECTS) 85 $(LD) $(LDFLAGS) $(LIBPATHS) -o $@ $^ $(LIBS) 86 87ts_pin$(SUFIX).dll: $(ALL_OBJECTS) 88 $(LD) $(LDFLAGS) $(LIBPATHS) /IMPLIB:ts_pin$(SUFIX).lib /PDB:ts_pin$(SUFIX).pdb /OUT:$@ $^ $(LIBS) 89 90HEADERS=../thread_sanitizer.h ../ts_util.h 91 92 93%$(SUFIX).o: %.cc $(HEADERS) 94 $(CXX) $(CXXFLAGS) -o $@ -c $< $(DEFINES) 95%$(SUFIX).o: ../%.cc $(HEADERS) 96 $(CXX) $(CXXFLAGS) -o $@ -c $< $(DEFINES) 97 98%$(SUFIX).obj: %.cc $(HEADERS) 99 $(CXX) $(CXXFLAGS) /Fo$@ -c $< $(DEFINES) 100%$(SUFIX).obj: ../%.cc $(HEADERS) 101 $(CXX) $(CXXFLAGS) /Fo$@ -c $< $(DEFINES) 102 103 104#all_tests: simple_pin_test.so detach_example.so 105#%.so: %.$(OBJ) 106# $(CXX) $(LDFLAGS) $(LIBPATHS) -o $@ $< $(LIBS) 107# 108# 109win_test.exe: win_test.cpp 110 cl /Zi $< 111 112 113clean: 114 rm -fv *.so *.o *.obj *.dll core* pintool.log* pin.log *.exp *.lib *.pdb *.ilk *.exe 115