cmake_minimum_required(VERSION 3.18) project(chess C) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) include_directories(include) file(GLOB SOURCES "src/chess/*.c") file(GLOB LIB_SOURCES "src/common/*.c") add_executable(genMoveConsts src/generateCode/moveConsts.c src/common/bitboard.c src/common/print.c) 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_custom_target(generateCode DEPENDS moveConsts.h) 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}) set_property(TARGET findMagicNumber PROPERTY C_STANDARD 99) add_dependencies(findMagicNumber generateCode) add_executable(${PROJECT_NAME} ${SOURCES} ${LIB_SOURCES}) set_property(TARGET ${PROJECT_NAME} PROPERTY C_STANDARD 99) 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}) set_property(TARGET chessNoComputer PROPERTY C_STANDARD 99) 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}) set_property(TARGET moveGenTest PROPERTY C_STANDARD 99) add_test(NAME moveGen COMMAND moveGenTest)