forked from OpenAtom-Linyaps/linyaps
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
185 lines (156 loc) · 5.16 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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: LGPL-3.0-or-later
cmake_minimum_required(VERSION 3.11.4)
project(
linglong
VERSION 1.5.1
DESCRIPTION "a container based package manager for deepin"
HOMEPAGE_URL "https://github.com/linuxdeepin/linglong"
LANGUAGES CXX)
set(LINGLONG_VERSION
""
CACHE STRING "The version of linglong project.")
if(NOT ("${LINGLONG_VERSION}" STREQUAL ""))
message(STATUS "Project version has been overridden to ${LINGLONG_VERSION}")
set(PROJECT_VERSION ${LINGLONG_VERSION})
endif()
set(ENABLE_UAB OFF CACHE BOOL "enable building UAB")
set(LINGLONG_USERNAME
"deepin-linglong"
CACHE STRING "The username for linglong package manager")
set(LINGLONG_ROOT
"/var/lib/linglong"
CACHE STRING "The location where linglong related program puts their data")
set(LINGLONG_HOST_PATH
"/run/host"
CACHE STRING "The location where linglong host path mapping")
set(LINGLONG_DEFAULT_OCI_RUNTIME
"ll-box"
CACHE STRING "The oci runtime which linglong use by default")
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(PFL)
set(ENABLE_CPM YES)
if(CMAKE_VERSION VERSION_LESS "3.14")
set(ENABLE_CPM NO)
message(
STATUS "cmake version ${CMAKE_VERSION} not compatible with CPM.cmake.")
endif()
if(CPM_LOCAL_PACKAGES_ONLY)
set(ENABLE_CPM NO)
endif()
if(ENABLE_CPM)
include(CPM)
CPMFindPackage(
NAME docopt
VERSION 0.6.1 # NOTE: Upstream cmake version doesn't match git tag, we need
# https://github.com/docopt/docopt.cpp/pull/102 in v0.6.3, but
# cmake version of v0.6.3 is 0.6.1.
GITHUB_REPOSITORY docopt/docopt.cpp
GIT_SHALLOW ON
GIT_TAG v0.6.3
EXCLUDE_FROM_ALL ON)
CPMFindPackage(
NAME tl-expected
VERSION 1.0.0 # NOTE: Upstream cmake version doesn't match git tag, we need
# https://github.com/TartanLlama/expected/pull/62 in v1.1.0,
# but cmake version of v1.1.0 is 1.0.0.
GITHUB_REPOSITORY TartanLlama/expected
GIT_TAG v1.1.0
GIT_SHALLOW ON
OPTIONS "EXPECTED_BUILD_TESTS OFF"
EXCLUDE_FROM_ALL ON)
CPMFindPackage(
NAME yaml-cpp
VERSION 0.6.2
GITHUB_REPOSITORY jbeder/yaml-cpp
GIT_TAG 0.8.0 # NOTE: When use this project with CPM.cmake(FetchContent), we
# need https://github.com/jbeder/yaml-cpp/pull/583 in v0.8.0
EXCLUDE_FROM_ALL ON
OPTIONS "YAML_CPP_INSTALL ON" "YAML_CPP_BUILD_TESTS OFF")
CPMFindPackage(
NAME nlohmann_json
VERSION 3.5.0
URL "https://github.com/nlohmann/json/archive/refs/tags/v3.5.0.tar.gz"
EXCLUDE_FROM_ALL ON
OPTIONS "JSON_BuildTests OFF")
endif()
set(linglong_EXTERNALS "ytj ytj::ytj" "http/client client")
# NOTE: UOS v20 do not have docopt packaged.
find_package(docopt 0.6.1 QUIET)
if(NOT docopt_FOUND)
# list(APPEND linglong_EXTERNALS "docopt.cpp docopt.cpp") # we use header only
add_library(docopt INTERFACE)
target_compile_definitions(docopt INTERFACE DOCOPT_HEADER_ONLY)
target_include_directories(docopt INTERFACE ./external/docopt.cpp)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake.external)
endif()
# NOTE: UOS v20 do not have tl-expected packaged.
find_package(tl-expected 1.0.0 QUIET)
if(NOT tl-expected_FOUND)
# list(APPEND linglong_EXTERNALS tl-expected) # tl-expected requires 3.14
add_library(tl-expected INTERFACE)
add_library(tl::expected ALIAS tl-expected)
target_include_directories(tl-expected
INTERFACE ./external/tl-expected/include)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake.external)
endif()
find_package(nlohmann_json 3.5.0 QUIET)
if(NOT nlohmann_json_FOUND)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake.fix)
find_package(nlohmann_json 3.5.0 REQUIRED)
endif()
function(get_real_target_name output target)
get_target_property("${output}" "${target}" ALIASED_TARGET)
if("${output}" STREQUAL "")
set("${output}" "${target}")
endif()
set("${output}"
${${output}}
PARENT_SCOPE)
endfunction()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
# NOTE(black_desk): Qt keywords conflict with glib.
add_definitions("-DQT_NO_KEYWORDS")
# NOTE(black_desk): Enable Qt logging with context.
add_definitions("-DQT_MESSAGELOGCONTEXT")
find_package(
Qt5
COMPONENTS Core Concurrent DBus Network WebSockets
REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_search_module(glib2 REQUIRED IMPORTED_TARGET glib-2.0)
pkg_search_module(ostree1 REQUIRED IMPORTED_TARGET ostree-1)
pkg_search_module(systemd REQUIRED IMPORTED_TARGET libsystemd)
pkg_search_module(ELF REQUIRED IMPORTED_TARGET libelf)
set(ytj_ENABLE_TESTING NO)
set(ytj_ENABLE_INSTALL NO)
pfl_init(AUTO)
add_subdirectory(tools/qdbusxml2cpp)
include(GNUInstallDirs)
pfl_add_libraries(
LIBS
api
dbus-api
utils
ocppi
linglong
APPS
generators/00-id-mapping
generators/05-initialize
generators/20-devices
generators/25-host-env
generators/30-user-home
generators/40-host-ipc
generators/90-legacy
ll-box
ll-builder
ll-cli
ll-package-manager
llpkg
uab)
add_subdirectory(misc)