cmake_minimum_required(VERSION 3.20) project(fsarcade) # compile options 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) # code directories 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(GLAD_SRC_DIR "${FSARCADE_ROOT_DIR}/external/glad/src") set(GLAD_INC_DIR "${FSARCADE_ROOT_DIR}/external/glad/include") # output directories set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${FSARCADE_ROOT_DIR}/runtree) # required packages find_package(SDL3 REQUIRED) # fsarcade add_executable(fsarcade) if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") target_compile_options(fsarcade PRIVATE -pedantic-errors -Wall -Weffc++ -Wconversion -Wsign-conversion -Wshadow -mavx2) endif () target_sources(fsarcade PUBLIC ${FSARCADE_SRC_DIR}/main.cpp ${FSARCADE_SRC_DIR}/common/math.cpp ${FSARCADE_SRC_DIR}/common/Font.cpp ${FSARCADE_SRC_DIR}/common/MemoryManager.cpp ${FSARCADE_SRC_DIR}/renderer/Renderer.cpp ${FSARCADE_SRC_DIR}/renderer/RSoftwareBackend.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 ${FSARCADE_SRC_DIR}/games/pong/Pong.cpp ) target_include_directories(fsarcade PRIVATE ${FSARCADE_SRC_DIR} ) # imgui add_library(imgui OBJECT ${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(imgui PUBLIC ${IMGUI_SRC_DIR} ${IMGUI_SRC_DIR}/backends) # glad add_library(glad STATIC ${GLAD_SRC_DIR}/gl.c) target_include_directories(glad PUBLIC ${GLAD_INC_DIR}) # 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 SDL3::SDL3 GL glad dl imgui stb_truetype)