function(target_link_libraries_system target) set(libs ${ARGN}) foreach(lib ${libs}) get_target_property(lib_include_dirs ${lib} INTERFACE_INCLUDE_DIRECTORIES) target_include_directories(${target} SYSTEM PRIVATE ${lib_include_dirs}) target_link_libraries(${target} ${lib}) endforeach(lib) endfunction(target_link_libraries_system) file(GLOB SOURCES game_of_life.cpp bootstrap.cpp conversion.cpp argument_parser.cpp util/color.cpp game/game.cpp game/status_manager.cpp game/generation_tracker.cpp engine/engine.cpp engine/data/vector2.cpp engine/data/bounds.cpp engine/graphics/scene.cpp engine/graphics/window.cpp engine/graphics/string_matrix.cpp engine/graphics/statusline.cpp engine/user/input.cpp engine/user/cursor.cpp randomization/generator.cpp randomization/seed_generator.cpp commands/insert_cell.cpp commands/move_cursor.cpp commands/quit.cpp commands/toggle_pause.cpp DI/container.cpp DI/object_type.cpp) add_executable(${PROJECT_NAME} ${SOURCES}) target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) target_compile_options( ${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic -Wshadow -Wold-style-cast -Wcast-align -Wno-unused -Wconversion -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Woverloaded-virtual -Wredundant-decls -Wsign-conversion -Wsign-promo -Wstrict-overflow=5 -Wswitch-default -Wundef -Werror -pedantic -fsanitize=address -fno-exceptions ) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") target_compile_options( ${PROJECT_NAME} PRIVATE -Wlogical-op -Wnoexcept -Wstrict-null-sentinel ) endif() target_include_directories(${PROJECT_NAME} PRIVATE .) target_link_libraries_system( ${PROJECT_NAME} ctre fmt::fmt-header-only GSL yacppdic ) target_link_options(${PROJECT_NAME} PRIVATE -fsanitize=address)