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 bootstrap.cpp util/color.cpp game/game.cpp game/status_manager.cpp game/generation_tracker.cpp engine/engine.cpp engine/main.cpp engine/data/vector2.cpp engine/data/bounds.cpp engine/graphics/scene.cpp engine/graphics/string_matrix.cpp engine/graphics/component_renderer.cpp engine/components/statusline.cpp engine/user/input.cpp engine/user/cursor.cpp) add_executable(${PROJECT_NAME} ${SOURCES}) set_target_properties( ${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} ) 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 -fno-omit-frame-pointer ) 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} fmt::fmt-header-only GSL yacppdic ) target_link_options(${PROJECT_NAME} PRIVATE -fsanitize=address)