### On mingw use Windows threads, otherwise POSIX
ifneq ($(comp),mingw)
- # Haiku has pthreads in its libroot, so only link it in on other platforms
- ifneq ($(UNAME),Haiku)
- LDFLAGS += -lpthread
+ # On Android Bionic's C library comes with its own pthread implementation bundled in
+ ifneq ($(arch),armv7)
+ # Haiku has pthreads in its libroot, so only link it in on other platforms
+ ifneq ($(UNAME),Haiku)
+ LDFLAGS += -lpthread
+ endif
endif
endif
ifeq ($(debug),no)
CXXFLAGS += -DNDEBUG
else
- CXXFLAGS += -g
+ CXXFLAGS += -g
endif
### 3.5 Optimization
endif
ifeq ($(arch),armv7)
- CXXFLAGS += -fno-gcse
+ CXXFLAGS += -fno-gcse -mthumb -march=armv7-a -mfloat-abi=softfp
endif
endif
@echo ""
@echo "Supported targets:"
@echo ""
- @echo "build > Build unoptimized version"
- @echo "profile-build > Build PGO-optimized version"
- @echo "strip > Strip executable"
- @echo "install > Install executable"
- @echo "clean > Clean up"
- @echo "testrun > Make sample run"
+ @echo "build > Standard build"
+ @echo "signature-build > Standard build with embedded signature"
+ @echo "profile-build > PGO build"
+ @echo "signature-profile-build > PGO build with embedded signature"
+ @echo "strip > Strip executable"
+ @echo "install > Install executable"
+ @echo "clean > Clean up"
@echo ""
@echo "Supported archs:"
@echo ""
- @echo "x86-64 > x86 64-bit"
- @echo "x86-64-modern > x86 64-bit with runtime support for popcnt instruction"
- @echo "x86-32 > x86 32-bit excluding old hardware without SSE-support"
- @echo "x86-32-old > x86 32-bit including also very old hardware"
- @echo "osx-ppc-64 > PPC-Mac OS X 64 bit"
- @echo "osx-ppc-32 > PPC-Mac OS X 32 bit"
- @echo "osx-x86-64 > x86-Mac OS X 64 bit"
- @echo "osx-x86-32 > x86-Mac OS X 32 bit"
- @echo "armv7 > ARMv7 32 bit"
- @echo "general-64 > unspecified 64-bit"
- @echo "general-32 > unspecified 32-bit"
+ @echo "x86-64 > x86 64-bit"
+ @echo "x86-64-modern > x86 64-bit with popcnt support"
+ @echo "x86-32 > x86 32-bit with SSE support"
+ @echo "x86-32-old > x86 32-bit fall back for old hardware"
+ @echo "osx-ppc-64 > PPC-Mac OS X 64 bit"
+ @echo "osx-ppc-32 > PPC-Mac OS X 32 bit"
+ @echo "osx-x86-64 > x86-Mac OS X 64 bit"
+ @echo "osx-x86-32 > x86-Mac OS X 32 bit"
+ @echo "armv7 > ARMv7 32 bit"
+ @echo "general-64 > unspecified 64-bit"
+ @echo "general-32 > unspecified 32-bit"
@echo ""
- @echo "Supported comps:"
+ @echo "Supported compilers:"
@echo ""
- @echo "gcc > Gnu compiler (default)"
- @echo "icc > Intel compiler"
- @echo "mingw > Gnu compiler with MinGW under Windows"
- @echo "clang > LLVM Clang compiler"
+ @echo "gcc > Gnu compiler (default)"
+ @echo "mingw > Gnu compiler with MinGW under Windows"
+ @echo "clang > LLVM Clang compiler"
+ @echo "icc > Intel compiler"
@echo ""
@echo "Non-standard targets:"
@echo ""
- @echo "make hpux > Compile for HP-UX. Compiler = aCC"
+ @echo "make hpux > Compile for HP-UX. Compiler = aCC"
@echo ""
@echo "Examples. If you don't know what to do, you likely want to run: "
@echo ""
- @echo "make profile-build ARCH=x86-64 (This is for 64-bit systems)"
- @echo "make profile-build ARCH=x86-32 (This is for 32-bit systems)"
+ @echo "make build ARCH=x86-64 (This is for 64-bit systems)"
+ @echo "make build ARCH=x86-32 (This is for 32-bit systems)"
@echo ""
+.PHONY: build profile-build embed-signature
build:
$(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity
$(MAKE) ARCH=$(ARCH) COMP=$(COMP) all
-signature-build:
- $(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity
- $(MAKE) ARCH=$(ARCH) COMP=$(COMP) all
- @echo "Running benchmark for getting the signature ..."
- @$(SIGNBENCH) 2>&1 | grep 'Nodes searched' | grep -o ": .*" | tr -d ': ' > sign.txt
- @sed -i -e 's,^,/static const string Version/s/"\\(.*\\)"/"sig-,1' -e 's,$$,"/1,1' sign.txt
- @sed -i -f sign.txt misc.cpp
- @rm sign.txt
- $(MAKE) ARCH=$(ARCH) COMP=$(COMP) all
-
profile-build:
$(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity
@echo ""
@echo "Step 4/4. Deleting profile data ..."
$(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_clean)
+embed-signature:
+ @echo "Running benchmark for getting the signature ..."
+ @$(SIGNBENCH) 2>&1 | sed -n 's/Nodes searched : \(.*\)/\/string Version\/s\/"\\(.*\\)"\/"sig-\1"\//p' > sign.txt
+ @sed -f sign.txt misc.cpp > misc2.cpp
+ @mv misc2.cpp misc.cpp
+ @rm sign.txt
+
+signature-build: build embed-signature
+ $(MAKE) ARCH=$(ARCH) COMP=$(COMP) all
+
+signature-profile-build: build embed-signature profile-build
+
strip:
strip $(EXE)
clean:
$(RM) $(EXE) $(EXE).exe *.o .depend *~ core bench.txt *.gcda
-testrun:
- @$(PGOBENCH)
-
default:
help