Skip to content

Commit fbe20a9

Browse files
committed
Update build-system to support building wheel using manylinux1
As discussed in [1], starting with CMake 3.14.0, version of libuv bundled in CMake doesn't support being built with manylinux1. This commit explicitly downloads an older version of libuv that can be built on system with older kernel. To avoid link error like the following, -lrt linker flag is specified: /work/libuv-install/lib64/libuv_a.a(linux-core.c.o): In function `uv__hrtime': linux-core.c:(.text+0xb58): undefined reference to `clock_getres' linux-core.c:(.text+0xbab): undefined reference to `clock_gettime' /work/libuv-install/lib64/libuv_a.a(linux-core.c.o): In function `uv_uptime': linux-core.c:(.text+0xd91): undefined reference to `clock_gettime' linux-core.c:(.text+0xda7): undefined reference to `clock_gettime' collect2: error: ld returned 1 exit status See #78 [1] https://gitlab.kitware.com/cmake/cmake/issues/19311
1 parent 0f6336c commit fbe20a9

File tree

1 file changed

+62
-10
lines changed

1 file changed

+62
-10
lines changed

CMakeLists.txt

Lines changed: 62 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -155,53 +155,105 @@ if(CMakePythonDistributions_SUPERBUILD)
155155
# CMakeProject_BINARY_DIR
156156
#
157157
if(NOT DEFINED CMakeProject_BINARY_DIR)
158-
set(CMakeProject_BINARY_DIR ${CMAKE_BINARY_DIR}/CMakeProject-build)
159158

160-
set(_cmake_cache_args)
159+
# cache arguments common to LibUV and CMake
160+
set(_common_cache_args)
161161
if(DEFINED CMAKE_BUILD_TYPE)
162-
list(APPEND _cmake_cache_args
162+
list(APPEND _common_cache_args
163163
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
164164
)
165165
endif()
166-
if(DEFINED OPENSSL_ROOT_DIR)
167-
list(APPEND _cmake_cache_args
168-
-DOPENSSL_ROOT_DIR:PATH=${OPENSSL_ROOT_DIR}
169-
)
170-
message(STATUS "SuperBuild - CMakeProject-build - OPENSSL_ROOT_DIR: ${OPENSSL_ROOT_DIR}")
171-
endif()
172166
foreach(var_name IN ITEMS
173167
CMAKE_BUILD_PARALLEL_LEVEL
174168
CMAKE_JOB_POOLS
175169
CMAKE_JOB_POOL_COMPILE
176170
CMAKE_JOB_POOL_LINK
177171
)
178172
if(DEFINED ${var_name})
179-
list(APPEND _cmake_cache_args
173+
list(APPEND _common_cache_args
180174
-D${var_name}:STRING=${${var_name}}
181175
)
182176
message(STATUS "SuperBuild - CMakeProject-build - ${var_name}: ${${var_name}}")
183177
endif()
184178
endforeach()
185179

180+
set(_common_args )
181+
if(UNIX AND NOT APPLE)
182+
# Since CMAKE_C_FLAGS and CMAKE_EXE_LINKER_FLAGS arguments contain spaces, we generate an initial
183+
# cache file.
184+
file(WRITE "${CMAKE_BINARY_DIR}/initial-cache.txt"
185+
"set(CMAKE_C_FLAGS \"-D_POSIX_C_SOURCE=199506L -D_POSIX_SOURCE=1 -D_SVID_SOURCE=1 -D_BSD_SOURCE=1\" CACHE STRING \"Initial cache\" FORCE)
186+
set(CMAKE_EXE_LINKER_FLAGS \"-static-libstdc++ -static-libgcc -lrt\" CACHE STRING \"Initial cache\" FORCE)
187+
")
188+
set(_common_args
189+
CMAKE_ARGS -C "${CMAKE_BINARY_DIR}/initial-cache.txt"
190+
)
191+
endif()
192+
193+
# cache arguments for CMake
194+
set(_cmake_cache_args)
195+
196+
# libuv
197+
if(UNIX AND NOT APPLE)
198+
set(LibUV_SOURCE_DIR ${CMAKE_BINARY_DIR}/LibUV-src)
199+
set(LibUV_BINARY_DIR ${CMAKE_BINARY_DIR}/LibUV-build)
200+
set(LibUV_INSTALL_DIR ${CMAKE_BINARY_DIR}/LibUV-install)
201+
202+
ExternalProject_add(LibUV
203+
SOURCE_DIR ${LibUV_SOURCE_DIR}
204+
BINARY_DIR ${LibUV_BINARY_DIR}
205+
URL "https://dist.libuv.org/dist/v1.23.0/libuv-v1.23.0.tar.gz"
206+
URL_HASH "SHA256=d1746d324dea973d9f4c7ff40ba9cf60556c0bae9a92ad970568211b0e3bce27"
207+
${_common_args}
208+
CMAKE_CACHE_ARGS
209+
${_common_cache_args}
210+
-DCMAKE_INSTALL_PREFIX:PATH=${LibUV_INSTALL_DIR}
211+
USES_TERMINAL_CONFIGURE 1
212+
USES_TERMINAL_BUILD 1
213+
${ep_log_configure_build_args}
214+
INSTALL_DIR ${LibUV_INSTALL_DIR}
215+
)
216+
list(APPEND _cmake_cache_args
217+
-DCMAKE_USE_SYSTEM_LIBRARY_LIBUV:BOOL=ON
218+
-DLibUV_LIBRARY:FILEPATH=${LibUV_INSTALL_DIR}/lib64/libuv_a.a
219+
-DLibUV_INCLUDE_DIR:PATH=${LibUV_INSTALL_DIR}/include
220+
)
221+
else()
222+
cpd_ExternalProject_Add_Empty(LibUV "")
223+
endif()
224+
225+
# cmake
226+
set(CMakeProject_BINARY_DIR ${CMAKE_BINARY_DIR}/CMakeProject-build)
227+
228+
if(DEFINED OPENSSL_ROOT_DIR)
229+
list(APPEND _cmake_cache_args
230+
-DOPENSSL_ROOT_DIR:PATH=${OPENSSL_ROOT_DIR}
231+
)
232+
message(STATUS "SuperBuild - CMakeProject-build - OPENSSL_ROOT_DIR: ${OPENSSL_ROOT_DIR}")
233+
endif()
234+
186235
ExternalProject_add(CMakeProject-build
187236
SOURCE_DIR ${CMakeProject_SOURCE_DIR}
188237
BINARY_DIR ${CMakeProject_BINARY_DIR}
189238
DOWNLOAD_COMMAND ""
190239
UPDATE_COMMAND ""
191240
BUILD_ALWAYS 1
241+
${_common_args}
192242
CMAKE_CACHE_ARGS
193243
-DBUILD_CursesDialog:BOOL=OFF
194244
-DCMAKE_USE_OPENSSL:BOOL=ON
195245
-DBUILD_TESTING:BOOL=OFF
196246
-DCMake_INSTALL_DEPENDENCIES:BOOL=ON
197247
-DCMAKE_INSTALL_MESSAGE:STRING=NEVER
248+
${_common_cache_args}
198249
${_cmake_cache_args}
199250
USES_TERMINAL_CONFIGURE 1
200251
USES_TERMINAL_BUILD 1
201252
${ep_log_configure_build_args}
202253
INSTALL_COMMAND ""
203254
DEPENDS
204255
CMakeProject-src-download
256+
LibUV
205257
)
206258

207259
find_program(STRIP_EXECUTABLE strip)

0 commit comments

Comments
 (0)