OSDN Git Service

Updated Makefile.
[mhash384/mhash384.git] / Makefile
1 SHELL = /bin/bash
2
3 #############################################################################
4 # BUILD OPTIONS
5 #############################################################################
6
7 CPLUSPLUS ?= 0
8 STATIC    ?= 0
9 CPU_TYPE  ?= native
10 NO_JAVA   ?= 0
11 NO_PYTHON ?= 0
12
13
14 #############################################################################
15 # CONFIGURATION
16 #############################################################################
17
18 ROOT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
19 ISO_DATE := $(shell date "+%Y-%m-%d")
20 CM_FLAGS := -I$(ROOT_DIR)/include
21 RL_FLAGS := -DNDEBUG -O3 -march=$(CPU_TYPE)
22 DB_FLAGS := -g
23 PD_FLAGS := --from markdown --to html5 --toc -N --standalone
24
25 ifdef ARCH
26   CM_FLAGS += $(if $(filter x64,$(ARCH)),-m64,-m32)
27 else
28   ARCH := $(if $(findstring x86_64,$(shell $(CXX) -v 2>&1 | grep "Target:")),x64,x86)
29 endif
30
31 ifeq ($(STATIC),1)
32   CM_FLAGS += -static
33 endif
34
35 ifeq ($(OS),Windows_NT)
36   OSTYPE := mingw
37   JNIDIR := win32
38   SUFFIX := .exe
39   DLLEXT := .dll
40   DLLOPT := -shared
41 else
42   OSTYPE := linux
43   JNIDIR := linux
44   SUFFIX :=
45   DLLEXT := .so
46   DLLOPT += -fPIC -shared
47 endif
48
49
50 #############################################################################
51 # FILE NAMES
52 #############################################################################
53
54 TXT := $(ROOT_DIR)COPYING.txt
55 DOC := $(ROOT_DIR)README.html 
56
57 ifeq ($(CPLUSPLUS),1)
58   CLI_CXX := g++
59   CLI_SRC := $(wildcard $(ROOT_DIR)/src/*.cpp)
60 else
61   CLI_CXX := gcc
62   CLI_SRC := $(wildcard $(ROOT_DIR)/src/*.c)
63 endif
64
65 CLI_BIN := $(ROOT_DIR)bin/mhash_384.$(ARCH)$(SUFFIX)
66 CLI_DBG := $(BIN).dbg
67 CLI_OUT := $(ROOT_DIR)out/mhash_384.$(ISO_DATE).bin-$(OSTYPE)-$(ARCH).tar.gz
68
69 JNI_SRC := $(wildcard $(ROOT_DIR)bindings/Java/native/src/*.cpp)
70 JNI_INC := $(ROOT_DIR)bindings/Java/native/include
71 JNI_BIN := $(ROOT_DIR)bindings/Java/native/bin/MHashJava384.$(ARCH)$(DLLEXT)
72 JNI_JAR := $(ROOT_DIR)bindings/Java/wrapper/out/MHashJava384-Wrapper.jar
73 JNI_GUI := $(ROOT_DIR)bindings/Java/example/out/MHashJava384-Example.jar
74 JNI_OUT := $(ROOT_DIR)out/mhash_384.$(ISO_DATE).java-$(OSTYPE)-$(ARCH).tar.gz
75
76 #############################################################################
77 # TARGETS
78 #############################################################################
79
80 TARGETS = $(CLI_OUT)
81
82 ifneq ($(NO_JAVA),1)
83   TARGETS += $(JNI_OUT)
84 endif
85
86
87 #############################################################################
88 # MAKE RULES
89 #############################################################################
90
91 .PHONY: all clean
92
93 all: $(TARGETS)
94
95 # -----------------------------------------------
96 # PACKAGE
97 # -----------------------------------------------
98
99 $(CLI_OUT): $(CLI_BIN) $(CLI_DBG) $(DOC) $(TXT)
100         mkdir -p $(dir $@)
101         rm -fv $@
102         tar -czf $@ -C $(dir $(DOC)) $(notdir $(DOC)) -C $(dir $(TXT)) $(notdir $(TXT)) -C $(dir $(CLI_BIN)) $(notdir $(CLI_BIN))
103
104 $(JNI_OUT): $(JNI_BIN) $(JNI_JAR) $(JNI_GUI) $(DOC) $(TXT)
105         mkdir -p $(dir $@)
106         rm -fv $@
107         tar -czf $@ -C $(dir $(DOC)) $(notdir $(DOC)) -C $(dir $(TXT)) $(notdir $(TXT)) -C $(dir $(JNI_BIN)) $(notdir $(JNI_BIN)) -C $(dir $(JNI_JAR)) $(notdir $(JNI_JAR)) -C $(dir $(JNI_GUI)) $(notdir $(JNI_GUI))
108
109 # -----------------------------------------------
110 # COMPILE
111 # -----------------------------------------------
112
113 $(CLI_BIN): $(CLI_SRC)
114         mkdir -p $(dir $@)
115         $(CLI_CXX) $(CM_FLAGS) $(RL_FLAGS) -o $@ $^
116         strip -s $@
117
118 $(CLI_DBG): $(CLI_SRC)
119         mkdir -p $(dir $@)
120         $(CLI_CXX) $(CM_FLAGS) $(DB_FLAGS) -o $@ $^
121
122 $(JNI_BIN): $(JNI_SRC)
123         mkdir -p $(dir $@)
124         g++ $(CM_FLAGS) $(RL_FLAGS) $(DLLOPT) -I$(JNI_INC) -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(JNIDIR) -o $@ $^
125         strip -s $@
126
127 $(JNI_JAR): $(abspath $(dir $(JNI_JAR))/../build.xml)
128         mkdir -p $(dir $@)
129         pushd $(dir $^) && ant clean jar
130
131 $(JNI_GUI): $(abspath $(dir $(JNI_GUI))/../build.xml)
132         mkdir -p $(dir $@)
133         pushd $(dir $^) && ant clean jar
134
135 # -----------------------------------------------
136 # DOCUMENTS
137 # -----------------------------------------------
138
139 %.html: %.md
140         pandoc $(PD_FLAGS) --output $@ $^
141
142 # -----------------------------------------------
143 # CLEAN UP
144 # -----------------------------------------------
145
146 clean:
147         rm -fv $(CLI_BIN) $(CLI_DBG) $(CLI_OUT)
148         rm -fv $(JNI_BIN) $(JNI_JAR) $(JNI_GUI) $(JNI_OUT)
149         rm -fv $(DOC)