-
Notifications
You must be signed in to change notification settings - Fork 7
/
Makefile
68 lines (47 loc) · 1.74 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
CXX = clang++
CXXFLAGS = -std=c++17 -Wall -Wextra -pedantic -O3
DEPFLAGS = -MMD -MF $(@:.o=.d)
LDFLAGS =
EMCCFLAGS = -O3 -s WASM=1 -s EXPORTED_FUNCTIONS="['_rainbowHash64', '_rainbowHash128', '_rainbowHash256', 'stringToUTF8', 'lengthBytesUTF8', '_malloc', '_free']" -s EXPORTED_RUNTIME_METHODS="['wasmExports', 'ccall', 'cwrap']" -s WASM_BIGINT=1 -s ALLOW_MEMORY_GROWTH=1 -g
OBJDIR = rain/obj
BUILDDIR = rain/bin
SRCS = $(wildcard src/*.cpp)
OBJS = $(addprefix $(OBJDIR)/,$(notdir $(SRCS:.cpp=.o)))
DEPS = $(OBJS:.o=.d)
WASMDIR = js/wasm
STORM_WASM_SOURCE = src/rainstorm.cpp
BOW_WASM_SOURCE = src/rainbow.cpp
WASM_OUTPUT = docs/rain.wasm
JS_OUTPUT = docs/rain.cjs
all: directories node_modules rainsum link rainwasm
directories: ${OBJDIR} ${BUILDDIR} ${WASMDIR}
${OBJDIR}:
mkdir -p ${OBJDIR}
node_modules:
@(test ! -d ./js/node_modules && cd js && npm i && cd ..) || :
@(test ! -d ./scripts/node_modules && cd scripts && npm i && cd ..) || :
${BUILDDIR}:
mkdir -p ${BUILDDIR}
${WASMDIR}:
mkdir -p ${WASMDIR}
rainsum: $(OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $(BUILDDIR)/$@ $^
$(OBJDIR)/%.o: src/%.cpp
$(CXX) $(CXXFLAGS) $(DEPFLAGS) -c $< -o $@
rainwasm: $(WASM_OUTPUT) $(JS_OUTPUT)
$(WASM_OUTPUT) $(JS_OUTPUT): $(STORM_WASM_SOURCE) $(BOW_WASM_SOURCE)
@[ -d docs ] || mkdir -p docs
@[ -d ${WASMDIR} ] || mkdir -p ${WASMDIR}
emcc $(EMCCFLAGS) -o docs/rain.html $(STORM_WASM_SOURCE) $(BOW_WASM_SOURCE)
mv docs/rain.js $(JS_OUTPUT)
cp $(WASM_OUTPUT) $(JS_OUTPUT) ${WASMDIR}
rm docs/rain.html
link:
@ln -sf rain/bin/rainsum
.PHONY: install
install: rainsum
cp $(BUILDDIR)/rainsum /usr/local/bin/
-include $(DEPS)
.PHONY: clean
clean:
rm -rf $(OBJDIR) $(BUILDDIR) rainsum $(WASMDIR) js/node_modules scripts/node_modules $(WASM_OUTPUT) $(JS_OUTPUT)