CMakeLists.txt 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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/gl3d)
  21. add_subdirectory(thirdparty/glui)
  22. add_subdirectory(thirdparty/glm)
  23. add_subdirectory(thirdparty/stb_image)
  24. add_subdirectory(thirdparty/stb_truetype)
  25. add_subdirectory(thirdparty/imgui-docking)
  26. add_subdirectory(thirdparty/safeSafe)
  27. #Define some macros for the project sources
  28. file(GLOB_RECURSE PIKA_SOURCES_CORE_CONFIG CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/core/coreConfig/*.cpp")
  29. file(GLOB_RECURSE PIKA_SOURCES_CORE_EDITOR CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaEditor/*.cpp")
  30. file(GLOB_RECURSE PIKA_SOURCES_CORE_RUNTIME CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaRuntime/*.cpp")
  31. file(GLOB_RECURSE PIKA_SOURCES_CORE_STD CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaSTD/*.cpp")
  32. file(GLOB_RECURSE PIKA_SOURCES_GAMEPLAY CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/gameplay/*.cpp")
  33. file(GLOB_RECURSE PIKA_SOURCES_CORE_SHARED_RUNTIME CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/core/sharedRuntime/*.cpp")
  34. file(GLOB_RECURSE PIKA_SOURCES_PLUGGINS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/pluggins/*.cpp")
  35. add_compile_definitions(PIKA_RESOURCES_PATH="${CMAKE_CURRENT_SOURCE_DIR}/resources/")
  36. add_compile_definitions(PIKA_ENGINE_RESOURCES_PATH="${CMAKE_CURRENT_SOURCE_DIR}/engineResources/")
  37. #add_compile_definitions(PIKA_RESOURCES_PATH="./resources/")
  38. if(MSVC)
  39. add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
  40. #https://stackoverflow.com/questions/5559357/debugheapdelete-access-violation-at-termination
  41. #add_compile_definitions(_STATIC_CPPLIB)
  42. #add_compile_definitions(_DISABLE_DEPRECATE_STATIC_CPPLIB)
  43. endif()
  44. #pikaCore ############################################
  45. add_executable(pikaCore)
  46. target_compile_definitions(pikaCore PUBLIC PIKA_DEVELOPMENT)
  47. set_property(TARGET pikaCore PROPERTY CXX_STANDARD 17)
  48. target_sources(pikaCore PRIVATE
  49. "${PIKA_SOURCES_CORE_CONFIG}" "${PIKA_SOURCES_CORE_EDITOR}" "${PIKA_SOURCES_CORE_RUNTIME}"
  50. "${PIKA_SOURCES_CORE_STD}" "${PIKA_SOURCES_CORE_SHARED_RUNTIME}")
  51. target_include_directories(pikaCore PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/coreConfig/")
  52. target_include_directories(pikaCore PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaEditor/")
  53. target_include_directories(pikaCore PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaRuntime/")
  54. target_include_directories(pikaCore PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaSTD/")
  55. target_include_directories(pikaCore PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/sharedRuntime/")
  56. target_link_libraries(pikaCore PRIVATE glad glfw gl2d gl3d glui glm stb_image stb_truetype imgui safeSave)
  57. #################^^^^^^^^#############################
  58. #pikaGameplay ###########################################
  59. add_library(pikaGameplay SHARED)
  60. target_compile_definitions(pikaGameplay PUBLIC PIKA_DEVELOPMENT)
  61. set_property(TARGET pikaGameplay PROPERTY CXX_STANDARD 17)
  62. target_sources(pikaGameplay PRIVATE "${PIKA_SOURCES_CORE_CONFIG}" "${PIKA_SOURCES_PLUGGINS}"
  63. "${PIKA_SOURCES_CORE_STD}" "${PIKA_SOURCES_GAMEPLAY}" "${PIKA_SOURCES_CORE_SHARED_RUNTIME}")
  64. target_include_directories(pikaGameplay PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaSTD/")
  65. target_include_directories(pikaGameplay PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/coreConfig/")
  66. target_include_directories(pikaGameplay PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/gameplay/")
  67. target_include_directories(pikaGameplay PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/sharedRuntime/")
  68. target_include_directories(pikaGameplay PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/pluggins/")
  69. target_link_libraries(pikaGameplay PRIVATE glad glfw gl2d gl3d glui glm stb_image stb_truetype imgui safeSave)
  70. #################^^^^^^^^^^^^^^############################
  71. #pikaProduction ###########################################
  72. add_executable(pikaProduction)
  73. target_compile_definitions(pikaProduction PUBLIC PIKA_PRODUCTION)
  74. set_property(TARGET pikaProduction PROPERTY CXX_STANDARD 17)
  75. target_sources(pikaProduction PRIVATE
  76. "${PIKA_SOURCES_CORE_CONFIG}" "${PIKA_SOURCES_CORE_EDITOR}" "${PIKA_SOURCES_PLUGGINS}"
  77. "${PIKA_SOURCES_CORE_RUNTIME}" "${PIKA_SOURCES_CORE_STD}" "${PIKA_SOURCES_GAMEPLAY}" "${PIKA_SOURCES_CORE_SHARED_RUNTIME}")
  78. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/coreConfig/")
  79. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaEditor/")
  80. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaRuntime/")
  81. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/pikaSTD/")
  82. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/gameplay/")
  83. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/core/sharedRuntime/")
  84. target_include_directories(pikaProduction PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/pluggins/")
  85. target_link_libraries(pikaProduction PRIVATE glad glfw gl2d gl3d glui glm stb_image stb_truetype imgui safeSave)
  86. #################^^^^^^^^^^^^^^############################
  87. #set exe type to be windowed
  88. if(MSVC)
  89. set_target_properties(pikaProduction PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
  90. set_target_properties(pikaCore PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
  91. endif()