makefile 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. #
  2. # Copyright (c) 2012-2024 Daniele Bartolini et al.
  3. # SPDX-License-Identifier: MIT
  4. #
  5. UNAME := $(shell uname)
  6. ifeq ($(UNAME), $(filter $(UNAME), Linux))
  7. OS=linux
  8. EXE_PREFIX=./
  9. EXE_SUFFIX=
  10. else
  11. ifeq ($(UNAME), $(filter $(UNAME), windows32))
  12. OS=windows
  13. EXE_PREFIX=
  14. EXE_SUFFIX=.exe
  15. ARG_PREFIX=/
  16. MKDIR=mkdir
  17. else
  18. OS=windows
  19. EXE_PREFIX=
  20. EXE_SUFFIX=.exe
  21. ARG_PREFIX=//
  22. MKDIR=mkdir -p
  23. endif
  24. endif
  25. GENIE=scripts/genie/bin/$(OS)/genie
  26. MAKE_JOBS=1
  27. # LuaJIT
  28. NDKABI=$(ANDROID_NDK_ABI)
  29. NDKDIR=$(ANDROID_NDK_ROOT)
  30. NDKBIN=$(NDKDIR)/toolchains/llvm/prebuilt/linux-x86_64/bin
  31. NDKCROSS=$(NDKBIN)/arm-linux-androideabi-
  32. NDKCC=$(NDKBIN)/armv7a-linux-androideabi$(NDKABI)-clang
  33. NDKCROSS64=$(NDKBIN)/aarch64-linux-android-
  34. NDKCC64=$(NDKBIN)/aarch64-linux-android$(NDKABI)-clang
  35. build/android-arm/bin/libluajit.a:
  36. "$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/luajit/src HOST_CC="gcc -m32" CROSS=$(NDKCROSS) STATIC_CC=$(NDKCC) DYNAMIC_CC="$(NDKCC) -fPIC" TARGET_LD=$(NDKCC)
  37. -@install -m775 -D 3rdparty/luajit/src/libluajit.a $@
  38. -@"$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/luajit/src clean
  39. build/android-arm64/bin/libluajit.a:
  40. "$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/luajit/src CROSS=$(NDKCROSS64) STATIC_CC=$(NDKCC64) DYNAMIC_CC="$(NDKCC64) -fPIC" TARGET_LD=$(NDKCC64)
  41. -@install -m775 -D 3rdparty/luajit/src/libluajit.a $@
  42. -@"$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/luajit/src clean
  43. build/linux32/bin/luajit:
  44. $(MAKE) -j$(MAKE_JOBS) -R -C 3rdparty/luajit/src CC="gcc -m32" CCOPT="-O2 -fomit-frame-pointer -msse2" TARGET_SYS=Linux BUILDMODE=static
  45. -@install -m775 -D 3rdparty/luajit/src/luajit $@
  46. -@cp -r 3rdparty/luajit/src/jit build/linux32/bin
  47. -@$(MAKE) -j$(MAKE_JOBS) -R -C 3rdparty/luajit/src clean
  48. build/linux64/bin/luajit:
  49. "$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/luajit/src CC="gcc -m64" CCOPT="-O2 -fomit-frame-pointer -msse2" TARGET_SYS=Linux BUILDMODE=static
  50. -@install -m775 -D 3rdparty/luajit/src/luajit $@
  51. -@install -m664 -D 3rdparty/luajit/src/libluajit.a build/linux64/bin/libluajit.a
  52. -@cp -r 3rdparty/luajit/src/jit build/linux64/bin
  53. -@"$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/luajit/src clean
  54. build/mingw64/bin/luajit.exe:
  55. "$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/luajit/src CC="$(MINGW)/bin/x86_64-w64-mingw32-gcc -m64" CCOPT="-O2 -fomit-frame-pointer -msse2" TARGET_SYS=Windows BUILDMODE=static
  56. -@install -m775 -D 3rdparty/luajit/src/luajit.exe $@
  57. -@install -m664 -D 3rdparty/luajit/src/libluajit.a build/mingw64/bin/libluajit.a
  58. -@cp -r 3rdparty/luajit/src/jit build/mingw64/bin
  59. -@"$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/luajit/src clean
  60. -@rm 3rdparty/luajit/src/host/buildvm.exe
  61. -@rm 3rdparty/luajit/src/host/minilua.exe
  62. build/windows64/bin/luajit.exe:
  63. cd "3rdparty/luajit/src" && .\\msvcbuild.bat
  64. -@install -m775 -D 3rdparty/luajit/src/luajit.exe $@
  65. -@install -m664 -D 3rdparty/luajit/src/lua51.dll build/windows64/bin/lua51.dll
  66. -@install -m664 -D 3rdparty/luajit/src/lua51.lib build/windows64/bin/lua51.lib
  67. -@cp -r 3rdparty/luajit/src/jit build/windows64/bin
  68. -@rm -f 3rdparty/luajit/src/buildvm.*
  69. -@rm -f 3rdparty/luajit/src/jit/vmdef.lua
  70. -@rm -f 3rdparty/luajit/src/lua51.*
  71. -@rm -f 3rdparty/luajit/src/luajit.exe
  72. -@rm -f 3rdparty/luajit/src/luajit.exp
  73. -@rm -f 3rdparty/luajit/src/luajit.lib
  74. -@rm -f 3rdparty/luajit/src/minilua.*
  75. build/linux32/bin/luac: \
  76. build/projects/linux
  77. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/linux luac config=release32
  78. -@install -m775 -D $@-release $@
  79. build/mingw32/bin/luac: \
  80. build/projects/mingw32
  81. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/mingw luac config=release32
  82. -@install -m775 -D $@-release $@
  83. build/linux64/bin/texturec: \
  84. build/projects/linux
  85. "$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/bimg/.build/projects/gmake-linux config=release64 texturec
  86. -@install -m775 -D 3rdparty/bimg/.build/linux64_gcc/bin/texturecRelease $@
  87. build/linux64/bin/shaderc: \
  88. build/projects/linux
  89. "$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/bgfx/.build/projects/gmake-linux config=release64 shaderc
  90. -@install -m775 -D 3rdparty/bgfx/.build/linux64_gcc/bin/shadercRelease $@
  91. build/mingw64/bin/texturec.exe: \
  92. build/projects/mingw
  93. "$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/bimg/.build/projects/gmake-mingw-gcc config=release64 texturec
  94. -@install -m775 -D 3rdparty/bimg/.build/win64_mingw-gcc/bin/texturecRelease.exe $@
  95. build/mingw64/bin/shaderc.exe: \
  96. build/projects/mingw
  97. "$(MAKE)" -j$(MAKE_JOBS) -R -C 3rdparty/bgfx/.build/projects/gmake-mingw-gcc config=release64 shaderc
  98. -@install -m775 -D 3rdparty/bgfx/.build/win64_mingw-gcc/bin/shadercRelease.exe $@
  99. build/windows64/bin/texturec.exe: \
  100. build/projects/vs2019
  101. devenv.com 3rdparty/bimg/.build/projects/vs2019/bimg.sln $(ARG_PREFIX)Build "Release|x64" $(ARG_PREFIX)Project texturec.vcxproj
  102. -@install -m775 -D 3rdparty/bimg/.build/win64_vs2019/bin/texturecRelease.exe $@
  103. build/windows64/bin/shaderc.exe: \
  104. build/projects/vs2019
  105. devenv.com 3rdparty/bgfx/.build/projects/vs2019/bgfx.sln $(ARG_PREFIX)Build "Release|x64" $(ARG_PREFIX)Project shaderc.vcxproj
  106. -@install -m775 -D 3rdparty/bgfx/.build/win64_vs2019/bin/shadercRelease.exe $@
  107. build/projects/android-arm:
  108. $(GENIE) --gfxapi=gles3 --compiler=android-arm gmake
  109. android-arm-debug: \
  110. build/projects/android-arm \
  111. build/android-arm/bin/libluajit.a
  112. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/android-arm crown config=debug
  113. android-arm-development: \
  114. build/projects/android-arm \
  115. build/android-arm/bin/libluajit.a
  116. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/android-arm crown config=development
  117. android-arm-release: \
  118. build/projects/android-arm \
  119. build/android-arm/bin/libluajit.a
  120. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/android-arm crown config=release
  121. android-arm: \
  122. android-arm-debug \
  123. android-arm-development \
  124. android-arm-release
  125. build/projects/android-arm64:
  126. $(GENIE) --gfxapi=gles3 --file=scripts/genie.lua --compiler=android-arm64 gmake
  127. android-arm64-debug: \
  128. build/projects/android-arm64 \
  129. build/android-arm64/bin/libluajit.a
  130. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/android-arm64 crown config=debug
  131. android-arm64-development: \
  132. build/projects/android-arm64 \
  133. build/android-arm64/bin/libluajit.a
  134. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/android-arm64 crown config=development
  135. android-arm64-release: \
  136. build/projects/android-arm64 \
  137. build/android-arm64/bin/libluajit.a
  138. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/android-arm64 crown config=release
  139. android-arm64: \
  140. android-arm64-debug \
  141. android-arm64-development \
  142. android-arm64-release
  143. build/projects/linux:
  144. $(GENIE) --file=3rdparty/bgfx/scripts/genie.lua --with-tools --gcc=linux-gcc gmake
  145. $(GENIE) --file=3rdparty/bimg/scripts/genie.lua --with-tools --gcc=linux-gcc gmake
  146. $(GENIE) --gfxapi=gl32 --with-tools --compiler=linux-gcc gmake
  147. linux-debug64: \
  148. build/projects/linux \
  149. build/linux64/bin/luajit
  150. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/linux crown config=debug64
  151. linux-development64: \
  152. build/projects/linux \
  153. build/linux64/bin/luajit
  154. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/linux crown config=development64
  155. linux-release64: \
  156. build/projects/linux \
  157. build/linux64/bin/luajit
  158. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/linux crown config=release64
  159. linux: \
  160. linux-debug64 \
  161. linux-development64 \
  162. linux-release64
  163. build/projects/wasm:
  164. $(GENIE) --no-luajit --gfxapi=gles3 --compiler=wasm gmake
  165. wasm-debug: \
  166. build/projects/wasm
  167. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/wasm crown config=debug
  168. wasm-development: \
  169. build/projects/wasm
  170. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/wasm crown config=development
  171. wasm-release: \
  172. build/projects/wasm
  173. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/wasm crown config=release
  174. wasm: \
  175. wasm-debug \
  176. wasm-development \
  177. wasm-release
  178. build/projects/mingw32:
  179. $(GENIE) --gfxapi=d3d11 --with-tools --compiler=mingw-gcc --with-32bit-compiler gmake
  180. build/projects/mingw:
  181. $(GENIE) --file=3rdparty/bgfx/scripts/genie.lua --with-tools --gcc=mingw-gcc gmake
  182. $(GENIE) --file=3rdparty/bimg/scripts/genie.lua --with-tools --gcc=mingw-gcc gmake
  183. $(GENIE) --gfxapi=d3d11 --with-tools --compiler=mingw-gcc gmake
  184. mingw-debug64: \
  185. build/projects/mingw \
  186. build/mingw64/bin/luajit.exe
  187. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/mingw crown config=debug64
  188. mingw-development64: \
  189. build/projects/mingw \
  190. build/mingw64/bin/luajit.exe
  191. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/mingw crown config=development64
  192. mingw-release64: \
  193. build/projects/mingw \
  194. build/mingw64/bin/luajit.exe
  195. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/mingw crown config=release64
  196. mingw: \
  197. mingw-debug64 \
  198. mingw-development64 \
  199. mingw-release64
  200. build/projects/vs2019:
  201. $(GENIE) --file=3rdparty/bgfx/scripts/genie.lua --with-tools vs2019
  202. $(GENIE) --file=3rdparty/bimg/scripts/genie.lua --with-tools vs2019
  203. $(GENIE) --gfxapi=d3d11 --with-tools --no-level-editor vs2019
  204. windows-debug64: \
  205. build/projects/vs2019 \
  206. build/windows64/bin/luajit.exe
  207. devenv.com build/projects/vs2019/crown.sln $(ARG_PREFIX)Build "debug|x64" $(ARG_PREFIX)Project crown
  208. windows-development64: \
  209. build/projects/vs2019 \
  210. build/windows64/bin/luajit.exe
  211. devenv.com build/projects/vs2019/crown.sln $(ARG_PREFIX)Build "development|x64" $(ARG_PREFIX)Project crown
  212. windows-release64: \
  213. build/projects/vs2019 \
  214. build/windows64/bin/luajit.exe
  215. devenv.com build/projects/vs2019/crown.sln $(ARG_PREFIX)Build "release|x64" $(ARG_PREFIX)Project crown
  216. level-editor-theme:
  217. cd tools/level_editor/resources/theme/Adwaita && ./parse-sass.sh
  218. cd tools/level_editor/resources && ./generate-resources.sh > resources.gresource.xml
  219. level-editor-linux-debug64: \
  220. build/projects/linux
  221. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/linux level-editor config=debug64
  222. level-editor-linux-release64: \
  223. build/projects/linux
  224. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/linux level-editor config=release64
  225. level-editor-mingw-debug64: \
  226. build/projects/mingw
  227. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/mingw level-editor config=debug64
  228. level-editor-mingw-release64: \
  229. build/projects/mingw
  230. "$(MAKE)" -j$(MAKE_JOBS) -R -C build/projects/mingw level-editor config=release64
  231. tools-linux-release32: \
  232. build/linux32/bin/luajit \
  233. build/linux32/bin/luac
  234. tools-linux-debug64: \
  235. build/linux64/bin/texturec \
  236. build/linux64/bin/shaderc \
  237. linux-debug64 \
  238. level-editor-linux-debug64
  239. tools-linux-release64: \
  240. build/linux64/bin/texturec \
  241. build/linux64/bin/shaderc \
  242. linux-development64 \
  243. level-editor-linux-release64
  244. tools-windows-debug64: \
  245. build/windows64/bin/texturec.exe \
  246. build/windows64/bin/shaderc.exe \
  247. windows-debug64
  248. tools-windows-release64: \
  249. build/windows64/bin/texturec.exe \
  250. build/windows64/bin/shaderc.exe \
  251. windows-development64
  252. tools-mingw-release32: \
  253. build/mingw32/bin/luac
  254. tools-mingw-debug64: \
  255. build/mingw64/bin/texturec.exe \
  256. build/mingw64/bin/shaderc.exe \
  257. mingw-debug64 \
  258. level-editor-mingw-debug64
  259. tools-mingw-release64: \
  260. build/mingw64/bin/texturec.exe \
  261. build/mingw64/bin/shaderc.exe \
  262. mingw-development64 \
  263. level-editor-mingw-release64
  264. .PHONY: docs
  265. docs:
  266. "$(MAKE)" -C docs/ html
  267. SAMPLES_PLATFORM=$(OS)
  268. .PHONY: 00-empty
  269. 00-empty: $(OS)-development64 tools-$(OS)-release64
  270. cd build/$(OS)64/bin && $(EXE_PREFIX)crown-development$(EXE_SUFFIX) --source-dir $(realpath samples/$@) --map-source-dir core $(realpath samples) --compile --platform $(SAMPLES_PLATFORM)
  271. .PHONY: 01-physics
  272. 01-physics: $(OS)-development64 tools-$(OS)-release64
  273. cd build/$(OS)64/bin && $(EXE_PREFIX)crown-development$(EXE_SUFFIX) --source-dir $(realpath samples/$@) --map-source-dir core $(realpath samples) --compile --platform $(SAMPLES_PLATFORM)
  274. .PHONY: 02-animation
  275. 02-animation: $(OS)-development64 tools-$(OS)-release64
  276. cd build/$(OS)64/bin && $(EXE_PREFIX)crown-development$(EXE_SUFFIX) --source-dir $(realpath samples/$@) --map-source-dir core $(realpath samples) --compile --platform $(SAMPLES_PLATFORM)
  277. .PHONY: 03-joypad
  278. 03-joypad: $(OS)-development64 tools-$(OS)-release64
  279. cd build/$(OS)64/bin && $(EXE_PREFIX)crown-development$(EXE_SUFFIX) --source-dir $(realpath samples/$@) --map-source-dir core $(realpath samples) --compile --platform $(SAMPLES_PLATFORM)
  280. .PHONY: samples
  281. samples: 00-empty 01-physics 02-animation 03-joypad
  282. .PHONY: run-00-empty
  283. run-00-empty: 00-empty
  284. cd build/$(OS)64/bin && $(EXE_PREFIX)crown-development$(EXE_SUFFIX) --data-dir $(realpath samples/$<_$(OS))
  285. .PHONY: run-01-physics
  286. run-01-physics: 01-physics
  287. cd build/$(OS)64/bin && $(EXE_PREFIX)crown-development$(EXE_SUFFIX) --data-dir $(realpath samples/$<_$(OS))
  288. .PHONY: run-02-animation
  289. run-02-animation: 02-animation
  290. cd build/$(OS)64/bin && $(EXE_PREFIX)crown-development$(EXE_SUFFIX) --data-dir $(realpath samples/$<_$(OS))
  291. .PHONY: run-03-joypad
  292. run-03-joypad: 03-joypad
  293. cd build/$(OS)64/bin && $(EXE_PREFIX)crown-development$(EXE_SUFFIX) --data-dir $(realpath samples/$<_$(OS))
  294. .PHONY: clean-samples
  295. clean-samples:
  296. -@rm -rf samples/00-empty_*
  297. -@rm -rf samples/01-physics_*
  298. -@rm -rf samples/02-animation_*
  299. -@rm -rf samples/03-joypad_*
  300. .PHONY: codespell
  301. codespell:
  302. @codespell docs src tools \
  303. --ignore-words=scripts/codespell-dictionary.txt \
  304. --skip "*.ttf.h,*.png,docs/_themes,tools/level_editor/resources/theme/Adwaita" \
  305. -q4 # 4: omit warnings about automatic fixes that were disabled in the dictionary.
  306. .PHONY: cppcheck
  307. cppcheck:
  308. @cppcheck src \
  309. --includes-file=scripts/cppcheck/includes.txt \
  310. --suppressions-list=scripts/cppcheck/suppressions.txt \
  311. --enable=all \
  312. --quiet \
  313. --force # Check all configurations.
  314. .PHONY: format-sources
  315. format-sources:
  316. @scripts/uncrustify/format-all.sh -j $(MAKE_JOBS) --enable-tools
  317. .PHONY: create-meson-build
  318. create-meson-build:
  319. $(GENIE) create-meson-build
  320. .PHONY: clean
  321. clean: clean-samples
  322. @echo Cleaning...
  323. ifeq ($(OS), linux)
  324. -@"$(MAKE)" -R -C 3rdparty/luajit/src clean -s
  325. endif
  326. -@rm -rf 3rdparty/bgfx/.build
  327. -@rm -rf 3rdparty/bimg/.build
  328. -@rm -rf build