108 lines
3.2 KiB
CMake
108 lines
3.2 KiB
CMake
# MIT License
|
|
# Author: Mark Allyn
|
|
#
|
|
# CMakeLists.txt — Museum Vintage Radar Exhibit
|
|
#
|
|
# Build:
|
|
# cd build && cmake .. && make -j$(nproc)
|
|
#
|
|
# Run (from project root):
|
|
# ./build/radar
|
|
|
|
cmake_minimum_required(VERSION 3.16)
|
|
project(radar LANGUAGES C CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
# ----------------------------------------------------------------
|
|
# Find packages
|
|
# ----------------------------------------------------------------
|
|
find_package(OpenGL REQUIRED)
|
|
find_package(Freetype REQUIRED)
|
|
find_package(Threads REQUIRED)
|
|
|
|
# GLFW — prefer system package; fall back to find_library
|
|
find_package(PkgConfig QUIET)
|
|
if(PkgConfig_FOUND)
|
|
pkg_check_modules(GLFW glfw3)
|
|
endif()
|
|
if(NOT GLFW_FOUND)
|
|
find_library(GLFW_LIBRARIES NAMES glfw glfw3 REQUIRED)
|
|
find_path(GLFW_INCLUDE_DIRS GLFW/glfw3.h REQUIRED)
|
|
endif()
|
|
|
|
# ----------------------------------------------------------------
|
|
# GLAD (compiled directly from source)
|
|
# ----------------------------------------------------------------
|
|
set(GLAD_SRC ${CMAKE_SOURCE_DIR}/glad/src/glad.c)
|
|
set(GLAD_INC ${CMAKE_SOURCE_DIR}/include)
|
|
|
|
# ----------------------------------------------------------------
|
|
# Source files — main radar binary
|
|
# ----------------------------------------------------------------
|
|
set(SOURCES
|
|
src/main.cpp
|
|
src/shared_render_state.cpp
|
|
src/target_buffer.cpp
|
|
src/phosphor.cpp
|
|
src/graticule.cpp
|
|
src/left_panel.cpp
|
|
src/scope.cpp
|
|
src/scope_manager.cpp
|
|
src/scope_intro.cpp
|
|
src/scope_ppi.cpp
|
|
src/scope_marine_ppi.cpp
|
|
src/simulator.cpp
|
|
src/traffic_cop.cpp
|
|
src/knob_panel.cpp
|
|
src/rpi_receiver.cpp
|
|
${GLAD_SRC}
|
|
)
|
|
|
|
add_executable(radar ${SOURCES})
|
|
|
|
target_include_directories(radar PRIVATE
|
|
src/
|
|
${GLAD_INC}
|
|
${FREETYPE_INCLUDE_DIRS}
|
|
${GLFW_INCLUDE_DIRS}
|
|
)
|
|
|
|
target_link_libraries(radar PRIVATE
|
|
OpenGL::GL
|
|
Freetype::Freetype
|
|
Threads::Threads
|
|
${GLFW_LIBRARIES}
|
|
)
|
|
|
|
# Compiler warnings
|
|
target_compile_options(radar PRIVATE
|
|
-Wall -Wextra -Wpedantic
|
|
-Wno-unused-parameter
|
|
)
|
|
|
|
# ----------------------------------------------------------------
|
|
# terrain_preprocess — offline tool, links GDAL, NOT part of radar
|
|
# Uncomment and install libgdal-dev to build this target.
|
|
# ----------------------------------------------------------------
|
|
# find_package(GDAL)
|
|
# if(GDAL_FOUND)
|
|
# add_executable(terrain_preprocess src/terrain_preprocess.cpp ${GLAD_SRC})
|
|
# target_include_directories(terrain_preprocess PRIVATE src/ ${GLAD_INC} ${GDAL_INCLUDE_DIRS})
|
|
# target_link_libraries(terrain_preprocess PRIVATE ${GDAL_LIBRARIES} Threads::Threads)
|
|
# endif()
|
|
|
|
# ----------------------------------------------------------------
|
|
# Copy shaders and data to build directory for in-build-dir running
|
|
# ----------------------------------------------------------------
|
|
add_custom_target(copy_assets ALL
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
${CMAKE_SOURCE_DIR}/shaders ${CMAKE_BINARY_DIR}/shaders
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
${CMAKE_SOURCE_DIR}/data ${CMAKE_BINARY_DIR}/data
|
|
COMMENT "Copying shaders and data to build directory"
|
|
)
|
|
add_dependencies(radar copy_assets)
|