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)