billy-gtk4-interface/CMakeLists.txt

114 lines
3.3 KiB
CMake

cmake_minimum_required(VERSION 3.30)
project(LearnGtk4 LANGUAGES CXX)
include(FetchContent)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTKMM4 REQUIRED IMPORTED_TARGET gtkmm-4.0)
fetchcontent_declare(BillySheet
GIT_REPOSITORY https://gitea.pcornatcloud.fr/Pcornat/BillySheet.git
GIT_SUBMODULES_RECURSE ON
GIT_SHALLOW ON
DOWNLOAD_EXTRACT_TIMESTAMP OFF
OVERRIDE_FIND_PACKAGE
)
option(BILLY_ENABLE_TESTS "Enable Unit testing target" OFF)
fetchcontent_makeavailable(BillySheet)
find_package(BillySheet CONFIG REQUIRED)
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 ()
set(COMPILE_FLAGS
-pipe
-march=znver3 # change to native or your architecture.
-mtune=znver3 # same as above
-mrdseed # be careful about this, this is linked to the x86 architecture.
-mrdrnd # same as above
-Wall
-Wextra
-Wpedantic
-pedantic
$<$<CONFIG:Release>:-ffunction-sections -fdata-sections>
-fuse-ld=gold
-funroll-loops
-fdevirtualize-at-ltrans
)
set(LINKER_OPTIONS
-Wl,--sort-common,--as-needed$<$<CONFIG:Release>:,--gc-sections,--strip-all>
-fuse-ld=gold
-fdevirtualize-at-ltrans
)
option(ENABLE_COVERAGE "Enabling coverage" OFF)
if (${ENABLE_COVERAGE})
message(STATUS "Coverage enabled")
list(APPEND COMPILE_FLAGS --coverage)
list(APPEND LINKER_OPTIONS --coverage)
list(APPEND LINKER_FLAGS gcov)
endif ()
fetchcontent_declare(
assimp
GIT_REPOSITORY https://github.com/assimp/assimp.git
GIT_TAG v6.0.3
GIT_SHALLOW ON
)
set(BUILD_SHARED_LIBS ON)
set(ASSIMP_NO_EXPORT ON)
set(ASSIMP_INSTALL OFF)
set(ASSIMP_BUILD_ZLIB OFF)
set(ASSIMP_BUILD_TESTS OFF)
set(ASSIMP_WARNINGS_AS_ERRORS OFF)
set(ASSIMP_INSTALL_PDB OFF)
set(ASSIMP_INJECT_DEBUG_POSTFIX OFF)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(ASSIMP_INJECT_DEBUG_POSTFIX ON)
else ()
set(ASSIMP_INJECT_DEBUG_POSTFIX OFF)
endif ()
fetchcontent_makeavailable(assimp)
fetchcontent_declare(
spdlog
GIT_REPOSITORY https://github.com/gabime/spdlog.git
GIT_TAG v1.17.0
GIT_SHALLOW ON
)
set(SPDLOG_ENABLE_PCH ON)
set(SPDLOG_BUILD_WARNINGS ON)
set(SPDLOG_PREVENT_CHILD_FD ON)
set(SPDLOG_NO_THREAD_ID ON)
set(SPDLOG_NO_TLS ON)
set(SPDLOG_NO_ATOMIC_LEVELS ON)
fetchcontent_makeavailable(spdlog)
add_executable(LearnGtk4 main.cpp
hello_world.cpp
hello_world.hpp
app_win_2_back.cpp
app_win_2_back.hpp
)
set_target_properties(LearnGtk4 assimp spdlog_header_only PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
INTERPROCEDURAL_OPTIMIZATION ON
)
target_compile_definitions(LearnGtk4 PUBLIC $<$<CONFIG:Debug>:_GLIBCXX_DEBUG>)
target_compile_definitions(assimp PUBLIC $<$<CONFIG:Debug>:_GLIBCXX_DEBUG>)
target_compile_options(LearnGtk4 PUBLIC ${COMPILE_FLAGS})
target_link_options(LearnGtk4 PUBLIC ${LINKER_OPTIONS})
target_link_libraries(LearnGtk4 PkgConfig::GTKMM4 assimp spdlog_header_only BillySheet)