1#
2# Copyright 2011-2019 Branimir Karadzic. All rights reserved.
3# License: https://github.com/bkaradzic/bx#license-bsd-2-clause
4#
5
6GENIE=../bx/tools/bin/$(OS)/genie
7
8all:
9	$(GENIE) vs2017
10	$(GENIE) --gcc=android-arm gmake
11	$(GENIE) --gcc=android-arm64 gmake
12	$(GENIE) --gcc=android-mips gmake
13	$(GENIE) --gcc=android-x86 gmake
14	$(GENIE) --gcc=mingw-gcc gmake
15	$(GENIE) --gcc=linux-gcc gmake
16	$(GENIE) --gcc=haiku gmake
17	$(GENIE) --gcc=osx gmake
18	$(GENIE) --gcc=ios-arm gmake
19	$(GENIE) --gcc=ios-simulator gmake
20	$(GENIE) --gcc=ios-simulator64 gmake
21	$(GENIE) xcode8
22
23.build/projects/gmake-android-arm:
24	$(GENIE) --gcc=android-arm gmake
25android-arm-debug: .build/projects/gmake-android-arm
26	make -R -C .build/projects/gmake-android-arm config=debug
27android-arm-release: .build/projects/gmake-android-arm
28	make -R -C .build/projects/gmake-android-arm config=release
29android-arm: android-arm-debug android-arm-release
30
31.build/projects/gmake-android-arm64:
32	$(GENIE) --gcc=android-arm64 gmake
33android-arm64-debug: .build/projects/gmake-android-arm64
34	make -R -C .build/projects/gmake-android-arm64 config=debug
35android-arm64-release: .build/projects/gmake-android-arm64
36	make -R -C .build/projects/gmake-android-arm64 config=release
37android-arm64: android-arm64-debug android-arm64-release
38
39.build/projects/gmake-android-mips:
40	$(GENIE) --gcc=android-mips gmake
41android-mips-debug: .build/projects/gmake-android-mips
42	make -R -C .build/projects/gmake-android-mips config=debug
43android-mips-release: .build/projects/gmake-android-mips
44	make -R -C .build/projects/gmake-android-mips config=release
45android-mips: android-mips-debug android-mips-release
46
47.build/projects/gmake-android-x86:
48	$(GENIE) --gcc=android-x86 gmake
49android-x86-debug: .build/projects/gmake-android-x86
50	make -R -C .build/projects/gmake-android-x86 config=debug
51android-x86-release: .build/projects/gmake-android-x86
52	make -R -C .build/projects/gmake-android-x86 config=release
53android-x86: android-x86-debug android-x86-release
54
55.build/projects/gmake-linux:
56	$(GENIE) --gcc=linux-gcc gmake
57linux-debug64: .build/projects/gmake-linux
58	make -R -C .build/projects/gmake-linux config=debug64
59linux-release64: .build/projects/gmake-linux
60	make -R -C .build/projects/gmake-linux config=release64
61linux: linux-debug64 linux-release64
62
63.build/projects/gmake-haiku:
64	$(GENIE) --gcc=haiku gmake
65haiku-debug64: .build/projects/gmake-haiku
66	make -R -C .build/projects/gmake-haiku config=debug64
67haiku-release64: .build/projects/gmake-haiku
68	make -R -C .build/projects/gmake-haiku config=release64
69haiku: haiku-debug64 haiku-release64
70
71.build/projects/gmake-mingw-gcc:
72	$(GENIE) --gcc=mingw-gcc gmake
73mingw-gcc-debug32: .build/projects/gmake-mingw-gcc
74	make -R -C .build/projects/gmake-mingw-gcc config=debug32
75mingw-gcc-release32: .build/projects/gmake-mingw-gcc
76	make -R -C .build/projects/gmake-mingw-gcc config=release32
77mingw-gcc-debug64: .build/projects/gmake-mingw-gcc
78	make -R -C .build/projects/gmake-mingw-gcc config=debug64
79mingw-gcc-release64: .build/projects/gmake-mingw-gcc
80	make -R -C .build/projects/gmake-mingw-gcc config=release64
81mingw-gcc: mingw-gcc-debug32 mingw-gcc-release32 mingw-gcc-debug64 mingw-gcc-release64
82
83.build/projects/gmake-mingw-clang:
84	$(GENIE) --clang=mingw-clang gmake
85mingw-clang-debug32: .build/projects/gmake-mingw-clang
86	make -R -C .build/projects/gmake-mingw-clang config=debug32
87mingw-clang-release32: .build/projects/gmake-mingw-clang
88	make -R -C .build/projects/gmake-mingw-clang config=release32
89mingw-clang-debug64: .build/projects/gmake-mingw-clang
90	make -R -C .build/projects/gmake-mingw-clang config=debug64
91mingw-clang-release64: .build/projects/gmake-mingw-clang
92	make -R -C .build/projects/gmake-mingw-clang config=release64
93mingw-clang: mingw-clang-debug32 mingw-clang-release32 mingw-clang-debug64 mingw-clang-release64
94
95.build/projects/vs2017:
96	$(GENIE) vs2017
97
98.build/projects/gmake-osx:
99	$(GENIE) --gcc=osx gmake
100osx-debug64: .build/projects/gmake-osx
101	make -C .build/projects/gmake-osx config=debug64
102osx-release64: .build/projects/gmake-osx
103	make -C .build/projects/gmake-osx config=release64
104osx: osx-debug64 osx-release64
105
106.build/projects/gmake-ios-arm:
107	$(GENIE) --gcc=ios-arm gmake
108ios-arm-debug: .build/projects/gmake-ios-arm
109	make -R -C .build/projects/gmake-ios-arm config=debug
110ios-arm-release: .build/projects/gmake-ios-arm
111	make -R -C .build/projects/gmake-ios-arm config=release
112ios-arm: ios-arm-debug ios-arm-release
113
114.build/projects/gmake-ios-simulator:
115	$(GENIE) --gcc=ios-simulator gmake
116ios-simulator-debug: .build/projects/gmake-ios-simulator
117	make -R -C .build/projects/gmake-ios-simulator config=debug
118ios-simulator-release: .build/projects/gmake-ios-simulator
119	make -R -C .build/projects/gmake-ios-simulator config=release
120ios-simulator: ios-simulator-debug ios-simulator-release
121
122.build/projects/gmake-ios-simulator64:
123	$(GENIE) --gcc=ios-simulator64 gmake
124ios-simulator64-debug: .build/projects/gmake-ios-simulator64
125	make -R -C .build/projects/gmake-ios-simulator64 config=debug
126ios-simulator64-release: .build/projects/gmake-ios-simulator64
127	make -R -C .build/projects/gmake-ios-simulator64 config=release
128ios-simulator64: ios-simulator64-debug ios-simulator64-release
129
130rebuild-shaders:
131	make -R -C examples rebuild
132
133analyze:
134	cppcheck src/
135	cppcheck examples/
136
137docs:
138	doxygen scripts/bgfx.doxygen
139	markdown README.md > .build/docs/readme.html
140
141clean:
142	@echo Cleaning...
143	-@rm -rf .build
144	@mkdir .build
145
146###
147
148SILENT ?= @
149
150UNAME := $(shell uname)
151ifeq ($(UNAME),$(filter $(UNAME),Linux GNU Darwin Haiku))
152ifeq ($(UNAME),$(filter $(UNAME),Darwin Haiku))
153ifeq ($(UNAME),$(filter $(UNAME),Darwin))
154OS=darwin
155BUILD_PROJECT_DIR=gmake-osx
156BUILD_OUTPUT_DIR=osx64_clang
157BUILD_TOOLS_CONFIG=release64
158EXE=
159else
160OS=haiku
161BUILD_PROJECT_DIR=gmake-haiku
162BUILD_OUTPUT_DIR=haiku64_gcc
163BUILD_TOOLS_CONFIG=release64
164EXE=
165endif
166else
167OS=linux
168BUILD_PROJECT_DIR=gmake-linux
169BUILD_OUTPUT_DIR=linux64_gcc
170BUILD_TOOLS_CONFIG=release64
171EXE=
172endif
173else
174OS=windows
175BUILD_PROJECT_DIR=gmake-mingw-gcc
176BUILD_OUTPUT_DIR=win32_mingw-gcc
177BUILD_TOOLS_CONFIG=release64
178EXE=.exe
179endif
180
181# bin2c
182.build/osx64_clang/bin/bin2cRelease: .build/projects/gmake-osx
183	$(SILENT) make -C .build/projects/gmake-osx bin2c config=$(BUILD_TOOLS_CONFIG)
184
185tools/bin/darwin/bin2c: .build/osx64_clang/bin/bin2cRelease
186	$(SILENT) cp $(<) $(@)
187
188.build/linux64_gcc/bin/bin2cRelease: .build/projects/gmake-linux
189	$(SILENT) make -C .build/projects/gmake-linux bin2c config=$(BUILD_TOOLS_CONFIG)
190
191tools/bin/linux/bin2c: .build/linux64_gcc/bin/bin2cRelease
192	$(SILENT) cp $(<) $(@)
193
194.build/haiku64_gcc/bin/bin2cRelease: .build/projects/gmake-haiku
195	$(SILENT) make -C .build/projects/gmake-haiku bin2c config=$(BUILD_TOOLS_CONFIG)
196
197tools/bin/haiku/bin2c: .build/haiku64_gcc/bin/bin2cRelease
198	$(SILENT) cp $(<) $(@)
199
200.build/win64_mingw-gcc/bin/bin2cRelease.exe: .build/projects/gmake-mingw-gcc
201	$(SILENT) make -C .build/projects/gmake-mingw-gcc bin2c config=$(BUILD_TOOLS_CONFIG)
202
203tools/bin/windows/bin2c.exe: .build/win64_mingw-gcc/bin/bin2cRelease.exe
204	$(SILENT) cp $(<) $(@)
205
206bin2c: tools/bin/$(OS)/bin2c$(EXE)
207
208# lemon
209.build/osx64_clang/bin/lemonRelease: .build/projects/gmake-osx
210	$(SILENT) make -C .build/projects/gmake-osx lemon config=$(BUILD_TOOLS_CONFIG)
211
212tools/bin/darwin/lemon: .build/osx64_clang/bin/lemonRelease
213	$(SILENT) cp $(<) $(@)
214
215.build/linux64_gcc/bin/lemonRelease: .build/projects/gmake-linux
216	$(SILENT) make -C .build/projects/gmake-linux lemon config=$(BUILD_TOOLS_CONFIG)
217
218tools/bin/linux/lemon: .build/linux64_gcc/bin/lemonRelease
219	$(SILENT) cp $(<) $(@)
220
221.build/haiku64_gcc/bin/lemonRelease: .build/projects/gmake-haiku
222	$(SILENT) make -C .build/projects/gmake-haiku lemon config=$(BUILD_TOOLS_CONFIG)
223
224tools/bin/haiku/lemon: .build/haiku64_gcc/bin/lemonRelease
225	$(SILENT) cp $(<) $(@)
226
227.build/win64_mingw-gcc/bin/lemonRelease.exe: .build/projects/gmake-mingw-gcc
228	$(SILENT) make -C .build/projects/gmake-mingw-gcc lemon config=$(BUILD_TOOLS_CONFIG)
229
230tools/bin/windows/lemon.exe: .build/win64_mingw-gcc/bin/lemonRelease.exe
231	$(SILENT) cp $(<) $(@)
232
233tools/bin/$(OS)/lempar.c: tools/lemon/lempar.c
234	$(SILENT) cp $(<) $(@)
235
236lemon: tools/bin/$(OS)/lemon$(EXE) tools/bin/$(OS)/lempar.c
237
238tools: bin2c lemon
239
240dist: tools/bin/darwin/bin2c tools/bin/linux/bin2c tools/bin/windows/bin2c.exe tools/bin/haiku/bin2c
241
242.build/$(BUILD_OUTPUT_DIR)/bin/bx.testRelease$(EXE): .build/projects/$(BUILD_PROJECT_DIR)
243	$(SILENT) make -C .build/projects/$(BUILD_PROJECT_DIR) bx.test config=$(BUILD_TOOLS_CONFIG)
244
245test: .build/$(BUILD_OUTPUT_DIR)/bin/bx.testRelease$(EXE)
246