OSDN Git Service

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