Skip to content

Commit f2ef9ee

Browse files
authored
Cmake improvements (#4076)
- Utilizes the standard CMake variable BUILD_SHARED_LIBS to simplify the CMake configuration. - Allows the use of a single library definition for both static and shared library cases, improving maintainability and readability of the CMake configuration. - Install vmlib public header files - Installs the public header files for the vmlib target to the include/iwasm directory. - Install cmake package - Adds the necessary CMake configuration files (iwasmConfig.cmake and iwasmConfigVersion.cmake). - Configures the installation of these files to the appropriate directory (lib/cmake/iwasm). - Ensures compatibility with the same major version. - Improve windows product-mini CMakeLists.txt - Fix missing symbols when linking windows product-mini with shared vmlib - Improve Darwin product-mini CMakeLists.txt --------- Signed-off-by: Peter Tatrai <[email protected]>
1 parent d0e2a72 commit f2ef9ee

File tree

7 files changed

+164
-110
lines changed

7 files changed

+164
-110
lines changed

CMakeLists.txt

+39-59
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
cmake_minimum_required (VERSION 3.0)
55

6+
option(BUILD_SHARED_LIBS "Build using shared libraries" OFF)
7+
68
if(ESP_PLATFORM)
79
include (${COMPONENT_DIR}/build-scripts/esp-idf/wamr/CMakeLists.txt)
810
return()
@@ -18,13 +20,6 @@ if (NOT DEFINED WAMR_BUILD_PLATFORM)
1820
string (TOLOWER ${CMAKE_HOST_SYSTEM_NAME} WAMR_BUILD_PLATFORM)
1921
endif ()
2022

21-
if (NOT DEFINED WAMR_BUILD_STATIC)
22-
set (WAMR_BUILD_STATIC 1)
23-
endif ()
24-
if (NOT DEFINED WAMR_BUILD_SHARED)
25-
set (WAMR_BUILD_SHARED 1)
26-
endif ()
27-
2823
# Reset default linker flags
2924
set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
3025
set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
@@ -156,55 +151,40 @@ if (MSVC)
156151
add_definitions(-DCOMPILING_WASM_RUNTIME_API=1)
157152
endif ()
158153

159-
# STATIC LIBRARY
160-
if (WAMR_BUILD_STATIC)
161-
add_library(iwasm_static STATIC ${WAMR_RUNTIME_LIB_SOURCE})
162-
set_target_properties (iwasm_static PROPERTIES OUTPUT_NAME vmlib)
163-
target_include_directories(iwasm_static INTERFACE ${WAMR_ROOT_DIR}/core/iwasm/include)
164-
target_link_libraries (iwasm_static INTERFACE ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl ${CMAKE_THREAD_LIBS_INIT})
165-
if (WAMR_BUILD_WASM_CACHE EQUAL 1)
166-
target_link_libraries(iwasm_static INTERFACE boringssl_crypto)
167-
endif ()
168-
169-
if (MINGW)
170-
target_link_libraries (iwasm_static PRIVATE ws2_32)
171-
endif ()
172-
173-
if (WIN32)
174-
target_link_libraries(iwasm_static PRIVATE ntdll)
175-
endif()
176-
177-
set_version_info (iwasm_static)
178-
install (TARGETS iwasm_static ARCHIVE DESTINATION lib)
179-
endif ()
180-
181-
# SHARED LIBRARY
182-
if (WAMR_BUILD_SHARED)
183-
add_library (iwasm_shared SHARED ${WAMR_RUNTIME_LIB_SOURCE})
184-
set_target_properties (iwasm_shared PROPERTIES OUTPUT_NAME iwasm)
185-
target_include_directories(iwasm_shared INTERFACE ${WAMR_ROOT_DIR}/core/iwasm/include)
186-
target_link_libraries (iwasm_shared PUBLIC ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl ${CMAKE_THREAD_LIBS_INIT})
187-
if (WAMR_BUILD_WASM_CACHE EQUAL 1)
188-
target_link_libraries(iwasm_shared INTERFACE boringssl_crypto)
189-
endif ()
190-
191-
if (MINGW)
192-
target_link_libraries(iwasm_shared INTERFACE -lWs2_32 -lwsock32)
193-
target_link_libraries(iwasm_shared PRIVATE ws2_32)
194-
endif ()
195-
196-
if (WIN32)
197-
target_link_libraries(iwasm_shared PRIVATE ntdll)
198-
endif()
199-
200-
set_version_info (iwasm_shared)
201-
install (TARGETS iwasm_shared LIBRARY DESTINATION lib)
202-
endif ()
203-
204-
# HEADERS
205-
install (FILES
206-
${WAMR_ROOT_DIR}/core/iwasm/include/wasm_c_api.h
207-
${WAMR_ROOT_DIR}/core/iwasm/include/wasm_export.h
208-
${WAMR_ROOT_DIR}/core/iwasm/include/lib_export.h
209-
${WAMR_ROOT_DIR}/core/version.h
210-
DESTINATION include)
154+
add_library (vmlib ${WAMR_RUNTIME_LIB_SOURCE})
155+
set_target_properties (vmlib PROPERTIES OUTPUT_NAME iwasm)
156+
target_include_directories(vmlib INTERFACE
157+
$<BUILD_INTERFACE:${WAMR_ROOT_DIR}/core/iwasm/include>
158+
$<INSTALL_INTERFACE:include/iwasm>
159+
)
160+
161+
target_link_libraries (vmlib PUBLIC ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl ${CMAKE_THREAD_LIBS_INIT})
162+
if (WAMR_BUILD_WASM_CACHE EQUAL 1)
163+
target_link_libraries(vmlib INTERFACE boringssl_crypto)
164+
endif ()
165+
166+
if (MINGW)
167+
target_link_libraries(vmlib INTERFACE -lWs2_32 -lwsock32)
168+
target_link_libraries(vmlib PRIVATE ws2_32)
169+
endif ()
170+
171+
if (WIN32)
172+
target_link_libraries(vmlib PRIVATE ntdll)
173+
endif()
174+
175+
set (WAMR_PUBLIC_HEADERS
176+
${WAMR_ROOT_DIR}/core/iwasm/include/wasm_c_api.h
177+
${WAMR_ROOT_DIR}/core/iwasm/include/wasm_export.h
178+
${WAMR_ROOT_DIR}/core/iwasm/include/lib_export.h
179+
)
180+
set_target_properties (vmlib PROPERTIES PUBLIC_HEADER "${WAMR_PUBLIC_HEADERS}")
181+
182+
set_version_info (vmlib)
183+
184+
install (TARGETS vmlib
185+
EXPORT iwasmTargets
186+
LIBRARY DESTINATION lib
187+
PUBLIC_HEADER DESTINATION include/iwasm
188+
)
189+
190+
install_iwasm_package ()

build-scripts/config_common.cmake

+5
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ endif ()
134134
# Version
135135
include (${WAMR_ROOT_DIR}/build-scripts/version.cmake)
136136

137+
# Package
138+
include (${WAMR_ROOT_DIR}/build-scripts/package.cmake)
139+
137140
# Sanitizers
138141

139142
if (NOT DEFINED WAMR_BUILD_SANITIZER)
@@ -211,7 +214,9 @@ endif ()
211214

212215
message ("-- Build Configurations:")
213216
message (" Build as target ${WAMR_BUILD_TARGET}")
217+
message (" Build for platform ${WAMR_BUILD_PLATFORM}")
214218
message (" CMAKE_BUILD_TYPE " ${CMAKE_BUILD_TYPE})
219+
message (" BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
215220
################## running mode ##################
216221
if (WAMR_BUILD_INTERP EQUAL 1)
217222
message (" WAMR Interpreter enabled")

build-scripts/iwasmConfig.cmake.in

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copyright (C) 2019 Intel Corporation. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3+
4+
@PACKAGE_INIT@
5+
6+
include("${CMAKE_CURRENT_LIST_DIR}/iwasmTargets.cmake")

build-scripts/package.cmake

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Copyright (C) 2019 Intel Corporation. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3+
4+
function(install_iwasm_package)
5+
install (EXPORT iwasmTargets
6+
FILE iwasmTargets.cmake
7+
NAMESPACE iwasm::
8+
DESTINATION lib/cmake/iwasm
9+
)
10+
11+
include (CMakePackageConfigHelpers)
12+
configure_package_config_file (${CMAKE_CURRENT_FUNCTION_LIST_DIR}/iwasmConfig.cmake.in
13+
"${CMAKE_CURRENT_BINARY_DIR}/iwasmConfig.cmake"
14+
INSTALL_DESTINATION lib/cmake/iwasm
15+
)
16+
17+
write_basic_package_version_file(
18+
"${CMAKE_CURRENT_BINARY_DIR}/iwasmConfigVersion.cmake"
19+
VERSION ${WAMR_VERSION_MAJOR}.${WAMR_VERSION_MINOR}.${WAMR_VERSION_PATCH}
20+
COMPATIBILITY SameMajorVersion
21+
)
22+
23+
install (FILES
24+
"${CMAKE_CURRENT_BINARY_DIR}/iwasmConfig.cmake"
25+
"${CMAKE_CURRENT_BINARY_DIR}/iwasmConfigVersion.cmake"
26+
DESTINATION lib/cmake/iwasm
27+
)
28+
endfunction()

product-mini/platforms/darwin/CMakeLists.txt

+27-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
# Copyright (C) 2019 Intel Corporation. All rights reserved.
22
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
33

4-
cmake_minimum_required (VERSION 2.9)
4+
cmake_minimum_required (VERSION 3.14)
55

66
project (iwasm)
77

8+
option(BUILD_SHARED_LIBS "Build using shared libraries" OFF)
9+
810
set (WAMR_BUILD_PLATFORM "darwin")
911

1012
# Reset default linker flags
@@ -115,9 +117,6 @@ set (CMAKE_MACOSX_RPATH True)
115117
set (WAMR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
116118

117119
include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake)
118-
add_library(vmlib ${WAMR_RUNTIME_LIB_SOURCE})
119-
set_version_info (vmlib)
120-
121120
include (${SHARED_DIR}/utils/uncommon/shared_uncommon.cmake)
122121

123122
add_executable (iwasm main.c ${UNCOMMON_SHARED_SOURCE})
@@ -126,15 +125,33 @@ set_version_info (iwasm)
126125

127126
install (TARGETS iwasm DESTINATION bin)
128127

129-
target_link_libraries (iwasm vmlib ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl -lpthread)
128+
target_link_libraries (iwasm vmlib)
129+
130+
add_library (vmlib ${WAMR_RUNTIME_LIB_SOURCE})
131+
132+
set_version_info (vmlib)
130133

131-
add_library (libiwasm SHARED ${WAMR_RUNTIME_LIB_SOURCE})
134+
target_include_directories(vmlib INTERFACE
135+
$<INSTALL_INTERFACE:include/iwasm>
136+
)
132137

133-
install (TARGETS libiwasm DESTINATION lib)
138+
set (WAMR_PUBLIC_HEADERS
139+
${WAMR_ROOT_DIR}/core/iwasm/include/wasm_c_api.h
140+
${WAMR_ROOT_DIR}/core/iwasm/include/wasm_export.h
141+
${WAMR_ROOT_DIR}/core/iwasm/include/lib_export.h
142+
)
134143

135-
set_target_properties (libiwasm PROPERTIES OUTPUT_NAME iwasm)
144+
set_target_properties (vmlib PROPERTIES
145+
OUTPUT_NAME iwasm
146+
PUBLIC_HEADER "${WAMR_PUBLIC_HEADERS}"
147+
)
136148

137-
set_version_info (libiwasm)
149+
target_link_libraries (vmlib ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl -lpthread)
138150

139-
target_link_libraries (libiwasm ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl -lpthread)
151+
install (TARGETS vmlib
152+
EXPORT iwasmTargets
153+
DESTINATION lib
154+
PUBLIC_HEADER DESTINATION include/iwasm
155+
)
140156

157+
install_iwasm_package ()

product-mini/platforms/linux/CMakeLists.txt

+29-23
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ include(CheckPIESupported)
77

88
project (iwasm)
99

10+
option(BUILD_SHARED_LIBS "Build using shared libraries" OFF)
11+
1012
set (CMAKE_VERBOSE_MAKEFILE OFF)
1113

1214
set (WAMR_BUILD_PLATFORM "linux")
@@ -126,23 +128,14 @@ endif ()
126128
# if enable wasi-nn, both wasi-nn-backends and iwasm
127129
# need to use same WAMR (dynamic) libraries
128130
if (WAMR_BUILD_WASI_NN EQUAL 1)
129-
set (WAMR_BUILD_SHARED 1)
130-
endif ()
131-
132-
if (NOT DEFINED WAMR_BUILD_SHARED)
133-
set (WAMR_BUILD_SHARED 0)
134-
elseif (WAMR_BUILD_SHARED EQUAL 1)
135-
message ("build WAMR as shared libraries")
131+
set (BUILD_SHARED_LIBS ON)
136132
endif ()
137133

138134
set (WAMR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
139135

140136
include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake)
141137

142138
check_pie_supported()
143-
add_library(vmlib ${WAMR_RUNTIME_LIB_SOURCE})
144-
set_target_properties (vmlib PROPERTIES POSITION_INDEPENDENT_CODE ON)
145-
set_version_info (vmlib)
146139

147140
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
148141

@@ -175,23 +168,36 @@ set_version_info (iwasm)
175168

176169
set_target_properties (iwasm PROPERTIES POSITION_INDEPENDENT_CODE ON)
177170

178-
target_link_libraries(iwasm
179-
$<$<BOOL:${WAMR_BUILD_SHARED}>:libiwasm> $<$<NOT:$<BOOL:${WAMR_BUILD_SHARED}>>:vmlib>
180-
${LLVM_AVAILABLE_LIBS}
181-
${UV_A_LIBS}
182-
-lm
183-
-ldl
184-
-lpthread
185-
)
171+
target_link_libraries(iwasm vmlib)
186172

187173
install (TARGETS iwasm DESTINATION bin)
188174

189-
add_library (libiwasm SHARED ${WAMR_RUNTIME_LIB_SOURCE})
175+
add_library (vmlib ${WAMR_RUNTIME_LIB_SOURCE})
190176

191-
set_version_info (libiwasm)
177+
set_version_info (vmlib)
192178

193-
install (TARGETS libiwasm DESTINATION lib)
179+
target_include_directories(vmlib INTERFACE
180+
$<INSTALL_INTERFACE:include/iwasm>
181+
)
194182

195-
set_target_properties (libiwasm PROPERTIES OUTPUT_NAME iwasm)
183+
set (WAMR_PUBLIC_HEADERS
184+
${WAMR_ROOT_DIR}/core/iwasm/include/wasm_c_api.h
185+
${WAMR_ROOT_DIR}/core/iwasm/include/wasm_export.h
186+
${WAMR_ROOT_DIR}/core/iwasm/include/lib_export.h
187+
)
188+
189+
set_target_properties (vmlib PROPERTIES
190+
OUTPUT_NAME iwasm
191+
PUBLIC_HEADER "${WAMR_PUBLIC_HEADERS}"
192+
POSITION_INDEPENDENT_CODE ON
193+
)
194+
195+
target_link_libraries (vmlib ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl -lpthread)
196+
197+
install (TARGETS vmlib
198+
EXPORT iwasmTargets
199+
DESTINATION lib
200+
PUBLIC_HEADER DESTINATION include/iwasm
201+
)
196202

197-
target_link_libraries (libiwasm ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl -lpthread)
203+
install_iwasm_package ()

0 commit comments

Comments
 (0)