Details | Last modification | View Log
Rev | Author | Line No. | Line |
---|---|---|---|
125 | lvd | 1 | # Makefile for sjasmplus created by Tygrys' hands. |
2 | # install/uninstall features added, CFLAGS and LDFLAGS modification by z00m's hands. [05.05.2016] |
||
3 | # overall optimization and beautification by mborik's hands. [05.05.2016] |
||
4 | # overall rewrite by Ped7g [2019-03-21] |
||
5 | |||
6 | ## Some examples of my usage of this Makefile: |
||
7 | # make DEBUG=1 - to get DEBUG build |
||
8 | # make tests - to run the CI test+example script runner |
||
9 | # make memcheck TEST=misc DEBUG=1 - to use valgrind on assembling sub-directory "misc" in tests |
||
10 | # make PREFIX=~/.local install - to install release version into ~/.local/bin/ |
||
11 | # make clean && make CC=gcc-8 CXX=g++-8 - to compile binary with gcc-8 |
||
12 | |||
13 | # set up CC+CXX explicitly, because windows MinGW/MSYS environment don't have it set up |
||
14 | CC=gcc |
||
15 | CXX=g++ |
||
16 | BASH=/bin/bash |
||
17 | |||
18 | PREFIX=/usr/local |
||
19 | INSTALL=install -c |
||
20 | UNINSTALL=rm -vf |
||
21 | REMOVEDIR=rm -vdf |
||
22 | DOCBOOKGEN=xsltproc |
||
23 | MEMCHECK=valgrind --leak-check=yes |
||
24 | |||
25 | EXE := sjasmplus |
||
26 | BUILD_DIR := build |
||
27 | |||
28 | SUBDIR_BASE=sjasm |
||
29 | SUBDIR_LUA=lua5.1 |
||
30 | SUBDIR_TOLUA=tolua++ |
||
31 | SUBDIR_DOCS=docs |
||
32 | |||
33 | CFLAGS := -Wall -pedantic -DUSE_LUA -DLUA_USE_LINUX -DMAX_PATH=PATH_MAX -I$(SUBDIR_LUA) -I$(SUBDIR_TOLUA) |
||
34 | LDFLAGS := -ldl |
||
35 | |||
36 | ifdef DEBUG |
||
37 | BUILD_DIR := $(BUILD_DIR)/debug |
||
38 | CFLAGS += -g -O0 |
||
39 | else |
||
40 | BUILD_DIR := $(BUILD_DIR)/release |
||
41 | CFLAGS += -DNDEBUG -O2 |
||
42 | # for Linux (added strip flag) |
||
43 | LDFLAGS += -s |
||
44 | endif |
||
45 | |||
46 | # C++ flags (the CPPFLAGS are for preprocessor BTW, if you always wonder, like me...) |
||
47 | #CXXFLAGS = -std=gnu++14 $(CFLAGS) |
||
48 | CXXFLAGS = -std=gnu++11 $(CFLAGS) |
||
49 | #full path to executable |
||
50 | EXE_FP := "$(CURDIR)/$(BUILD_DIR)/$(EXE)" |
||
51 | |||
52 | # turns list of %.c/%.cpp files into $BUILD_DIR/%.o list |
||
53 | define object_files |
||
54 | $(addprefix $(BUILD_DIR)/, $(patsubst %.c,%.o, $(patsubst %.cpp,%.o, $(1)))) |
||
55 | endef |
||
56 | |||
57 | # sjasmplus files |
||
58 | SRCS := $(wildcard $(SUBDIR_BASE)/*.c) $(wildcard $(SUBDIR_BASE)/*.cpp) |
||
59 | OBJS := $(call object_files,$(SRCS)) |
||
60 | |||
61 | # liblua files |
||
62 | LUASRCS := $(wildcard $(SUBDIR_LUA)/*.c) |
||
63 | LUAOBJS := $(call object_files,$(LUASRCS)) |
||
64 | |||
65 | # tolua files |
||
66 | TOLUASRCS := $(wildcard $(SUBDIR_TOLUA)/*.c) |
||
67 | TOLUAOBJS := $(call object_files,$(TOLUASRCS)) |
||
68 | |||
69 | #implicit rules to compile C/CPP files into $(BUILD_DIR) |
||
70 | $(BUILD_DIR)/%.o : %.c |
||
71 | @mkdir -p $(@D) |
||
72 | $(COMPILE.c) $(OUTPUT_OPTION) $< |
||
73 | |||
74 | $(BUILD_DIR)/%.o : %.cpp |
||
75 | @mkdir -p $(@D) |
||
76 | $(COMPILE.cc) $(OUTPUT_OPTION) $< |
||
77 | |||
78 | .PHONY: all install uninstall clean docs tests memcheck |
||
79 | |||
80 | # "all" will also copy the produced binary into project root directory (to mimick old makefile) |
||
81 | all: $(EXE_FP) |
||
82 | cp $(EXE_FP) $(EXE) |
||
83 | |||
84 | $(EXE_FP): $(LUAOBJS) $(TOLUAOBJS) $(OBJS) |
||
85 | $(CXX) -o $(EXE_FP) $(CXXFLAGS) $(OBJS) $(LUAOBJS) $(TOLUAOBJS) $(LDFLAGS) |
||
86 | |||
87 | install: $(EXE_FP) |
||
88 | $(INSTALL) $(EXE_FP) $(PREFIX)/bin |
||
89 | |||
90 | uninstall: |
||
91 | $(UNINSTALL) $(PREFIX)/bin/$(EXE) |
||
92 | |||
93 | tests: $(EXE_FP) |
||
94 | ifdef TEST |
||
95 | EXE=$(EXE_FP) $(BASH) "$(CURDIR)/ContinuousIntegration/test_folder_tests.sh" $(TEST) |
||
96 | else |
||
97 | EXE=$(EXE_FP) $(BASH) "$(CURDIR)/ContinuousIntegration/test_folder_tests.sh" |
||
98 | @EXE=$(EXE_FP) $(BASH) "$(CURDIR)/ContinuousIntegration/test_folder_examples.sh" |
||
99 | endif |
||
100 | |||
101 | memcheck: $(EXE_FP) |
||
102 | ifdef TEST |
||
103 | MEMCHECK="$(MEMCHECK)" EXE=$(EXE_FP) $(BASH) "$(CURDIR)/ContinuousIntegration/test_folder_tests.sh" $(TEST) |
||
104 | else |
||
105 | MEMCHECK="$(MEMCHECK)" EXE=$(EXE_FP) $(BASH) "$(CURDIR)/ContinuousIntegration/test_folder_tests.sh" |
||
106 | MEMCHECK="$(MEMCHECK)" EXE=$(EXE_FP) $(BASH) "$(CURDIR)/ContinuousIntegration/test_folder_examples.sh" |
||
107 | endif |
||
108 | |||
109 | docs: $(SUBDIR_DOCS)/documentation.html ; |
||
110 | |||
111 | $(SUBDIR_DOCS)/documentation.html: Makefile $(wildcard $(SUBDIR_DOCS)/*.xml) $(wildcard $(SUBDIR_DOCS)/*.xsl) |
||
112 | $(DOCBOOKGEN) \ |
||
113 | --stringparam html.stylesheet docbook.css \ |
||
114 | --stringparam generate.toc "book toc" \ |
||
115 | -o $(SUBDIR_DOCS)/documentation.html \ |
||
116 | $(SUBDIR_DOCS)/docbook-xsl-ns-html-customization-linux.xsl \ |
||
117 | $(SUBDIR_DOCS)/documentation.xml |
||
118 | |||
119 | clean: |
||
120 | $(UNINSTALL) \ |
||
121 | $(EXE) \ |
||
122 | $(BUILD_DIR)/$(EXE) \ |
||
123 | $(LUAOBJS) \ |
||
124 | $(TOLUAOBJS) \ |
||
125 | $(OBJS) |
||
126 | $(REMOVEDIR) \ |
||
127 | $(BUILD_DIR)/$(SUBDIR_BASE) \ |
||
128 | $(BUILD_DIR)/$(SUBDIR_LUA) \ |
||
129 | $(BUILD_DIR)/$(SUBDIR_TOLUA) \ |
||
130 | $(BUILD_DIR) |