summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Makefile62
1 files changed, 62 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..6d3a4ab
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,62 @@
1OPTIMIZE ?= -O3
2DEBUG ?= -g
3
4AR ?= ar
5CXX ?= g++
6
7CXXFLAGS := -Wall -Werror -std=c++20 -fPIC -iquote . ${OPTIMIZE} ${DEBUG}
8
9PARTS := $(shell find * -type d -\( -name build -prune -o -print -\))
10PARTARS := $(addprefix build/lib, $(addsuffix .a, ${PARTS}))
11PARTSOS := $(addprefix build/lib, $(addsuffix .so, ${PARTS}))
12
13MAINOBJS := $(addprefix build/, $(addsuffix .o, $(basename $(wildcard *.cpp))))
14MAINOBJS += build/git-tag.o
15
16all: issim
17
18issim: build/issim-dynamic
19 @ln -sf $< $@
20.PHONY: issim
21
22issim-static: build/issim-static
23 @ln -sf $< $@
24.PHONY: issim-static
25
26build/issim-dynamic: ${MAINOBJS} ${PARTSOS}
27 @mkdir -p $(dir $@)
28 ${CXX} ${CXXFLAGS} -o $@ $+
29
30build/issim-static: ${MAINOBJS} ${PARTARS}
31 @mkdir -p $(dir $@)
32 ${CXX} ${CXXFLAGS} -o $@ $+
33
34clean:
35 rm -rf build issim issim-static
36.PHONY: clean
37
38build/git-tag.cpp:
39 @mkdir -p $(dir $@)
40 ./get-git-tag > $@
41.PHONY: build/git-tag.cpp
42
43build/%.o: %.cpp Makefile
44 @mkdir -p $(dir $@)
45 ${CXX} ${CXXFLAGS} -c -o $@ $<
46
47build/%.o: build/%.cpp Makefile
48 @mkdir -p $(dir $@)
49 ${CXX} ${CXXFLAGS} -c -o $@ $<
50
51.SUFFIXES:
52.SECONDARY:
53
54.SECONDEXPANSION:
55
56build/lib%.a: $$(addprefix build/, $$(addsuffix .o, $$(basename $$(wildcard %/*.cpp))))
57 @mkdir -p $(dir $@)
58 ${AR} cr $@ $+
59
60build/lib%.so: $$(addprefix build/, $$(addsuffix .o, $$(basename $$(wildcard %/*.cpp))))
61 @mkdir -p $(dir $@)
62 ${CXX} ${CXXFLAGS} -shared -o $@ $+