OSDN Git Service

Documentation updates.
[mhash384/mhash384.git] / Makefile
1 SHELL = /bin/bash
2
3 #############################################################################
4 # BUILD OPTIONS
5 #############################################################################
6
7 CPLUSPLUS ?= 0
8 WITH_JAVA ?= 1
9
10 CPU_ARCH ?= native
11 CPU_TUNE ?= generic
12
13
14 #############################################################################
15 # CONFIGURATION
16 #############################################################################
17
18 ifdef ARCH
19   CM_FLAGS += $(if $(filter x64,$(ARCH)),-m64,-m32)
20 else
21   ARCH := $(if $(findstring x86_64,$(shell $(CXX) -v 2>&1 | grep "Target:")),x64,x86)
22 endif
23
24 ifeq ($(OS),Windows_NT)
25   OSTYPE := mingw
26   JNIDIR := win32
27   BINEXT := .exe
28   DLLEXT := .dll
29   DLLOPT := -shared
30 else
31   OSTYPE := linux
32   JNIDIR := linux
33   BINEXT := .run
34   DLLEXT := .so
35   DLLOPT := -fPIC -shared
36 endif
37
38 ROOT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
39 WORK_DIR := /tmp/$(shell head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12)
40 ISO_DATE := $(shell date "+%Y-%m-%d")
41
42 CM_FLAGS := -I$(ROOT_DIR)/include
43 RL_FLAGS := -DNDEBUG -O3 -march=$(CPU_ARCH) -mtune=$(CPU_TUNE)
44 DB_FLAGS := -g
45 EX_FLAGS := -static
46 SO_FLAGS := $(DLLOPT) -static-libgcc -static-libstdc++
47 PD_FLAGS := --from markdown --to html5 --toc -N --standalone
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)$(BINEXT)
66 CLI_DBG := $(ROOT_DIR)bin/mhash_384_g.$(ARCH)$(BINEXT)
67 CLI_OUT := $(ROOT_DIR)out/mhash_384.$(ISO_DATE).$(OSTYPE)-$(ARCH).tar.gz
68
69 JAV_JAR := $(ROOT_DIR)bindings/Java/library/out/MHashJava384.jar
70 JAV_GUI := $(ROOT_DIR)bindings/Java/example/out/MHashJava384-Example.jar
71 JAV_OUT := $(ROOT_DIR)out/mhash_384.$(ISO_DATE).java.tar.gz
72
73 PYT_LIB := $(ROOT_DIR)bindings/Python/library/MHashPy384.py
74 PYT_GUI := $(ROOT_DIR)bindings/Python/example/MHashPy384_Example.py
75 PYT_BIN := $(ROOT_DIR)bindings/Python/native/bin/MHashPy384_Native.$(ARCH)$(PYDEXT)
76 PYT_OUT := $(ROOT_DIR)out/mhash_384.$(ISO_DATE).python.tar.gz
77
78
79 #############################################################################
80 # TARGETS
81 #############################################################################
82
83 TARGETS = $(CLI_OUT) $(PYT_OUT)
84
85 ifeq ($(WITH_JAVA),1)
86   TARGETS += $(JAV_OUT)
87 endif
88
89
90 #############################################################################
91 # MAKE RULES
92 #############################################################################
93
94 .PHONY: all clean
95
96 all: $(TARGETS)
97
98 # -----------------------------------------------
99 # PACKAGE
100 # -----------------------------------------------
101
102 $(CLI_OUT): $(CLI_BIN) $(CLI_DBG) $(DOC) $(TXT)
103         mkdir -p $(dir $@) $(WORK_DIR)
104         rm -fv $@ $(WORK_DIR)/*
105         cp $(DOC) $(TXT) $(CLI_BIN) $(WORK_DIR)
106         pushd $(WORK_DIR) && tar -czf $@ *
107
108 $(JAV_OUT): $(JAV_JAR) $(JAV_GUI) $(DOC) $(TXT)
109         mkdir -p $(dir $@) $(WORK_DIR)
110         rm -fv $@ $(WORK_DIR)/*
111         cp $(DOC) $(TXT) $(JAV_JAR) $(JAV_GUI) $(WORK_DIR)
112         pushd $(WORK_DIR) && tar -czf $@ *
113
114 $(PYT_OUT): $(PYT_LIB) $(PYT_GUI) $(DOC) $(TXT)
115         mkdir -p $(dir $@) $(WORK_DIR)
116         rm -fv $@ $(WORK_DIR)/*
117         cp $(DOC) $(TXT) $(PYT_LIB) $(PYT_GUI) $(WORK_DIR)
118         pushd $(WORK_DIR) && tar -czf $@ *
119
120 # -----------------------------------------------
121 # COMPILE
122 # -----------------------------------------------
123
124 $(CLI_BIN): $(CLI_SRC)
125         mkdir -p $(dir $@)
126         $(CLI_CXX) $(CM_FLAGS) $(EX_FLAGS) $(RL_FLAGS) -o $@ $^
127         strip -s $@
128
129 $(CLI_DBG): $(CLI_SRC)
130         mkdir -p $(dir $@)
131         $(CLI_CXX) $(CM_FLAGS) $(EX_FLAGS) $(DB_FLAGS) -o $@ $^
132
133 $(JAV_JAR): $(abspath $(dir $(JAV_JAR))/../build.xml)
134         mkdir -p $(dir $@)
135         pushd $(dir $^) && ant clean jar
136
137 $(JAV_GUI): $(abspath $(dir $(JAV_GUI))/../build.xml)
138         mkdir -p $(dir $@)
139         pushd $(dir $^) && ant clean jar
140
141 # -----------------------------------------------
142 # DOCUMENTS
143 # -----------------------------------------------
144
145 %.html: %.md
146         pandoc $(PD_FLAGS) --output $@ $^
147
148 # -----------------------------------------------
149 # CLEAN UP
150 # -----------------------------------------------
151
152 clean:
153         rm -fv $(CLI_BIN) $(CLI_DBG) $(CLI_OUT)
154         rm -fv $(JAV_BIN) $(JAV_JAR) $(JAV_GUI) $(JAV_OUT)
155         rm -fv $(PYT_BIN) $(PYT_OUT)
156         rm -fv $(DOC)
157