-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
139 lines (115 loc) · 4.54 KB
/
CMakeLists.txt
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
cmake_minimum_required(VERSION 3.22.2)
project(libtmj VERSION 1.3.0 DESCRIPTION "A C library for loading Tiled maps and tilesets in JSON format")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
# Set output directory
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY lib)
# Export compile commands
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Set options
option(LIBTMJ_TEST "Enable unit tests" OFF)
option(LIBTMJ_DOCS "Enable compiling documentation" OFF)
option(LIBTMJ_ZSTD "Enable zstd decompression for tile layers" OFF)
option(LIBTMJ_ZLIB "Enable zlib/gzip decompression for tile layers" OFF)
option(BUILD_SHARED_LIBS "Build as a shared library" ON)
# To enable debug builds, use -DCMAKE_BUILD_TYPE=Debug
if(WIN32)
find_package(jansson CONFIG REQUIRED)
else()
find_package(Jansson REQUIRED)
endif()
if(LIBTMJ_ZSTD)
find_package(Zstd REQUIRED)
add_compile_definitions("LIBTMJ_ZSTD")
endif()
if(LIBTMJ_ZLIB)
find_package(ZLIB REQUIRED)
add_compile_definitions("LIBTMJ_ZLIB")
endif()
add_library(tmj)
target_sources(tmj
PUBLIC
"include/tmj.h"
PRIVATE
"src/decode.c"
"src/log.c"
"src/tileset.c"
"src/map.c"
"src/util.c"
"src/tmj.def"
)
target_compile_definitions(tmj PUBLIC
LIBTMJ_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
LIBTMJ_VERSION_MINOR=${PROJECT_VERSION_MINOR}
LIBTMJ_VERSION_PATCH=${PROJECT_VERSION_PATCH}
LIBTMJ_VERSION="${PROJECT_VERSION}"
)
# Control symbol visibility
if(NOT WIN32 AND NOT APPLE)
target_link_options(tmj PRIVATE "LINKER:--version-script=src/tmj.sym")
endif()
# Set include directories
target_include_directories(tmj PUBLIC include)
target_include_directories(tmj PRIVATE src)
# Set library version
set_target_properties(tmj PROPERTIES VERSION ${PROJECT_VERSION})
set_target_properties(tmj PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR})
# Set link libraries
target_link_libraries(tmj jansson::jansson)
if(LIBTMJ_ZSTD)
target_link_libraries(tmj Zstd::Zstd)
endif()
if(LIBTMJ_ZLIB)
target_link_libraries(tmj ZLIB::ZLIB)
endif()
# Set compiler/language options
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_C_FLAGS_RELEASE "-O2")
if(WIN32)
set(CMAKE_C_FLAGS_DEBUG "-Od -Z7")
else()
set(CMAKE_C_FLAGS_DEBUG "-O0 -g3 -fsanitize=address -fsanitize=undefined")
endif()
# If tests are enabled, make tests
if(LIBTMJ_TEST)
enable_testing()
add_executable(map_tests test/map_tests.c test/Unity/src/unity.c)
add_executable(tileset_tests test/tileset_tests.c test/Unity/src/unity.c)
add_executable(decode_tests test/decode_tests.c test/Unity/src/unity.c)
#add_executable(util_tests test/util_tests.c test/Unity/src/unity.c)
target_link_libraries(map_tests tmj jansson::jansson)
target_link_libraries(tileset_tests tmj jansson::jansson)
target_link_libraries(decode_tests tmj jansson::jansson)
#target_link_libraries(util_tests tmj jansson::jansson)
if(LIBTMJ_ZSTD)
target_link_libraries(decode_tests tmj Zstd::Zstd)
endif()
if(LIBTMJ_ZLIB)
target_link_libraries(decode_tests tmj ZLIB::ZLIB)
endif()
set_target_properties(map_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY test/bin)
set_target_properties(tileset_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY test/bin)
set_target_properties(decode_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY test/bin)
#set_target_properties(util_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY test/bin)
add_test(NAME map_tests COMMAND test/bin/map_tests)
add_test(NAME tileset_tests COMMAND test/bin/tileset_tests)
add_test(NAME decode_tests COMMAND test/bin/decode_tests)
#add_test(NAME util_tests COMMAND test/bin/util_tests)
# Add library output dir to PATH, because in Windows, the loader will have
# no clue where to find anything
if(WIN32)
set_tests_properties(map_tests PROPERTIES ENVIRONMENT_MODIFICATION
PATH=path_list_append:${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE})
set_tests_properties(tileset_tests PROPERTIES ENVIRONMENT_MODIFICATION
PATH=path_list_append:${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE})
set_tests_properties(decode_tests PROPERTIES ENVIRONMENT_MODIFICATION
PATH=path_list_append:${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE})
endif()
endif()
# If documentation is enabled, compile docs
if(LIBTMJ_DOCS)
find_package(Doxygen REQUIRED doxygen dot)
add_custom_command(TARGET tmj POST_BUILD COMMAND Doxygen::doxygen)
endif()