forked from bryanchriswhite/libpoktroll-clients
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
106 lines (91 loc) · 3.21 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
cmake_minimum_required(VERSION 3.24)
project(libpoktroll_clients VERSION 0.2.0)
# Add option for building tests
option(BUILD_TESTS "Build test programs" OFF)
# Set C++ standard
set(CMAKE_CXX_STANDARD 20)
# Set platform-specific library extension and other variables
if (WIN32)
set(LIB_EXTENSION "dll")
set(LIB_PREFIX "")
set(OS_NAME "windows")
elseif (APPLE)
set(LIB_EXTENSION "dylib")
set(LIB_PREFIX "lib")
set(OS_NAME "darwin")
else ()
set(LIB_EXTENSION "so")
set(LIB_PREFIX "lib")
set(OS_NAME "linux")
endif ()
# Define paths
set(CLIENTS_SHARED_LIB ${CMAKE_SOURCE_DIR}/cgo/build/${LIB_PREFIX}poktroll_clients)
set(LIBPOKTROLL_CLIENTS_SRC ${CMAKE_SOURCE_DIR}/src/context.c)
# Include directories
include_directories(
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/cgo/build
)
# Get list of Go source files
file(GLOB_RECURSE GO_SOURCES
"${CMAKE_SOURCE_DIR}/cgo/*.go"
)
# Determine Go architecture based on system
if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64")
set(GO_ARCH "arm64")
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
set(GO_ARCH "amd64")
else ()
set(GO_ARCH ${CMAKE_SYSTEM_PROCESSOR})
endif ()
# Determine Go OS
if (WIN32)
set(GO_OS "windows")
elseif (APPLE)
set(GO_OS "darwin")
else ()
set(GO_OS "linux")
endif ()
add_custom_command(
OUTPUT ${CLIENTS_SHARED_LIB}.${LIB_EXTENSION}
COMMAND ${CMAKE_COMMAND} -E env GOOS=${GO_OS} GOARCH=${GO_ARCH} CGO_ENABLED=1
${CMAKE_COMMAND} -E chdir ${CMAKE_SOURCE_DIR}/cgo
go build -v -o ${CLIENTS_SHARED_LIB}.${LIB_EXTENSION} -buildmode=c-shared .
DEPENDS ${GO_SOURCES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
VERBATIM
)
# Add custom target that depends on the output
add_custom_target(build_go_shared_lib
DEPENDS ${CLIENTS_SHARED_LIB}.${LIB_EXTENSION}
)
add_custom_target(poktroll_clients ALL
COMMAND ${CMAKE_COMMAND} -E copy ${CLIENTS_SHARED_LIB}.${LIB_EXTENSION} ${CMAKE_BINARY_DIR}/libpoktroll_clients.${LIB_EXTENSION}.${PROJECT_VERSION}
COMMAND ${CMAKE_COMMAND} -E create_symlink libpoktroll_clients.${LIB_EXTENSION}.${PROJECT_VERSION} ${CMAKE_BINARY_DIR}/libpoktroll_clients.${LIB_EXTENSION}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cgo/build/libpoktroll_clients.h ${CMAKE_BINARY_DIR}/libpoktroll_clients.h
DEPENDS ${CLIENTS_SHARED_LIB}.${LIB_EXTENSION}
)
# Set library properties for versioning and naming
if (WIN32)
set_target_properties(poktroll_clients PROPERTIES
VERSION ${PROJECT_VERSION}
PUBLIC_HEADER "${CMAKE_SOURCE_DIR}/include/context.h"
OUTPUT_NAME "poktroll_clients"
PREFIX ""
IMPORT_PREFIX ""
)
else ()
set_target_properties(poktroll_clients PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
PUBLIC_HEADER "${CMAKE_SOURCE_DIR}/include/context.h"
OUTPUT_NAME "poktroll_clients"
PREFIX "lib"
)
endif ()
# Include the test configuration only if BUILD_TESTS is enabled
if (BUILD_TESTS)
include(${CMAKE_SOURCE_DIR}/cmake/TestConfig.cmake)
endif ()
# Include the installer configuration
include(${CMAKE_SOURCE_DIR}/cmake/InstallerConfig.cmake)