CMakeLists.txt 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #https://github.com/meemknight/PikaEngine
  2. cmake_minimum_required(VERSION 3.16)
  3. #I want to link statically to the runtime library. This will help in sharing the game with others
  4. set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebug$<$<CONFIG:Debug>:Debug>")
  5. set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Release>:Release>")
  6. #declare projects
  7. project(pikaCore)
  8. project(pikaGameplay)
  9. project(pikaProduction)
  10. #set glfw to NOT use dynamic runtime and not build unnecessary stuff
  11. set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
  12. set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
  13. set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
  14. set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
  15. set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
  16. #add third party libraries
  17. add_subdirectory(thirdparty/glfw-3.3.2)
  18. add_subdirectory(thirdparty/glad)
  19. add_subdirectory(thirdparty/gl2d)
  20. add_subdirectory(thirdparty/glm)
  21. add_subdirectory(thirdparty/stb_image)
  22. add_subdirectory(thirdparty/stb_truetype)
  23. add_subdirectory(thirdparty/imgui-docking)
  24. add_subdirectory(thirdparty/safeSafe)
  25. #Define some macros for the project sources
  26. file(GLOB_RECURSE PIKA_SOURCES_CORE_CONFIG CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/core/coreConfig/*.cpp")
  27. file(GLOB_RECURSE PIKA_SOURCES_CORE_EDITOR CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaEditor/*.cpp")
  28. file(GLOB_RECURSE PIKA_SOURCES_CORE_RUNTIME CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaRuntime/*.cpp")
  29. file(GLOB_RECURSE PIKA_SOURCES_CORE_STD CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaSTD/*.cpp")
  30. file(GLOB_RECURSE PIKA_SOURCES_GAMEPLAY CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/gameplay/*.cpp")
  31. file(GLOB_RECURSE PIKA_SOURCES_CORE_SHARED_RUNTIME CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/core/sharedRuntime/*.cpp")
  32. file(GLOB_RECURSE PIKA_SOURCES_PLUGGINS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/pluggins/*.cpp")
  33. add_compile_definitions(PIKA_RESOURCES_PATH="${CMAKE_CURRENT_SOURCE_DIR}/resources/")
  34. add_compile_definitions(PIKA_ENGINE_RESOURCES_PATH="${CMAKE_CURRENT_SOURCE_DIR}/engineResources/")
  35. #add_compile_definitions(PIKA_RESOURCES_PATH="./resources/")
  36. if(MSVC)
  37. add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
  38. #https://stackoverflow.com/questions/5559357/debugheapdelete-access-violation-at-termination
  39. #add_compile_definitions(_STATIC_CPPLIB)
  40. #add_compile_definitions(_DISABLE_DEPRECATE_STATIC_CPPLIB)
  41. endif()
  42. #pikaCore ############################################
  43. add_executable(pikaCore)
  44. target_compile_definitions(pikaCore PUBLIC PIKA_DEVELOPMENT)
  45. set_property(TARGET pikaCore PROPERTY CXX_STANDARD 17)
  46. target_sources(pikaCore PRIVATE
  47. "${PIKA_SOURCES_CORE_CONFIG}" "${PIKA_SOURCES_CORE_EDITOR}" "${PIKA_SOURCES_CORE_RUNTIME}"
  48. "${PIKA_SOURCES_CORE_STD}" "${PIKA_SOURCES_CORE_SHARED_RUNTIME}")
  49. target_include_directories(pikaCore PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/coreConfig/")
  50. target_include_directories(pikaCore PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaEditor/")
  51. target_include_directories(pikaCore PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaRuntime/")
  52. target_include_directories(pikaCore PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaSTD/")
  53. target_include_directories(pikaCore PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/sharedRuntime/")
  54. target_link_libraries(pikaCore PRIVATE glad glfw gl2d glm stb_image stb_truetype imgui safeSave)
  55. #################^^^^^^^^#############################
  56. #pikaGameplay ###########################################
  57. add_library(pikaGameplay SHARED)
  58. target_compile_definitions(pikaGameplay PUBLIC PIKA_DEVELOPMENT)
  59. set_property(TARGET pikaGameplay PROPERTY CXX_STANDARD 17)
  60. target_sources(pikaGameplay PRIVATE "${PIKA_SOURCES_CORE_CONFIG}" "${PIKA_SOURCES_PLUGGINS}"
  61. "${PIKA_SOURCES_CORE_STD}" "${PIKA_SOURCES_GAMEPLAY}" "${PIKA_SOURCES_CORE_SHARED_RUNTIME}")
  62. target_include_directories(pikaGameplay PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaSTD/")
  63. target_include_directories(pikaGameplay PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/coreConfig/")
  64. target_include_directories(pikaGameplay PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/gameplay/")
  65. target_include_directories(pikaGameplay PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/sharedRuntime/")
  66. target_include_directories(pikaGameplay PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/pluggins/")
  67. target_link_libraries(pikaGameplay PRIVATE glad glfw gl2d glm stb_image stb_truetype imgui safeSave)
  68. #################^^^^^^^^^^^^^^############################
  69. #pikaProduction ###########################################
  70. add_executable(pikaProduction)
  71. target_compile_definitions(pikaProduction PUBLIC PIKA_PRODUCTION)
  72. set_property(TARGET pikaProduction PROPERTY CXX_STANDARD 17)
  73. target_sources(pikaProduction PRIVATE
  74. "${PIKA_SOURCES_CORE_CONFIG}" "${PIKA_SOURCES_CORE_EDITOR}" "${PIKA_SOURCES_PLUGGINS}"
  75. "${PIKA_SOURCES_CORE_RUNTIME}" "${PIKA_SOURCES_CORE_STD}" "${PIKA_SOURCES_GAMEPLAY}" "${PIKA_SOURCES_CORE_SHARED_RUNTIME}")
  76. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/coreConfig/")
  77. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaEditor/")
  78. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaRuntime/")
  79. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaSTD/")
  80. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/gameplay/")
  81. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/sharedRuntime/")
  82. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/pluggins/")
  83. target_link_libraries(pikaProduction PRIVATE glad glfw gl2d glm stb_image stb_truetype imgui safeSave)
  84. #################^^^^^^^^^^^^^^############################
  85. #set exe type to be windowed
  86. if(MSVC)
  87. set_target_properties(pikaProduction PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
  88. set_target_properties(pikaCore PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
  89. endif()