3 #############################################################################
5 #############################################################################
13 #############################################################################
15 #############################################################################
18 CM_FLAGS += $(if $(filter x64,$(ARCH)),-m64,-m32)
20 ARCH := $(if $(findstring x86_64,$(shell $(CXX) -v 2>&1 | grep "Target:")),x64,x86)
23 ifeq ($(OS),Windows_NT)
39 ROOT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
40 WORK_DIR := /tmp/$(shell head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12)
41 ISO_DATE := $(shell date "+%Y-%m-%d")
43 CM_FLAGS := -I$(ROOT_DIR)/include
44 RL_FLAGS := -DNDEBUG -O3 -march=$(CPU_TYPE)
47 SO_FLAGS := -shared $(DLLOPT) -static-libgcc -static-libstdc++
48 PD_FLAGS := --from markdown --to html5 --toc -N --standalone
51 #############################################################################
53 #############################################################################
56 ifneq ($(notdir $(realpath $(JAVA_HOME)/include/jni.h)),jni.h)
57 $(error $$(JAVA_HOME)/include/jni.h not found! Please make sure JAVA_HOME is set correctly)
61 ifneq ($(NO_PYTHON),1)
62 ifneq ($(notdir $(realpath $(PYTHON_INC)/Python.h)),Python.h)
63 $(error $$(PYTHON_INC)/Python.h not found! Please make sure PYTHON_INC is set correctly)
68 #############################################################################
70 #############################################################################
72 TXT := $(ROOT_DIR)COPYING.txt
73 DOC := $(ROOT_DIR)README.html
77 CLI_SRC := $(wildcard $(ROOT_DIR)/src/*.cpp)
80 CLI_SRC := $(wildcard $(ROOT_DIR)/src/*.c)
83 CLI_BIN := $(ROOT_DIR)bin/mhash_384.$(ARCH)$(BINEXT)
85 CLI_OUT := $(ROOT_DIR)out/mhash_384.$(ISO_DATE).bin-$(OSTYPE)-$(ARCH).tar.gz
87 JNI_SRC := $(wildcard $(ROOT_DIR)bindings/Java/native/src/*.cpp)
88 JNI_INC := $(ROOT_DIR)bindings/Java/native/include
89 JNI_BIN := $(ROOT_DIR)bindings/Java/native/bin/MHashJava384.$(ARCH)$(DLLEXT)
90 JNI_JAR := $(ROOT_DIR)bindings/Java/wrapper/out/MHashJava384-Wrapper.jar
91 JNI_GUI := $(ROOT_DIR)bindings/Java/example/out/MHashJava384-Example.jar
92 JNI_OUT := $(ROOT_DIR)out/mhash_384.$(ISO_DATE).java-$(OSTYPE)-$(ARCH).tar.gz
94 PYC_SRC := $(wildcard $(ROOT_DIR)bindings/Python/native/src/*.cpp)
95 PYC_PTH := $(ROOT_DIR)bindings/Python/wrapper/mhash.pth
96 PYC_LIB := $(ROOT_DIR)bindings/Python/wrapper/MHashPy384_Wrapper.py
97 PYC_GUI := $(ROOT_DIR)bindings/Python/example/MHashPy384_Example.py
98 PYC_BIN := $(ROOT_DIR)bindings/Python/native/bin/MHashPy384_Native.$(ARCH)$(PYDEXT)
99 PYC_OUT := $(ROOT_DIR)out/mhash_384.$(ISO_DATE).python-$(OSTYPE)-$(ARCH).tar.gz
102 #############################################################################
104 #############################################################################
109 TARGETS += $(JNI_OUT)
112 ifneq ($(NO_PYTHON),1)
113 TARGETS += $(PYC_OUT)
117 #############################################################################
119 #############################################################################
125 # -----------------------------------------------
127 # -----------------------------------------------
129 $(CLI_OUT): $(CLI_BIN) $(CLI_DBG) $(DOC) $(TXT)
130 mkdir -p $(dir $@) $(WORK_DIR)
131 rm -fv $@ $(WORK_DIR)/*
132 cp $(DOC) $(TXT) $(CLI_BIN) $(WORK_DIR)
133 pushd $(WORK_DIR) && tar -czf $@ *
135 $(JNI_OUT): $(JNI_BIN) $(JNI_JAR) $(JNI_GUI) $(DOC) $(TXT)
136 mkdir -p $(dir $@) $(WORK_DIR)
137 rm -fv $@ $(WORK_DIR)/*
138 cp $(DOC) $(TXT) $(JNI_BIN) $(JNI_JAR) $(JNI_GUI) $(WORK_DIR)
139 pushd $(WORK_DIR) && tar -czf $@ *
141 $(PYC_OUT): $(PYC_BIN) $(PYC_LIB) $(PYC_PTH) $(PYC_GUI) $(DOC) $(TXT)
142 mkdir -p $(dir $@) $(WORK_DIR)
143 rm -fv $@ $(WORK_DIR)/*
144 cp $(DOC) $(TXT) $(PYC_BIN) $(PYC_LIB) $(PYC_PTH) $(PYC_GUI) $(WORK_DIR)
145 pushd $(WORK_DIR) && tar -czf $@ *
147 # -----------------------------------------------
149 # -----------------------------------------------
151 $(CLI_BIN): $(CLI_SRC)
153 $(CLI_CXX) $(CM_FLAGS) $(EX_FLAGS) $(RL_FLAGS) -o $@ $^
156 $(CLI_DBG): $(CLI_SRC)
158 $(CLI_CXX) $(CM_FLAGS) $(EX_FLAGS) $(DB_FLAGS) -o $@ $^
160 $(JNI_BIN): $(JNI_SRC)
162 g++ $(CM_FLAGS) $(SO_FLAGS) $(RL_FLAGS) -I$(JNI_INC) -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(JNIDIR) -o $@ $^
165 $(PYC_BIN): $(PYC_SRC)
167 g++ $(CM_FLAGS) $(SO_FLAGS) $(RL_FLAGS) -I$(PYTHON_INC) -o $@ $^
170 $(JNI_JAR): $(abspath $(dir $(JNI_JAR))/../build.xml)
172 pushd $(dir $^) && ant clean jar
174 $(JNI_GUI): $(abspath $(dir $(JNI_GUI))/../build.xml)
176 pushd $(dir $^) && ant clean jar
178 # -----------------------------------------------
180 # -----------------------------------------------
183 pandoc $(PD_FLAGS) --output $@ $^
185 # -----------------------------------------------
187 # -----------------------------------------------
190 rm -fv $(CLI_BIN) $(CLI_DBG) $(CLI_OUT)
191 rm -fv $(JNI_BIN) $(JNI_JAR) $(JNI_GUI) $(JNI_OUT)
192 rm -fv $(PYC_BIN) $(PYC_OUT)