makefile 15 KB

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