CMakeLists.txt 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. cmake_minimum_required(VERSION 3.5)
  2. project(aengine-editor LANGUAGES CXX)
  3. if(NOT WIN32)
  4. string(ASCII 27 Esc)
  5. set(ColourReset "${Esc}[m")
  6. set(ColourBold "${Esc}[1m")
  7. set(Red "${Esc}[31m")
  8. set(Green "${Esc}[32m")
  9. set(Yellow "${Esc}[33m")
  10. set(Blue "${Esc}[34m")
  11. set(Magenta "${Esc}[35m")
  12. set(Cyan "${Esc}[36m")
  13. set(White "${Esc}[37m")
  14. set(BoldRed "${Esc}[1;31m")
  15. set(BoldGreen "${Esc}[1;32m")
  16. set(BoldYellow "${Esc}[1;33m")
  17. set(BoldBlue "${Esc}[1;34m")
  18. set(BoldMagenta "${Esc}[1;35m")
  19. set(BoldCyan "${Esc}[1;36m")
  20. set(BoldWhite "${Esc}[1;37m")
  21. endif()
  22. set(CMAKE_CXX_STANDARD 17)
  23. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  24. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
  25. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
  26. set(USE_LTO OFF)
  27. set(USE_SUBMODULES_STATIC_LINKING ON)
  28. set(USE_STDLIB_STATIC_LINKING ON)
  29. if("${CMAKE_CXX_COMPILER}" MATCHES "mingw")
  30. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
  31. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector")
  32. set(BUILD_WITH_MINGW ON)
  33. endif()
  34. if(USE_LTO)
  35. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto=auto")
  36. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto=auto")
  37. message("Link time optimizations: ${BoldGreen}ON")
  38. set(AENGINE_USE_LTO ON)
  39. else()
  40. message("Link time optimizations: ${BoldRed}OFF")
  41. endif()
  42. if(USE_SUBMODULES_STATIC_LINKING)
  43. set(SPDLOG_BUILD_SHARED OFF)
  44. message("Submodules static linking: ${BoldGreen}ON")
  45. else()
  46. set(SPDLOG_BUILD_SHARED ON)
  47. message("Submodules static linking: ${BoldRed}OFF")
  48. endif()
  49. if(USE_STDLIB_STATIC_LINKING)
  50. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc -static-libstdc++")
  51. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++")
  52. endif()
  53. file(GLOB_RECURSE PROJECT_SOURCES ./src/*.cpp)
  54. file(GLOB_RECURSE PROJECT_HEADERS ./include/*.hpp)
  55. include_directories(
  56. ${INCLUDE_DIRECTORIES}
  57. include
  58. 3d-party/spdlog/include
  59. 3d-party/imgui
  60. 3d-party/argparse/include
  61. AEngine/AEngine/core/include
  62. AEngine/AEngine/application/include
  63. AEngine/AEngine/renderer/include
  64. AEngine/AEngine/misc/include
  65. AEngine/3d-party/aengine-plugman/include
  66. AEngine/3d-party/glm
  67. )
  68. if(AENGINE_OPENGL_LOADER_CORE_PROFILE)
  69. include_directories(
  70. ${INCLUDE_DIRECTORIES}
  71. AEngine/3d-party/glad/core/include/
  72. )
  73. else()
  74. include_directories(
  75. ${INCLUDE_DIRECTORIES}
  76. AEngine/3d-party/glad/compat/include/
  77. )
  78. endif()
  79. if(BUILD_WITH_MINGW)
  80. set(GLFW_LIB_BIN glfw3)
  81. else()
  82. set(GLFW_LIB_BIN glfw)
  83. endif()
  84. add_subdirectory(AEngine)
  85. add_subdirectory(3d-party/spdlog)
  86. add_subdirectory(3d-party/imgui)
  87. add_executable(${PROJECT_NAME} ${PROJECT_SOURCES} ${PROJECT_HEADERS})
  88. target_link_libraries(${PROJECT_NAME} aengine-3d spdlog imgui ${GLFW_LIB_BIN})
  89. if(BUILD_WITH_MINGW)
  90. target_link_libraries(${PROJECT_NAME} gdi32 opengl32)
  91. endif()