/
CMakeLists.txt
100 lines (72 loc) · 2.71 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
cmake_minimum_required(VERSION 3.10)
# Project setup
set(CMAKE_OSX_ARCHITECTURES arm64;x86_64)
project(phosg)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)
if (MSVC)
# Disabled warnings:
# 4458 = declaration of '%s' hides class member (I use this->x for members)
add_compile_options(/W4 /WX /wd4458)
else()
add_compile_options(-Wall -Wextra -Werror -Wno-strict-aliasing -Wno-unused-result -Wno-overflow)
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_BUILD_TYPE Debug)
set(CTEST_OUTPUT_ON_FAILURE ON)
include_directories("/usr/local/include")
link_directories("/usr/local/lib")
# Library and executable definitions
add_library(
phosg
src/Arguments.cc
src/Encoding.cc
src/Filesystem.cc
src/Hash.cc
src/Image.cc
src/JSON.cc
src/Network.cc
src/Process.cc
src/Random.cc
src/Strings.cc
src/Time.cc
src/Tools.cc
src/UnitTest.cc
)
target_link_libraries(phosg pthread z)
# It seems that on some Linux variants (e.g. Raspbian) we also need -latomic,
# but this library does not exist on others (e.g. Ubuntu) nor on macOS
message(STATUS "Target architecture is ${CMAKE_HOST_SYSTEM_PROCESSOR}")
string(FIND ${CMAKE_HOST_SYSTEM_PROCESSOR} "armv" IS_LINUX_ARMV)
if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "aarch64" OR ${IS_LINUX_ARMV} GREATER_EQUAL 0)
target_link_libraries(phosg atomic)
endif()
add_executable(bindiff src/BinDiff.cc)
target_link_libraries(bindiff phosg)
add_executable(jsonformat src/JSONFormat.cc)
target_link_libraries(jsonformat phosg)
add_executable(parse-data src/ParseData.cc)
target_link_libraries(parse-data phosg)
add_executable(phosg-png-conv src/PhosgPNGConv.cc)
target_link_libraries(phosg-png-conv phosg)
# Test definitions
enable_testing()
# TODO: Figure out why ToolsTest doesn't work in GitHub Actions and add it back.
# (It works locally on macOS and Ubuntu.)
add_executable(ToolsTest src/ToolsTest.cc)
target_link_libraries(ToolsTest phosg)
foreach(TestName IN ITEMS ArgumentsTest EncodingTest FilesystemTest HashTest ImageTest JSONTest KDTreeTest LRUMapTest LRUSetTest ProcessTest StringsTest TimeTest UnitTestTest)
add_executable(${TestName} src/${TestName}.cc)
target_link_libraries(${TestName} phosg)
add_test(NAME ${TestName} COMMAND ${TestName})
endforeach()
# Installation configuration
file(GLOB Headers ${CMAKE_SOURCE_DIR}/src/*.hh)
install(TARGETS phosg EXPORT phosg DESTINATION lib)
install(TARGETS bindiff DESTINATION bin)
install(TARGETS jsonformat DESTINATION bin)
install(TARGETS parse-data DESTINATION bin)
install(TARGETS phosg-png-conv DESTINATION bin)
install(FILES ${Headers} DESTINATION include/phosg)
install(FILES phosg-config.cmake DESTINATION lib)
install(EXPORT phosg DESTINATION lib)