makefile 15 KB

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