2D Run-and-gun shooter inspired by One Man's Doomsday, Counter-Strike, and Metal Slug.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

435 lines
12 KiB

  1. cmake_minimum_required(VERSION 3.21)
  2. project(izanagi C)
  3. set(CMAKE_C_STANDARD 11)
  4. #
  5. # Set platform
  6. #
  7. if (WIN32)
  8. # TODO set arch on target instead of generator
  9. set(IZ_PLATFORM WINDOWS)
  10. set(IZ_CRYPTO_LIBRARIES libcrypto libssl)
  11. set(IZ_GETOPT_DEPENDENCIES dependencies/getopt-for-windows/getopt.h
  12. dependencies/getopt-for-windows/getopt.c)
  13. add_definitions(
  14. -DIZ_WINDOWS
  15. )
  16. if (CMAKE_SIZEOF_VOID_P EQUAL 8)
  17. set(IZ_PROJECT_ARCH x64)
  18. add_definitions(
  19. -DIZ_WIN64
  20. )
  21. else ()
  22. set(IZ_PROJECT_ARCH x86)
  23. add_definitions(
  24. -DIZ_WIN32
  25. )
  26. endif ()
  27. elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
  28. set(IZ_PLATFORM MACOS)
  29. set(IZ_CRYPTO_LIBRARIES crypto ssl)
  30. add_definitions(
  31. -DIZ_MACOS
  32. )
  33. else()
  34. set(IZ_PLATFORM UNIX)
  35. set(IZ_CRYPTO_LIBRARIES crypto ssl)
  36. add_definitions(
  37. -DIZ_UNIX
  38. )
  39. endif ()
  40. #
  41. # Add configurations
  42. #
  43. add_definitions(
  44. -DIZ_APP_NAME="Izanagi"
  45. -DIZ_APP_DESCRIPTION="Run and gun game"
  46. -DIZ_APP_SERVER_DESCRIPTION="Dedicated server"
  47. -DIZ_PLAYERS=1
  48. #-DIZ_LOG_DATE_FUNCTION=IZ_TimerElapsed
  49. -DIZ_LOG_DATE_FUNCTION=IZ_TimerNow
  50. -DIZ_CONFIG_GAME_PATH="config-game.ini"
  51. -DIZ_CONFIG_SERVER_PATH="config-server.ini"
  52. )
  53. if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
  54. add_definitions(-DIZ_DEBUG)
  55. endif()
  56. #
  57. # Specify directories
  58. #
  59. include_directories(
  60. "${PROJECT_SOURCE_DIR}/dependencies/SDL2/include"
  61. "${PROJECT_SOURCE_DIR}/dependencies/SDL2_image"
  62. "${PROJECT_SOURCE_DIR}/dependencies/SDL2_image/include"
  63. "${PROJECT_SOURCE_DIR}/dependencies/SDL2_ttf/include"
  64. "${PROJECT_SOURCE_DIR}/subprojects/minIni/dev"
  65. "${PROJECT_SOURCE_DIR}/subprojects/bdd-for-c"
  66. "${PROJECT_SOURCE_DIR}/subprojects/bdd-for-c-mocks"
  67. "${PROJECT_SOURCE_DIR}/dependencies/portmidi/pm_common"
  68. "${PROJECT_SOURCE_DIR}/dependencies/spine-runtimes/spine-c/spine-c/include"
  69. "${PROJECT_SOURCE_DIR}/dependencies/getopt-for-windows"
  70. "${PROJECT_SOURCE_DIR}/dependencies/libwebsockets/build/include"
  71. "${PROJECT_SOURCE_DIR}/dependencies/openssl/${IZ_PROJECT_ARCH}/include"
  72. "${PROJECT_SOURCE_DIR}/dependencies/sqlite"
  73. )
  74. if (IZ_PLATFORM STREQUAL "WINDOWS")
  75. link_directories(
  76. "${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${IZ_PROJECT_ARCH}"
  77. "${PROJECT_SOURCE_DIR}/dependencies/SDL2_image/lib/${IZ_PROJECT_ARCH}"
  78. "${PROJECT_SOURCE_DIR}/dependencies/SDL2_ttf/lib/${IZ_PROJECT_ARCH}"
  79. "${PROJECT_SOURCE_DIR}/dependencies/portmidi/Release"
  80. "${PROJECT_SOURCE_DIR}/dependencies/libwebsockets/build/lib/Release"
  81. "${PROJECT_SOURCE_DIR}/dependencies/openssl/${IZ_PROJECT_ARCH}/lib"
  82. )
  83. if (NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug")
  84. set(IZ_EXECUTABLE_TYPE WIN32)
  85. endif()
  86. elseif(IZ_PLATFORM STREQUAL "MACOS")
  87. include_directories(
  88. /usr/local/include
  89. /usr/local/include/SDL2
  90. /usr/local/include/openssl
  91. )
  92. link_directories(
  93. /usr/local/lib
  94. )
  95. elseif(IZ_PLATFORM STREQUAL "UNIX")
  96. include_directories(
  97. /usr/local/include
  98. /usr/local/include/SDL2
  99. /usr/local/include/openssl
  100. )
  101. link_directories(
  102. /usr/local/lib
  103. )
  104. endif()
  105. #
  106. # Define executables
  107. #
  108. add_executable(
  109. game
  110. ${IZ_EXECUTABLE_TYPE}
  111. subprojects/minIni/dev/minIni.h
  112. subprojects/minIni/dev/minIni.c
  113. ${IZ_GETOPT_DEPENDENCIES}
  114. src/packages/game/output/video/IZ_video.h
  115. src/packages/game/output/video/IZ_video.c
  116. src/packages/common/IZ_common.h
  117. src/packages/game/input/IZ_action.h
  118. src/packages/game/IZ_app.h
  119. src/packages/game/IZ_app.c
  120. src/packages/game/main.c
  121. src/packages/game/input/IZ_joystick.c
  122. src/packages/game/input/IZ_joystick.h
  123. src/packages/game/input/IZ_keyboard.c
  124. src/packages/game/input/IZ_keyboard.h
  125. src/packages/config/IZ_config.c
  126. src/packages/config/IZ_config.h
  127. src/packages/game/geometry/IZ_vector2d.c
  128. src/packages/game/geometry/IZ_vector2d.h
  129. src/packages/game/geometry/IZ_rect.c
  130. src/packages/game/geometry/IZ_rect.h
  131. src/packages/game/core/IZ_object.c
  132. src/packages/game/core/IZ_object.h
  133. src/packages/game/core/IZ_creature.c
  134. src/packages/game/core/IZ_creature.h
  135. src/packages/game/core/IZ_entity.c
  136. src/packages/game/core/IZ_entity.h
  137. src/packages/game/memory/IZ_pool.c
  138. src/packages/game/memory/IZ_pool.h
  139. src/packages/game/input/IZ_input.c
  140. src/packages/game/input/IZ_input.h
  141. src/packages/game/input/IZ_midi.c
  142. src/packages/game/input/IZ_midi.h
  143. src/packages/game/data/IZ_list.c
  144. src/packages/game/data/IZ_list.h
  145. src/packages/net/svc/IZ_wsclient.c
  146. src/packages/net/svc/IZ_wsclient.h
  147. src/packages/log/IZ_intercept.c
  148. src/packages/log/IZ_intercept.h
  149. src/packages/midi/IZ_midi.c
  150. src/packages/midi/IZ_midi.h
  151. src/packages/net/core/IZ_websocket.h
  152. src/packages/net/core/IZ_websocket.c
  153. src/packages/net/IZ_net_client.c
  154. src/packages/net/IZ_net_client.h
  155. src/packages/game/IZ_app_net.c
  156. src/packages/game/IZ_app_net.h
  157. src/packages/game/IZ_app_video.c
  158. src/packages/game/IZ_app_video.h
  159. src/packages/game/IZ_subsystem.h
  160. src/packages/game/IZ_app_input.c
  161. src/packages/game/IZ_app_input.h
  162. src/packages/game/IZ_app_config.c
  163. src/packages/game/IZ_app_config.h
  164. src/packages/game/asset/IZ_asset.c
  165. src/packages/game/asset/IZ_asset.h
  166. src/packages/stdinc/IZ_string.c
  167. src/packages/stdinc/IZ_string.h
  168. src/packages/io/IZ_io.c
  169. src/packages/io/IZ_io.h
  170. src/packages/log/IZ_log.c
  171. src/packages/log/IZ_log.h
  172. src/packages/timer/IZ_timer.c
  173. src/packages/timer/IZ_timer.h
  174. src/packages/compat/IZ_compat.h
  175. src/packages/stdinc/IZ_stdlib.c
  176. src/packages/stdinc/IZ_stdlib.h
  177. )
  178. target_link_libraries(
  179. game
  180. SDL2main
  181. SDL2
  182. SDL2_image
  183. SDL2_ttf
  184. portmidi
  185. ${IZ_CRYPTO_LIBRARIES}
  186. websockets
  187. )
  188. add_executable(
  189. game-test-geometry
  190. subprojects/bdd-for-c/bdd-for-c.h
  191. subprojects/bdd-for-c-mocks/bdd-for-c-mocks.h
  192. src/packages/game/geometry/IZ_rect.h
  193. src/packages/game/geometry/IZ_rect.c
  194. src/packages/game/geometry/IZ_vector2d.h
  195. src/packages/game/geometry/IZ_vector2d.c
  196. src/packages/game/geometry/geometry.test.c
  197. )
  198. add_executable(
  199. game-test-input
  200. subprojects/bdd-for-c/bdd-for-c.h
  201. subprojects/bdd-for-c-mocks/bdd-for-c-mocks.h
  202. __mocks__/subprojects/minIni/minIni.mock.h
  203. __mocks__/dependencies/SDL2/SDL_keyboard.mock.h
  204. __mocks__/dependencies/SDL2/SDL_events.mock.h
  205. __mocks__/dependencies/SDL2/SDL_joystick.mock.h
  206. __mocks__/dependencies/SDL2/SDL_stdinc.mock.h
  207. __mocks__/dependencies/portmidi/portmidi.mock.h
  208. src/packages/config/IZ_config.h
  209. src/packages/game/input/IZ_keyboard.h
  210. src/packages/game/input/IZ_keyboard.c
  211. src/packages/game/input/IZ_joystick.h
  212. src/packages/game/input/IZ_joystick.c
  213. src/packages/game/input/IZ_midi.h
  214. src/packages/game/input/IZ_midi.c
  215. src/packages/midi/IZ_midi.c
  216. src/packages/midi/IZ_midi.h
  217. src/packages/stdinc/IZ_string.h
  218. __mocks__/src/packages/stdinc/IZ_string.mock.h
  219. src/packages/stdinc/IZ_stdlib.h
  220. __mocks__/src/packages/stdinc/IZ_stdlib.mock.h
  221. src/packages/game/input/input.test.c
  222. __mocks__/src/packages/config/IZ_config.mock.h
  223. )
  224. target_link_libraries(
  225. game-test-input
  226. SDL2main
  227. SDL2
  228. )
  229. add_executable(
  230. game-test-output
  231. subprojects/bdd-for-c/bdd-for-c.h
  232. subprojects/bdd-for-c-mocks/bdd-for-c-mocks.h
  233. __mocks__/subprojects/minIni/minIni.mock.h
  234. __mocks__/dependencies/SDL2/SDL_stdinc.mock.h
  235. __mocks__/dependencies/SDL2/SDL_render.mock.h
  236. src/packages/config/IZ_config.h
  237. src/packages/game/output/video/IZ_video.h
  238. src/packages/game/output/video/IZ_video.c
  239. src/packages/game/output/output.test.c
  240. )
  241. add_executable(
  242. game-test-memory
  243. subprojects/bdd-for-c/bdd-for-c.h
  244. subprojects/bdd-for-c-mocks/bdd-for-c-mocks.h
  245. src/packages/timer/IZ_timer.h
  246. src/packages/timer/IZ_timer.c
  247. src/packages/stdinc/IZ_stdlib.h
  248. __mocks__/src/packages/stdinc/IZ_stdlib.mock.h
  249. src/packages/stdinc/IZ_string.h
  250. __mocks__/src/packages/stdinc/IZ_string.mock.h
  251. src/packages/log/IZ_log.h
  252. __mocks__/src/packages/log/IZ_log.mock.h
  253. src/packages/game/data/IZ_list.c
  254. src/packages/game/data/IZ_list.h
  255. src/packages/game/memory/IZ_pool.h
  256. src/packages/game/memory/IZ_pool.c
  257. src/packages/game/memory/memory.test.c
  258. )
  259. target_link_libraries(
  260. game-test-memory
  261. SDL2main
  262. SDL2
  263. )
  264. add_executable(
  265. game-test-data
  266. subprojects/bdd-for-c/bdd-for-c.h
  267. subprojects/bdd-for-c-mocks/bdd-for-c-mocks.h
  268. src/packages/stdinc/IZ_stdlib.h
  269. __mocks__/src/packages/stdinc/IZ_stdlib.mock.h
  270. src/packages/game/data/IZ_list.h
  271. src/packages/game/data/IZ_list.c
  272. src/packages/game/data/data.test.c
  273. )
  274. target_link_libraries(
  275. game-test-data
  276. SDL2main
  277. SDL2
  278. )
  279. add_executable(
  280. server
  281. dependencies/sqlite/sqlite3.h
  282. dependencies/sqlite/sqlite3.c
  283. subprojects/minIni/dev/minIni.h
  284. subprojects/minIni/dev/minIni.c
  285. src/packages/log/IZ_intercept.h
  286. src/packages/log/IZ_intercept.c
  287. src/packages/server/main.c
  288. src/packages/server/IZ_app.c
  289. src/packages/server/IZ_app.h
  290. src/packages/server/IZ_app_config.h
  291. src/packages/server/IZ_app_config.c
  292. src/packages/net/svc/IZ_wsserver.c
  293. src/packages/net/svc/IZ_wsserver.h
  294. src/packages/net/core/IZ_websocket.h
  295. src/packages/net/core/IZ_websocket.c
  296. src/packages/config/IZ_config.h
  297. src/packages/config/IZ_config.c
  298. src/packages/net/IZ_net_server.c
  299. src/packages/net/IZ_net_server.h
  300. src/packages/server/db/IZ_repo.c
  301. src/packages/server/db/IZ_repo.h
  302. src/packages/server/IZ_subsystem.h
  303. src/packages/stdinc/IZ_string.c
  304. src/packages/stdinc/IZ_string.h
  305. src/packages/io/IZ_io.c
  306. src/packages/io/IZ_io.h
  307. src/packages/log/IZ_log.c
  308. src/packages/log/IZ_log.h
  309. src/packages/timer/IZ_timer.c
  310. src/packages/timer/IZ_timer.h
  311. )
  312. target_link_libraries(
  313. server
  314. SDL2main
  315. SDL2
  316. ${IZ_CRYPTO_LIBRARIES}
  317. websockets
  318. )
  319. add_executable(
  320. asset-inv
  321. subprojects/minIni/dev/minIni.h
  322. subprojects/minIni/dev/minIni.c
  323. src/packages/common/IZ_common.h
  324. src/packages/asset-inv/main.c
  325. )
  326. #
  327. # Add DLLs and required assets to the build directory
  328. #
  329. if (IZ_PLATFORM STREQUAL "WINDOWS")
  330. add_custom_command(TARGET game POST_BUILD
  331. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  332. "${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${IZ_PROJECT_ARCH}/SDL2.dll"
  333. $<TARGET_FILE_DIR:game>)
  334. add_custom_command(TARGET game POST_BUILD
  335. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  336. "${PROJECT_SOURCE_DIR}/dependencies/SDL2_image/lib/${IZ_PROJECT_ARCH}/SDL2_image.dll"
  337. $<TARGET_FILE_DIR:game>)
  338. add_custom_command(TARGET game POST_BUILD
  339. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  340. "${PROJECT_SOURCE_DIR}/dependencies/SDL2_ttf/lib/${IZ_PROJECT_ARCH}/SDL2_ttf.dll"
  341. $<TARGET_FILE_DIR:game>)
  342. add_custom_command(TARGET game POST_BUILD
  343. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  344. "${PROJECT_SOURCE_DIR}/dependencies/portmidi/Release/portmidi.dll"
  345. $<TARGET_FILE_DIR:game>)
  346. add_custom_command(TARGET game POST_BUILD
  347. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  348. "${PROJECT_SOURCE_DIR}/dependencies/libwebsockets/build/bin/Release/websockets.dll"
  349. $<TARGET_FILE_DIR:game>)
  350. add_custom_command(TARGET game POST_BUILD
  351. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  352. "${PROJECT_SOURCE_DIR}/dependencies/openssl/${IZ_PROJECT_ARCH}/bin/libssl-1_1-x64.dll"
  353. $<TARGET_FILE_DIR:game>)
  354. add_custom_command(TARGET game POST_BUILD
  355. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  356. "${PROJECT_SOURCE_DIR}/dependencies/openssl/${IZ_PROJECT_ARCH}/bin/libcrypto-1_1-x64.dll"
  357. $<TARGET_FILE_DIR:game>)
  358. add_custom_command(TARGET server POST_BUILD
  359. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  360. "${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${IZ_PROJECT_ARCH}/SDL2.dll"
  361. $<TARGET_FILE_DIR:server>)
  362. add_custom_command(TARGET server POST_BUILD
  363. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  364. "${PROJECT_SOURCE_DIR}/dependencies/libwebsockets/build/bin/Release/websockets.dll"
  365. $<TARGET_FILE_DIR:server>)
  366. add_custom_command(TARGET server POST_BUILD
  367. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  368. "${PROJECT_SOURCE_DIR}/dependencies/openssl/${IZ_PROJECT_ARCH}/bin/libssl-1_1-x64.dll"
  369. $<TARGET_FILE_DIR:server>)
  370. add_custom_command(TARGET server POST_BUILD
  371. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  372. "${PROJECT_SOURCE_DIR}/dependencies/openssl/${IZ_PROJECT_ARCH}/bin/libcrypto-1_1-x64.dll"
  373. $<TARGET_FILE_DIR:server>)
  374. endif ()
  375. add_custom_command(TARGET game POST_BUILD
  376. COMMAND ${CMAKE_COMMAND} -E copy_directory
  377. "${PROJECT_SOURCE_DIR}/assets"
  378. $<TARGET_FILE_DIR:game>/assets)
  379. add_custom_command(TARGET asset-inv POST_BUILD
  380. COMMAND ${CMAKE_COMMAND} -E copy_directory
  381. "${PROJECT_SOURCE_DIR}/assets"
  382. $<TARGET_FILE_DIR:game>/assets)