cmake_minimum_required(VERSION 3.19 FATAL_ERROR) project(BillySheet LANGUAGES CXX C) #set(GLEW_USE_STATIC_LIBS ON) find_package(OpenGL REQUIRED) find_package(GLEW REQUIRED) # see https://cmake.org/cmake/help/latest/module/FindBoost.html find_package(Boost REQUIRED COMPONENTS stacktrace_addr2line) include_directories(${Boost_INCLUDE_DIR}) set(PRECOMPILE_HEADERS include/gui/gui.hpp include/gui/gui_data.hpp include/gui/window.hpp ) set(SOURCE_HEADERS include/imgui/imconfig.h include/imgui/imgui.h include/imgui/imgui_stdlib.h include/imgui/imgui_impl_glfw.h include/imgui/imgui_impl_opengl3.h include/imgui/imgui_impl_opengl3_loader.h include/imgui/imgui_internal.h include/imgui/imstb_rectpack.h include/imgui/imstb_textedit.h include/imgui/imstb_truetype.h include/stb_image.h external/ImFileDialog/ImFileDialog.h include/gui/gui.hpp include/gui/gui_data.hpp include/gui/window.hpp include/character_sheet.hpp include/characteristic/habilete.hpp include/characteristic/adresse.hpp include/characteristic/endurance.hpp include/characteristic/chance.hpp include/gui/menu/menu.hpp include/gui/menu/menu_data.hpp include/characteristic/characteristic.hpp include/controller.hpp ) set(SOURCE_FILES src/imgui/imgui.cpp src/imgui/imgui_stdlib.cpp src/imgui/imgui_draw.cpp src/imgui/imgui_impl_glfw.cpp src/imgui/imgui_impl_opengl3.cpp src/imgui/imgui_tables.cpp src/imgui/imgui_widgets.cpp external/ImFileDialog/ImFileDialog.cpp src/main.cpp src/gui/gui.cpp src/gui/gui_data.cpp src/gui/window.cpp src/character_sheet.cpp src/characteristic/adresse.cpp src/characteristic/endurance.cpp src/characteristic/chance.cpp src/gui/menu/menu.cpp src/controller.cpp ) set(SOURCES ${SOURCE_HEADERS} ${SOURCE_FILES}) find_program(CCACHE_FOUND ccache) if (CCACHE_FOUND) message(STATUS "ccache found !") set_property(GLOBAL PROPERTY C_COMPILER_LAUNCHER ccache) set_property(GLOBAL PROPERTY C_LINKER_LAUNCHER ccache) set_property(GLOBAL PROPERTY CXX_COMPILER_LAUNCHER ccache) set_property(GLOBAL PROPERTY CXX_LINKER_LAUNCHER ccache) else () message(STATUS "ccache not found") endif () option(BUILD_SHARED_LIBS "Build shared libraries" OFF) option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" OFF) option(GLFW_BUILD_TESTS "Build the GLFW test programs" OFF) option(GLFW_BUILD_DOCS "Build the GLFW documentation" OFF) option(GLFW_INSTALL "Generate installation target" OFF) option(GLFW_VULKAN_STATIC "Assume the Vulkan loader is linked with the application" OFF) add_subdirectory(external/glfw) option(SPDLOG_ENABLE_PCH "Build static or shared library using precompiled header to speed up compilation time" ON) option(SPDLOG_BUILD_WARNINGS "Enable compiler warnings" ON) option(SPDLOG_PREVENT_CHILD_FD "Prevent from child processes to inherit log file descriptors" ON) option(SPDLOG_NO_THREAD_ID "prevent spdlog from querying the thread id on each log call if thread id is not needed" ON) option(SPDLOG_NO_TLS "prevent spdlog from using thread local storage" ON) option(SPDLOG_NO_ATOMIC_LEVELS "prevent spdlog from using of std::atomic log levels (use only if your code never modifies log levels concurrently" ON) add_subdirectory(external/spdlog) set(JSON_BuildTests OFF CACHE INTERNAL "") add_subdirectory(external/json) option(CATCH_INSTALL_DOCS "Install documentation alongside library" OFF) option(CATCH_INSTALL_EXTRAS "Install extras alongside library" OFF) add_subdirectory(external/catch2) add_subdirectory("Unit testing") set(COMPILE_FLAGS -pipe -march=skylake # change to native or your architecture. -mtune=skylake # same as above -mrdseed # be careful about this, this is linked to the x86 architecture. -mrdrnd # same as above -Wall -Wextra -Wpedantic # -Wpadded -pedantic -ffunction-sections -fdata-sections -fuse-ld=gold -funroll-loops -fdevirtualize-at-ltrans -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free ) set(LINKER_OPTIONS -Wl,--sort-common,--as-needed,--gc-sections,--strip-all -fuse-ld=gold -fdevirtualize-at-ltrans ) set(LINKER_FLAGS jemalloc ) add_executable(BillySheet ${SOURCES}) target_include_directories(BillySheet PRIVATE include include/imgui external/ImFileDialog) set_target_properties(BillySheet spdlog PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF INTERPROCEDURAL_OPTIMIZATION ON # UNITY_BUILD ON ) set_target_properties(glfw PROPERTIES C_STANDARD 11 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF INTERPROCEDURAL_OPTIMIZATION ON UNITY_BUILD ON ) set_target_properties(spdlog PROPERTIES UNITY_BUILD ON) #target_precompile_headers(BillySheet PRIVATE ${PRECOMPILE_HEADERS}) target_compile_definitions(BillySheet PRIVATE $<$:_GLIBCXX_DEBUG> $<$:SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_DEBUG> $<$:SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_ERROR>) target_compile_options(spdlog PRIVATE ${COMPILE_FLAGS}) target_compile_options(glfw PRIVATE ${COMPILE_FLAGS}) target_compile_options(BillySheet PRIVATE ${COMPILE_FLAGS}) target_link_options(spdlog PRIVATE ${LINKER_OPTIONS}) target_link_options(glfw PRIVATE ${LINKER_OPTIONS}) target_link_options(BillySheet PRIVATE ${LINKER_OPTIONS}) target_link_libraries(spdlog PRIVATE ${LINKER_FLAGS}) target_link_libraries(glfw PRIVATE ${LINKER_FLAGS}) target_link_libraries(BillySheet glfw spdlog OpenGL::OpenGL GLEW::GLEW nlohmann_json::nlohmann_json ${Boost_LIBRARIES} ${LINKER_FLAGS})