-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
118 lines (105 loc) · 3.32 KB
/
CMakeLists.txt
File metadata and controls
118 lines (105 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
cmake_minimum_required(VERSION 3.16)
# Default to ~/.local install prefix (user-local) unless explicitly overridden
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local" CACHE PATH "Install prefix" FORCE)
endif()
project(azmap VERSION 1.0.0 LANGUAGES C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
find_package(OpenGL REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GLFW3 REQUIRED glfw3)
pkg_check_modules(GLEW REQUIRED glew)
pkg_check_modules(CURL REQUIRED libcurl)
# shapelib - try pkg-config first, fall back to find_library
pkg_check_modules(SHAPELIB shapelib)
if(NOT SHAPELIB_FOUND)
find_library(SHAPELIB_LIBRARIES NAMES shp shapelib)
find_path(SHAPELIB_INCLUDE_DIRS shapefil.h)
if(NOT SHAPELIB_LIBRARIES)
message(FATAL_ERROR "shapelib not found. Install with: sudo pacman -S shapelib")
endif()
endif()
add_executable(azmap
src/main.c
src/config.c
src/projection.c
src/map_data.c
src/renderer.c
src/camera.c
src/input.c
src/text.c
src/grid.c
src/solar.c
src/nightmesh.c
src/ui.c
src/qrz.c
src/cJSON.c
src/overlay.c
src/fetch.c
)
target_include_directories(azmap PRIVATE
${GLFW3_INCLUDE_DIRS}
${GLEW_INCLUDE_DIRS}
${SHAPELIB_INCLUDE_DIRS}
${CURL_INCLUDE_DIRS}
${OPENGL_INCLUDE_DIR}
)
target_link_libraries(azmap PRIVATE
${GLFW3_LIBRARIES}
${GLEW_LIBRARIES}
${SHAPELIB_LIBRARIES}
${CURL_LIBRARIES}
OpenGL::GL
m
pthread
)
target_compile_definitions(azmap PRIVATE
AZMAP_VERSION="${PROJECT_VERSION}"
)
target_compile_options(azmap PRIVATE
${GLFW3_CFLAGS_OTHER}
${GLEW_CFLAGS_OTHER}
-Wall -Wextra
)
# Copy shaders to build directory on every build
file(GLOB SHADER_FILES ${CMAKE_SOURCE_DIR}/shaders/*)
add_custom_target(copy_shaders ALL
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/shaders ${CMAKE_BINARY_DIR}/shaders
DEPENDS ${SHADER_FILES}
COMMENT "Copying shaders to build directory"
)
add_dependencies(azmap copy_shaders)
# Generate application icons at build time (multiple sizes for hicolor theme)
add_executable(gen_icon EXCLUDE_FROM_ALL tools/gen_icon.c)
target_link_libraries(gen_icon PRIVATE m)
set(ICON_SIZES 32 48 64 128 256)
set(ICON_OUTPUTS)
foreach(SZ IN LISTS ICON_SIZES)
set(ICON_FILE ${CMAKE_BINARY_DIR}/azmap-${SZ}.png)
list(APPEND ICON_OUTPUTS ${ICON_FILE})
add_custom_command(
OUTPUT ${ICON_FILE}
COMMAND gen_icon ${SZ} ${ICON_FILE}
DEPENDS gen_icon
COMMENT "Generating ${SZ}x${SZ} application icon"
)
endforeach()
add_custom_target(generate_icons ALL DEPENDS ${ICON_OUTPUTS})
# Install binary, shaders, icons, and desktop file
include(GNUInstallDirs)
install(TARGETS azmap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(DIRECTORY shaders/ DESTINATION ${CMAKE_INSTALL_DATADIR}/azmap/shaders)
install(DIRECTORY data/ DESTINATION ${CMAKE_INSTALL_DATADIR}/azmap/data
OPTIONAL
FILES_MATCHING
PATTERN "*.shp" PATTERN "*.shx" PATTERN "*.dbf" PATTERN "*.prj"
)
foreach(SZ IN LISTS ICON_SIZES)
install(FILES ${CMAKE_BINARY_DIR}/azmap-${SZ}.png
DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/${SZ}x${SZ}/apps
RENAME azmap.png)
endforeach()
install(FILES data/azmap.desktop
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)