144 lines
4.4 KiB
CMake
144 lines
4.4 KiB
CMake
cmake_minimum_required(VERSION 3.19 FATAL_ERROR)
|
|
project(BillySheet LANGUAGES CXX C)
|
|
|
|
find_package(OpenGL REQUIRED)
|
|
|
|
set(PRECOMPILE_HEADERS
|
|
include/gui.hpp
|
|
include/gui_data.hpp
|
|
include/window.hpp
|
|
)
|
|
|
|
set(SOURCE_HEADERS
|
|
include/imgui/imconfig.h
|
|
include/imgui/imgui.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/gui.hpp
|
|
include/gui_data.hpp
|
|
include/window.hpp
|
|
include/character_sheet.hpp
|
|
include/characteristic/habilete.hpp
|
|
include/characteristic/adresse.hpp
|
|
include/characteristic/endurance.hpp
|
|
include/characteristic/chance.hpp
|
|
)
|
|
|
|
set(SOURCE_FILES
|
|
src/imgui/imgui.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
|
|
src/main.cpp
|
|
src/gui.cpp
|
|
src/gui_data.cpp
|
|
src/window.cpp
|
|
src/character_sheet.cpp
|
|
src/characteristic/adresse.cpp
|
|
src/characteristic/endurance.cpp
|
|
src/characteristic/chance.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(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)
|
|
|
|
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
|
|
)
|
|
|
|
#target_precompile_headers(BillySheet PRIVATE ${PRECOMPILE_HEADERS})
|
|
target_compile_definitions(BillySheet PRIVATE
|
|
$<$<CONFIG:Debug>:_GLIBCXX_DEBUG>
|
|
$<$<CONFIG:Debug>:SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_DEBUG>
|
|
$<$<CONFIG:Release>: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 ${LINKER_FLAGS})
|