cmake_minimum_required(VERSION 3.20) project(fsarcade) set(CMAKE_CXX_COMPILER clang++) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # set binary directory set(FSARCADE_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/..") set(FSARCADE_SRC_DIR "${FSARCADE_ROOT_DIR}/src") set(IMGUI_SRC_DIR "${FSARCADE_ROOT_DIR}/external/imgui") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${FSARCADE_ROOT_DIR}/runtree) add_executable(fsarcade) if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") target_compile_options(fsarcade PRIVATE -pedantic-errors -Wall -Weffc++ -Wconversion -Wsign-conversion -Wshadow) endif () target_sources(fsarcade PUBLIC ${FSARCADE_SRC_DIR}/main.cpp ${FSARCADE_SRC_DIR}/basic/math.cpp ${FSARCADE_SRC_DIR}/renderer/Renderer.cpp ${FSARCADE_SRC_DIR}/renderer/RenderGroup.cpp ${FSARCADE_SRC_DIR}/renderer/opengl/GlRenderer.cpp ${FSARCADE_SRC_DIR}/renderer/opengl/GlVertexBuffer.cpp ${FSARCADE_SRC_DIR}/renderer/opengl/GlIndexBuffer.cpp ${FSARCADE_SRC_DIR}/renderer/opengl/GlShader.cpp ${FSARCADE_SRC_DIR}/games/Game.cpp ${FSARCADE_SRC_DIR}/games/tetris/Tetris.cpp ${FSARCADE_SRC_DIR}/games/tetris/Tetromino.cpp ${FSARCADE_SRC_DIR}/games/tetris/Board.cpp ${FSARCADE_SRC_DIR}/games/snake/Snake.cpp ${FSARCADE_SRC_DIR}/games/minesweeper/Minesweeper.cpp ${IMGUI_SRC_DIR}/imgui.cpp ${IMGUI_SRC_DIR}/imgui_draw.cpp ${IMGUI_SRC_DIR}/imgui_tables.cpp ${IMGUI_SRC_DIR}/imgui_widgets.cpp ${IMGUI_SRC_DIR}/backends/imgui_impl_sdl3.cpp ${IMGUI_SRC_DIR}/backends/imgui_impl_opengl3.cpp ) target_include_directories(fsarcade PUBLIC ${FSARCADE_SRC_DIR} ${IMGUI_SRC_DIR} ${IMGUI_SRC_DIR}/backends ${FSARCADE_ROOT_DIR}/external/stb ) add_library(stb_truetype STATIC ${FSARCADE_SRC_DIR}/common/stb_truetype.cpp) if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") target_compile_options(stb_truetype PRIVATE -w) # -w suppresses all warnings elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") target_compile_options(stb_truetype PRIVATE /W0) # /W0 suppresses all warnings endif() target_include_directories(stb_truetype PUBLIC ${FSARCADE_ROOT_DIR}/external/stb ) target_link_libraries(fsarcade GL GLEW SDL3 dl stb_truetype)