-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
59 lines (48 loc) · 2.21 KB
/
Copy pathCMakeLists.txt
File metadata and controls
59 lines (48 loc) · 2.21 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
cmake_minimum_required(VERSION 3.10)
project(kvspace VERSION 1.0.0 LANGUAGES C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)
include(GNUInstallDirs)
# 默认 prefix=/usr(与 kvspace-c 对齐),前端与后端同装 <prefix>/lib/kvspace。
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "" FORCE)
endif()
add_library(kvspace SHARED src/frontend.c)
# 前端 SONAME:libkvspace.so.1
set_target_properties(kvspace PROPERTIES
VERSION 1.0.0
SOVERSION 1
)
target_include_directories(kvspace
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
# dlopen/dlsym 的宿主库:Linux 为 libdl,macOS 在 libSystem 内(CMAKE_DL_LIBS 两者皆正确)
target_link_libraries(kvspace PRIVATE ${CMAKE_DL_LIBS})
target_compile_definitions(kvspace PRIVATE _GNU_SOURCE)
install(TARGETS kvspace
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/kvspace
)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
configure_file(kvspace.pc.in ${CMAKE_CURRENT_BINARY_DIR}/kvspace.pc @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kvspace.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
# ── CLI(cli/ 独立 Cargo 项目)──────────────────────────────────────
# 走本仓 dispatch 前端的 C ABI,故须在 kvspace 目标之后构建;
# 安装到 <prefix>/bin(prefix 默认 /usr → /usr/bin,与 kvlang 的 CLI 一致)。
find_program(CARGO_EXECUTABLE cargo)
if(CARGO_EXECUTABLE)
set(KVSPACE_CLI_BIN "${CMAKE_CURRENT_SOURCE_DIR}/cli/target/release/kvspace")
add_custom_target(kvspace-cli ALL
COMMAND ${CMAKE_COMMAND} -E env
"RUSTFLAGS=-L native=$<TARGET_FILE_DIR:kvspace>"
"${CARGO_EXECUTABLE}" build --release
--manifest-path "${CMAKE_CURRENT_SOURCE_DIR}/cli/Cargo.toml"
BYPRODUCTS "${KVSPACE_CLI_BIN}"
DEPENDS kvspace
COMMENT "构建 kvspace CLI(cli/)")
install(PROGRAMS "${KVSPACE_CLI_BIN}" DESTINATION ${CMAKE_INSTALL_BINDIR})
else()
message(STATUS "未找到 cargo,跳过 kvspace CLI(cli/)")
endif()