ProtoTank/CMakeLists.txt

91 lines
2.9 KiB
CMake

# CMakeLists.txt
# Written by JackCarterSmith, 2024
# This file is released under the ProtoTank license.
cmake_minimum_required(VERSION 3.23)
cmake_policy(VERSION 3.23)
if(NOT DEFINED PROJECT_BINARY_DIR)
set(PROJECT_BINARY_DIR ".")
endif()
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -march=native -mavx2 -mfma -msse4.2")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wall")
endif()
set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
# define project
project(ProtoTank VERSION 0.1.0 DESCRIPTION "Arcade 80s-style game with tanks" LANGUAGES C CXX)
#configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h @ONLY)
# Compilation option
option(DISABLE_CPU_OPTI "Disable CPU optimizations" OFF)
include(FindPkgConfig)
include(CheckIncludeFile)
include(CheckCSourceCompiles)
# Find libraries
find_package(SFML REQUIRED)
include_directories(sfml::sfml)
include_directories("3rdParty")
# define src/headers files groups
include(srcs.list)
set(BUILDNAME_SUFFIX _v${PROJECT_VERSION})
if(DISABLE_CPU_OPTI)
set(BUILDNAME_SUFFIX ${BUILDNAME_SUFFIX}_noSIMD)
endif()
# targets declarations
add_executable(${PROJECT_NAME})
target_precompile_headers(${PROJECT_NAME} PRIVATE
"$<$<COMPILE_LANGUAGE:CXX>:<string$<ANGLE-R>>"
"$<$<COMPILE_LANGUAGE:CXX>:<stdexcept$<ANGLE-R>>"
"$<$<COMPILE_LANGUAGE:CXX>:<vector$<ANGLE-R>>"
"$<$<COMPILE_LANGUAGE:CXX>:<memory$<ANGLE-R>>"
"$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/tiny_obj_loader.h>"
"$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/Engine/Utils/3DMaths.hpp>"
)
target_sources(${PROJECT_NAME} PUBLIC ${MAIN_SCRS} ${UTILS_SCRS} ${MISC_SCRS} ${GAME_SCRS} ${GRAPHS_SCRS} ${SOUNDS_SCRS})
target_sources(${PROJECT_NAME} PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/tiny_obj_loader.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Engine/Utils/3DMaths_vec.inl"
"${CMAKE_CURRENT_SOURCE_DIR}/Engine/Utils/3DMaths_mat.inl"
"${CMAKE_CURRENT_SOURCE_DIR}/Engine/Utils/3DMaths_bs.inl"
)
target_link_libraries(${PROJECT_NAME} sfml::sfml)
set_target_properties(${PROJECT_NAME} PROPERTIES
OUTPUT_NAME ${PROJECT_NAME}${BUILDNAME_SUFFIX}
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
)
# targets build options
if(MSVC)
# msvc does not append 'lib' - do it here to have consistent name
set_target_properties(${PROJECT_NAME} PROPERTIES IMPORT_PREFIX "lib")
endif()
if(DISABLE_CPU_OPTI)
target_compile_definitions(${PROJECT_NAME} PUBLIC DISABLE_INTRINSICS)
else()
target_compile_definitions(${PROJECT_NAME} PUBLIC FMA3_INTRINSICS)
target_compile_definitions(${PROJECT_NAME} PUBLIC AVX_INTRINSICS)
target_compile_definitions(${PROJECT_NAME} PUBLIC AVX2_INTRINSICS)
endif()
# GPG signature custom command
#add_custom_command(
# OUTPUT ""
# COMMAND gpg --batch --detach-sign
# -o ${PROJECT_NAME}_${CI_SYS_TARGET}.gpg
# ${PROJECT_NAME}
# DEPENDS ${PROJECT_NAME}
# VERBATIM
#)