-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathuuid.cmake
69 lines (62 loc) · 3.05 KB
/
uuid.cmake
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
# Compile libuuid-1.0.3
if (BUILD_ONLY_DOCS)
# pass
elseif (NOT BUILD_UUID_LIB)
# finds LibUUID::LibUUID
find_package(LibUUID MODULE REQUIRED)
endif()
if (BUILD_UUID_LIB AND NOT (BUILD_ONLY_DOCS))
set(LIBUUID_INSTALL_ROOT "${CMAKE_CURRENT_BINARY_DIR}/lib")
set(LIBUUID_INSTALL_DIR "${LIBUUID_INSTALL_ROOT}/uuid")
message("Will install libuuid into ${LIBUUID_INSTALL_DIR}")
if ("${CMAKE_GENERATOR}" MATCHES "Makefiles")
set(MAKE_COMMAND "$(MAKE)") # recursive make (uses the same make as the main project)
else()
# just run make in a subprocess. We use single-process, but libmnl is a small project
set(MAKE_COMMAND "make")
endif ()
# util-unix uses SOLIB_LDFLAGS as libtool flags for linking
set(SOLIB_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
if (CMAKE_CROSSCOMPILING AND "${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
# util-linux links with libtool
# unfortunately, libtool ignores the `-target=...` parameter in it's flags,
# which breaks cross-compiling for CheriBSD using cheribuild.
# We can specify `-XCClinker` to force libtool to pass the value to the
# underlying clang linker command.
list(APPEND SOLIB_LDFLAGS "-XCClinker --target=${target_autoconf_triple}")
endif()
list(JOIN SOLIB_LDFLAGS " " SOLIB_LDFLAGS)
# ExternalProject downloads/builds/installs at **build** time
# (e.g. during the `cmake --build` step)
ExternalProject_Add(
util_linux
URL "https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.37/util-linux-2.37.2.tar.xz"
URL_HASH SHA256=6a0764c1aae7fb607ef8a6dd2c0f6c47d5e5fd27aa08820abaad9ec14e28e9d9
DOWNLOAD_DIR "${EP_DOWNLOAD_DIR}" # if empty string, uses default download dir
CONFIGURE_COMMAND <SOURCE_DIR>/autogen.sh
COMMAND
${CMAKE_COMMAND} -E env "PATH=$ENV{PATH}" <SOURCE_DIR>/configure
--with-pic=yes # -fPIC required since we want to link our static lib to sqlhook shared lib
--prefix=<INSTALL_DIR>
"--host=${target_autoconf_triple}"
--disable-all-programs --enable-libuuid
"CC=${CMAKE_C_COMPILER}" "CFLAGS=${CMAKE_C_FLAGS}" "LDFLAGS=${CMAKE_SHARED_LINKER_FLAGS}"
"SOLIB_LDFLAGS=${SOLIB_LDFLAGS}" # util-linux uses a custom ldflags for linking
INSTALL_DIR "${LIBUUID_INSTALL_DIR}"
# need to manually specify PATH, so that make knows where to find GCC
BUILD_COMMAND ${CMAKE_COMMAND} -E env "PATH=$ENV{PATH}" "${MAKE_COMMAND}"
INSTALL_COMMAND ${CMAKE_COMMAND} -E env "PATH=$ENV{PATH}" "${MAKE_COMMAND}" install
# technically this is an INSTALL_BYPRODUCT, but we only ever need this to make Ninja happy
BUILD_BYPRODUCTS "<INSTALL_DIR>/lib/libuuid.a"
)
ExternalProject_Get_Property(util_linux INSTALL_DIR)
set(LIBUUID_LIB_DIR "${INSTALL_DIR}/lib")
set(LIBUUID_INCLUDE_DIR "${INSTALL_DIR}/include")
add_library(LibUUID::LibUUID STATIC IMPORTED)
file(MAKE_DIRECTORY "${LIBUUID_INCLUDE_DIR}")
set_target_properties(LibUUID::LibUUID PROPERTIES
IMPORTED_LOCATION "${LIBUUID_LIB_DIR}/libuuid.a"
INTERFACE_INCLUDE_DIRECTORIES "${LIBUUID_INCLUDE_DIR}"
)
add_dependencies(LibUUID::LibUUID util_linux)
endif ()