55 lines
2.1 KiB
CMake
55 lines
2.1 KiB
CMake
cmake_minimum_required(VERSION 3.18)
|
|
project(chess C)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
set(CMAKE_C_STANDARD 99)
|
|
include_directories(include)
|
|
file(GLOB SOURCES "src/chess/*.c")
|
|
file(GLOB CODE_GEN_LIB_SOURCES "src/common/preCodeGen/*.c")
|
|
file(GLOB LIB_SOURCES "src/common/*/*.c" "src/generated/*.c")
|
|
|
|
add_executable(genMoveConsts src/generateCode/moveConsts.c ${CODE_GEN_LIB_SOURCES})
|
|
add_custom_command(
|
|
OUTPUT moveConsts.h # Output file from code generation
|
|
COMMAND genMoveConsts > include/chess/generated/moveConsts.h
|
|
DEPENDS genMoveConsts # Depends on the code generation executable
|
|
)
|
|
|
|
add_executable(genZobrist src/generateCode/zobrist.c ${CODE_GEN_LIB_SOURCES})
|
|
add_custom_command(
|
|
OUTPUT zobristConsts.c # Output file from code generation
|
|
COMMAND genZobrist > src/generated/zobristConsts.c
|
|
DEPENDS genZobrist # Depends on the code generation executable
|
|
)
|
|
|
|
add_custom_target(generateCode DEPENDS moveConsts.h zobristConsts.c)
|
|
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(GTK4 REQUIRED IMPORTED_TARGET gtk4)
|
|
pkg_check_modules(LIBRSVG REQUIRED IMPORTED_TARGET librsvg-2.0)
|
|
|
|
add_executable(findMagicNumber src/findMagicNumber.c ${LIB_SOURCES})
|
|
add_dependencies(findMagicNumber generateCode)
|
|
|
|
add_executable(${PROJECT_NAME} ${SOURCES} ${LIB_SOURCES})
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::GTK4 PkgConfig::LIBRSVG)
|
|
add_dependencies(${PROJECT_NAME} generateCode)
|
|
|
|
# Enable LTO for release build type
|
|
if(CMAKE_BUILD_TYPE MATCHES "Release")
|
|
include(CheckIPOSupported)
|
|
check_ipo_supported(RESULT result OUTPUT output)
|
|
if(result)
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
else()
|
|
message(WARNING "IPO is not supported: ${output}")
|
|
endif()
|
|
endif()
|
|
|
|
add_executable(chessNoComputer ${SOURCES} ${LIB_SOURCES})
|
|
target_link_libraries(chessNoComputer PRIVATE PkgConfig::GTK4 PkgConfig::LIBRSVG)
|
|
add_dependencies(chessNoComputer generateCode)
|
|
target_compile_definitions(chessNoComputer PUBLIC NO_COMPUTER)
|
|
|
|
add_executable(moveGenTest test/moveGen.c src/chess/move.c ${LIB_SOURCES})
|
|
add_test(NAME moveGen COMMAND moveGenTest)
|