92 lines
3.0 KiB
CMake
92 lines
3.0 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>:<iostream$<ANGLE-R>>"
|
|
"$<$<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
|
|
#) |