forked from WasmEdge/WasmEdge
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHelper.cmake
195 lines (183 loc) · 5.73 KB
/
Helper.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
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
186
187
188
189
190
191
192
193
194
195
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: 2019-2022 Second State INC
set(WASMEDGE_INTERPROCEDURAL_OPTIMIZATION OFF)
if(CMAKE_BUILD_TYPE STREQUAL Release OR CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo)
if(NOT WASMEDGE_FORCE_DISABLE_LTO)
set(WASMEDGE_INTERPROCEDURAL_OPTIMIZATION ON)
endif()
if (CMAKE_GENERATOR STREQUAL Ninja)
if(CMAKE_COMPILER_IS_GNUCXX)
list(TRANSFORM CMAKE_C_COMPILE_OPTIONS_IPO REPLACE "^-flto$" "-flto=auto")
list(TRANSFORM CMAKE_CXX_COMPILE_OPTIONS_IPO REPLACE "^-flto$" "-flto=auto")
endif()
set(CMAKE_JOB_POOLS "link=2")
set(CMAKE_JOB_POOL_LINK link)
endif()
endif()
list(APPEND WASMEDGE_CFLAGS
-Wall
-Wextra
-Werror
-Wno-error=pedantic
)
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
list(APPEND WASMEDGE_CFLAGS -Wno-psabi)
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
list(APPEND WASMEDGE_CFLAGS -Wno-c++20-designator)
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
list(APPEND WASMEDGE_CFLAGS
-Wno-c99-extensions
-Wno-covered-switch-default
-Wno-documentation-unknown-command
-Wno-error=nested-anon-types
-Wno-error=old-style-cast
-Wno-error=unused-command-line-argument
-Wno-error=unknown-warning-option
-Wno-ctad-maybe-unsupported
-Wno-gnu-anonymous-struct
-Wno-keyword-macro
-Wno-language-extension-token
-Wno-newline-eof
-Wno-shadow-field-in-constructor
-Wno-signed-enum-bitfield
-Wno-switch-enum
-Wno-undefined-func-template
)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0.0)
list(APPEND WASMEDGE_CFLAGS
-Wno-error=return-std-move-in-c++11
)
else()
list(APPEND WASMEDGE_CFLAGS
-Wno-error=shadow-field
-Wno-reserved-identifier
)
endif()
endif()
if(WIN32)
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DNOMINMAX -D_ITERATOR_DEBUG_LEVEL=0)
list(APPEND WASMEDGE_CFLAGS
"/EHa"
-Wno-c++98-compat
-Wno-c++98-compat-pedantic
-Wno-exit-time-destructors
-Wno-global-constructors
-Wno-used-but-marked-unused
-Wno-nonportable-system-include-path
-Wno-float-equal
-Wno-declaration-after-statement
)
endif()
function(wasmedge_setup_target target)
set_target_properties(${target} PROPERTIES
CXX_STANDARD 17
CXX_EXTENSIONS OFF
CXX_VISIBILITY_PRESET hidden
ENABLE_EXPORTS ON
POSITION_INDEPENDENT_CODE ON
VISIBILITY_INLINES_HIDDEN ON
BUILD_RPATH_USE_ORIGIN ON
MACOSX_RPATH ON
INTERPROCEDURAL_OPTIMIZATION ${WASMEDGE_INTERPROCEDURAL_OPTIMIZATION}
)
target_compile_definitions(${target}
PUBLIC
FMT_DEPRECATED_OSTREAM
)
target_compile_options(${target}
PRIVATE
${WASMEDGE_CFLAGS}
)
endfunction()
function(wasmedge_add_library target)
add_library(${target} ${ARGN})
wasmedge_setup_target(${target})
endfunction()
function(wasmedge_add_executable target)
add_executable(${target} ${ARGN})
wasmedge_setup_target(${target})
file(RELATIVE_PATH rel /${CMAKE_INSTALL_BINDIR} /${CMAKE_INSTALL_LIBDIR})
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
set_target_properties(${target} PROPERTIES
INSTALL_RPATH "$ORIGIN/${rel}"
)
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
set_target_properties(${target} PROPERTIES
INSTALL_RPATH "@executable_path/${rel}"
)
endif()
endfunction()
# Generate the list of static libs to statically link LLVM.
if((WASMEDGE_LINK_LLVM_STATIC OR WASMEDGE_BUILD_STATIC_LIB) AND WASMEDGE_BUILD_AOT_RUNTIME)
# Pack the LLVM and lld static libraries.
find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_PATH}")
execute_process(
COMMAND ${LLVM_BINARY_DIR}/bin/llvm-config --libs --link-static
core lto native nativecodegen option passes support transformutils all-targets
OUTPUT_VARIABLE WASMEDGE_LLVM_LINK_LIBS_NAME
)
string(REPLACE "-l" "" WASMEDGE_LLVM_LINK_LIBS_NAME ${WASMEDGE_LLVM_LINK_LIBS_NAME})
string(REGEX REPLACE "[\r\n]" "" WASMEDGE_LLVM_LINK_LIBS_NAME ${WASMEDGE_LLVM_LINK_LIBS_NAME})
string(REPLACE " " "\;" WASMEDGE_LLVM_LINK_LIBS_NAME ${WASMEDGE_LLVM_LINK_LIBS_NAME})
set(WASMEDGE_LLVM_LINK_LIBS_NAME ${WASMEDGE_LLVM_LINK_LIBS_NAME})
list(APPEND WASMEDGE_LLVM_LINK_STATIC_COMPONENTS
${LLVM_LIBRARY_DIR}/liblldELF.a
${LLVM_LIBRARY_DIR}/liblldCommon.a
)
foreach(LIB_NAME IN LISTS WASMEDGE_LLVM_LINK_LIBS_NAME)
list(APPEND WASMEDGE_LLVM_LINK_STATIC_COMPONENTS
${LLVM_LIBRARY_DIR}/lib${LIB_NAME}.a
)
endforeach()
if(LLVM_VERSION_MAJOR LESS_EQUAL 13)
# For LLVM <= 13
list(APPEND WASMEDGE_LLVM_LINK_STATIC_COMPONENTS
${LLVM_LIBRARY_DIR}/liblldCore.a
${LLVM_LIBRARY_DIR}/liblldDriver.a
${LLVM_LIBRARY_DIR}/liblldReaderWriter.a
${LLVM_LIBRARY_DIR}/liblldYAML.a
)
else()
# For LLVM 14
list(APPEND WASMEDGE_LLVM_LINK_STATIC_COMPONENTS
${LLVM_LIBRARY_DIR}/liblldMinGW.a
${LLVM_LIBRARY_DIR}/liblldCOFF.a
${LLVM_LIBRARY_DIR}/liblldMachO.a
${LLVM_LIBRARY_DIR}/liblldWasm.a
)
endif()
list(APPEND WASMEDGE_LLVM_LINK_SHARED_COMPONENTS
dl
pthread
)
if(APPLE)
list(APPEND WASMEDGE_LLVM_LINK_SHARED_COMPONENTS
ncurses
z
xar
)
elseif(UNIX)
list(APPEND WASMEDGE_LLVM_LINK_SHARED_COMPONENTS
rt
)
if(WASMEDGE_BUILD_STATIC_LIB)
# Static library will forcefully turn off the LTO.
# Therefore, libz and libtinfo can be statically linked.
find_package(ZLIB REQUIRED)
get_filename_component(ZLIB_PATH "${ZLIB_LIBRARIES}" DIRECTORY)
list(APPEND WASMEDGE_LLVM_LINK_STATIC_COMPONENTS
${ZLIB_PATH}/libz.a
${ZLIB_PATH}/libtinfo.a
)
else()
# If not build static lib, dynamic link libz and libtinfo.
list(APPEND WASMEDGE_LLVM_LINK_SHARED_COMPONENTS
rt
z
tinfo
)
endif()
endif()
endif()