aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2022-08-12 16:59:40 +0100
committerGitHub <noreply@github.com>2022-08-12 16:59:40 +0100
commite23c5fda0a3fe385af615372c474d4dad3b74464 (patch)
tree49bc9bafeffc8108616513cd24db82acd80a0d45
parentb6a963bded749bb47c3b90398009da4ad1e18f68 (diff)
downloadrneovim-e23c5fda0a3fe385af615372c474d4dad3b74464.tar.gz
rneovim-e23c5fda0a3fe385af615372c474d4dad3b74464.tar.bz2
rneovim-e23c5fda0a3fe385af615372c474d4dad3b74464.zip
build libuv cmake (#19632)
Co-authored-by: Daniel Hahler <git@thequod.de>
-rw-r--r--cmake.deps/CMakeLists.txt8
-rw-r--r--cmake.deps/cmake/BuildLibuv.cmake99
-rw-r--r--cmake.deps/cmake/BuildLuarocks.cmake24
-rw-r--r--cmake.deps/cmake/BuildLuv.cmake10
-rw-r--r--cmake.deps/cmake/LibuvCMakeLists.txt33
-rw-r--r--cmake.deps/patches/libuv-disable-shared.patch117
-rw-r--r--cmake/FindLibUV.cmake2
7 files changed, 154 insertions, 139 deletions
diff --git a/cmake.deps/CMakeLists.txt b/cmake.deps/CMakeLists.txt
index f65111f9ff..72d26d5127 100644
--- a/cmake.deps/CMakeLists.txt
+++ b/cmake.deps/CMakeLists.txt
@@ -63,11 +63,9 @@ endif()
option(USE_EXISTING_SRC_DIR "Skip download of deps sources in case of existing source directory." OFF)
-if(WIN32)
- find_package(Git)
- if(NOT Git_FOUND)
- message(FATAL_ERROR "Git is required to apply patches for Windows.")
- endif()
+find_package(Git)
+if(NOT Git_FOUND)
+ message(FATAL_ERROR "Git is required to apply patches.")
endif()
if(UNIX)
diff --git a/cmake.deps/cmake/BuildLibuv.cmake b/cmake.deps/cmake/BuildLibuv.cmake
index ba5de38714..aee3b9a43f 100644
--- a/cmake.deps/cmake/BuildLibuv.cmake
+++ b/cmake.deps/cmake/BuildLibuv.cmake
@@ -1,77 +1,26 @@
-# BuildLibuv(TARGET targetname CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...)
-# Reusable function to build libuv, wraps ExternalProject_Add.
-# Failing to pass a command argument will result in no command being run
-function(BuildLibuv)
- cmake_parse_arguments(_libuv
- "BUILD_IN_SOURCE"
- "TARGET"
- "PATCH_COMMAND;CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND"
- ${ARGN})
-
- if(NOT _libuv_CONFIGURE_COMMAND AND NOT _libuv_BUILD_COMMAND
- AND NOT _libuv_INSTALL_COMMAND)
- message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND")
- endif()
- if(NOT _libuv_TARGET)
- set(_libuv_TARGET "libuv")
- endif()
-
- ExternalProject_Add(${_libuv_TARGET}
- PREFIX ${DEPS_BUILD_DIR}
- URL ${LIBUV_URL}
- DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libuv
- DOWNLOAD_COMMAND ${CMAKE_COMMAND}
- -DPREFIX=${DEPS_BUILD_DIR}
- -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libuv
- -DURL=${LIBUV_URL}
- -DEXPECTED_SHA256=${LIBUV_SHA256}
- -DTARGET=${_libuv_TARGET}
- -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
- PATCH_COMMAND "${_libuv_PATCH_COMMAND}"
- BUILD_IN_SOURCE ${_libuv_BUILD_IN_SOURCE}
- CONFIGURE_COMMAND "${_libuv_CONFIGURE_COMMAND}"
- BUILD_COMMAND "${_libuv_BUILD_COMMAND}"
- INSTALL_COMMAND "${_libuv_INSTALL_COMMAND}")
-endfunction()
-
-set(UNIX_CFGCMD sh ${DEPS_BUILD_DIR}/src/libuv/autogen.sh &&
- ${DEPS_BUILD_DIR}/src/libuv/configure --with-pic --disable-shared
- --prefix=${DEPS_INSTALL_DIR} --libdir=${DEPS_INSTALL_DIR}/lib
- CC=${DEPS_C_COMPILER})
-
-if(UNIX)
- BuildLibuv(
- CONFIGURE_COMMAND ${UNIX_CFGCMD} MAKE=${MAKE_PRG}
- INSTALL_COMMAND ${MAKE_PRG} V=1 install)
-
-elseif(WIN32)
-
- set(UV_OUTPUT_DIR ${DEPS_BUILD_DIR}/src/libuv/${CMAKE_BUILD_TYPE})
- if(MSVC)
- set(BUILD_SHARED ON)
- elseif(MINGW)
- set(BUILD_SHARED OFF)
- else()
- message(FATAL_ERROR "Trying to build libuv in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}")
- endif()
- BuildLibUv(BUILD_IN_SOURCE
- CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibuvCMakeLists.txt
- ${DEPS_BUILD_DIR}/src/libuv/CMakeLists.txt
- COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/libuv/CMakeLists.txt
- -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
- -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
- -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
- -DBUILD_SHARED_LIBS=${BUILD_SHARED}
- -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
- PATCH_COMMAND ${LIBUV_PATCH_COMMAND}
- BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}
- INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE})
-
-else()
- message(FATAL_ERROR "Trying to build libuv in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}")
-endif()
+ExternalProject_Add(libuv
+ PREFIX ${DEPS_BUILD_DIR}
+ URL ${LIBUV_URL}
+ CMAKE_ARGS
+ -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
+ -DCMAKE_INSTALL_LIBDIR=lib
+ -DBUILD_TESTING=OFF
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON
+ -DLIBUV_BUILD_SHARED=OFF
+ CMAKE_CACHE_ARGS
+ -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
+ DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libuv
+ DOWNLOAD_COMMAND ${CMAKE_COMMAND}
+ -DPREFIX=${DEPS_BUILD_DIR}
+ -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libuv
+ -DURL=${LIBUV_URL}
+ -DEXPECTED_SHA256=${LIBUV_SHA256}
+ -DTARGET=libuv
+ -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
+ PATCH_COMMAND
+ ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libuv init
+ COMMAND ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libuv apply --ignore-whitespace
+ ${CMAKE_CURRENT_SOURCE_DIR}/patches/libuv-disable-shared.patch)
list(APPEND THIRD_PARTY_DEPS libuv)
diff --git a/cmake.deps/cmake/BuildLuarocks.cmake b/cmake.deps/cmake/BuildLuarocks.cmake
index 6933d263f2..73f3331176 100644
--- a/cmake.deps/cmake/BuildLuarocks.cmake
+++ b/cmake.deps/cmake/BuildLuarocks.cmake
@@ -192,35 +192,21 @@ if(USE_BUNDLED_BUSTED)
# luv
set(LUV_DEPS luacheck)
if(USE_BUNDLED_LUV)
- list(APPEND LUV_DEPS luv-static lua-compat-5.3)
- set(LUV_ARGS "CFLAGS=-O0 -g3 -fPIC")
- if(USE_BUNDLED_LIBUV)
- list(APPEND LUV_ARGS LIBUV_DIR=${HOSTDEPS_INSTALL_DIR})
- # workaround for bug introduced in
- # https://github.com/luarocks/luarocks/commit/83126ba324846b754ffc5e0345341f01262b3f86
- if(MSVC)
- list(APPEND LUV_ARGS LIBUV_LIBDIR=${HOSTDEPS_INSTALL_DIR}/lib)
- endif()
- endif()
- SET(LUV_PRIVATE_ARGS LUA_COMPAT53_INCDIR=${DEPS_BUILD_DIR}/src/lua-compat-5.3/c-api)
- add_custom_command(OUTPUT ${ROCKS_DIR}/luv
- COMMAND ${LUAROCKS_BINARY}
- ARGS make ${LUAROCKS_BUILDARGS} ${LUV_ARGS} ${LUV_PRIVATE_ARGS}
- WORKING_DIRECTORY ${DEPS_BUILD_DIR}/src/luv
- DEPENDS ${LUV_DEPS})
+ set(NVIM_CLIENT_DEPS luacheck luv-static lua-compat-5.3)
else()
add_custom_command(OUTPUT ${ROCKS_DIR}/luv
COMMAND ${LUAROCKS_BINARY}
ARGS build luv ${LUV_VERSION} ${LUAROCKS_BUILDARGS}
- DEPENDS ${LUV_DEPS})
+ DEPENDS luacheck)
+ add_custom_target(luv DEPENDS ${ROCKS_DIR}/luv)
+ set(NVIM_CLIENT_DEPS luv)
endif()
- add_custom_target(luv DEPENDS ${ROCKS_DIR}/luv)
# nvim-client: https://github.com/neovim/lua-client
add_custom_command(OUTPUT ${ROCKS_DIR}/nvim-client
COMMAND ${LUAROCKS_BINARY}
ARGS build nvim-client 0.2.4-1 ${LUAROCKS_BUILDARGS}
- DEPENDS luv)
+ DEPENDS ${NVIM_CLIENT_DEPS})
add_custom_target(nvim-client DEPENDS ${ROCKS_DIR}/nvim-client)
list(APPEND THIRD_PARTY_DEPS busted luacheck nvim-client)
diff --git a/cmake.deps/cmake/BuildLuv.cmake b/cmake.deps/cmake/BuildLuv.cmake
index 6e9a333dc8..eb60a6496e 100644
--- a/cmake.deps/cmake/BuildLuv.cmake
+++ b/cmake.deps/cmake/BuildLuv.cmake
@@ -56,11 +56,6 @@ set(LUV_SRC_DIR ${DEPS_BUILD_DIR}/src/luv)
set(LUV_INCLUDE_FLAGS
"-I${DEPS_INSTALL_DIR}/include -I${DEPS_INSTALL_DIR}/include/luajit-2.1")
-# Replace luv default rockspec with the alternate one under the "rockspecs"
-# directory
-set(LUV_PATCH_COMMAND
- ${CMAKE_COMMAND} -E copy_directory ${LUV_SRC_DIR}/rockspecs ${LUV_SRC_DIR})
-
set(LUV_CONFIGURE_COMMAND_COMMON
${CMAKE_COMMAND} ${LUV_SRC_DIR}
-DCMAKE_GENERATOR=${CMAKE_GENERATOR}
@@ -90,7 +85,8 @@ endif()
if(USE_BUNDLED_LIBUV)
set(LUV_CONFIGURE_COMMAND_COMMON
${LUV_CONFIGURE_COMMAND_COMMON}
- -DCMAKE_PREFIX_PATH=${DEPS_INSTALL_DIR})
+ -DCMAKE_PREFIX_PATH=${DEPS_INSTALL_DIR}
+ -DLIBUV_LIBRARIES=uv_a)
endif()
if(MSVC)
@@ -127,6 +123,8 @@ BuildLuv(PATCH_COMMAND ${LUV_PATCH_COMMAND}
list(APPEND THIRD_PARTY_DEPS luv-static)
if(USE_BUNDLED_LUAJIT)
add_dependencies(luv-static luajit)
+elseif(USE_BUNDLED_LUA)
+ add_dependencies(luv-static lua)
endif()
if(USE_BUNDLED_LIBUV)
add_dependencies(luv-static libuv)
diff --git a/cmake.deps/cmake/LibuvCMakeLists.txt b/cmake.deps/cmake/LibuvCMakeLists.txt
deleted file mode 100644
index 0432319834..0000000000
--- a/cmake.deps/cmake/LibuvCMakeLists.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-cmake_minimum_required(VERSION 2.8.12)
-project(libuv LANGUAGES C)
-
-file(GLOB UV_SOURCES_COMMON src/*.c)
-file(GLOB UV_SOURCES_WIN src/win/*.c)
-
-add_library(uv ${UV_SOURCES_COMMON} ${UV_SOURCES_WIN})
-target_compile_definitions(uv PRIVATE WIN32_LEAN_AND_MEAN "_WIN32_WINNT=0x0600")
-target_link_libraries(uv iphlpapi psapi shell32 userenv ws2_32)
-target_include_directories(uv PUBLIC ./include PRIVATE ./src)
-if(BUILD_SHARED_LIBS)
- set_target_properties(uv PROPERTIES DEFINE_SYMBOL BUILDING_UV_SHARED)
-endif()
-
-install(FILES
- include/uv.h
- DESTINATION include)
-
-install(FILES
- include/uv/errno.h
- include/uv/threadpool.h
- include/uv/tree.h
- include/uv/version.h
- include/uv/win.h
- DESTINATION include/uv)
-
-include(GNUInstallDirs)
-install(TARGETS uv
- PUBLIC_HEADER
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
diff --git a/cmake.deps/patches/libuv-disable-shared.patch b/cmake.deps/patches/libuv-disable-shared.patch
new file mode 100644
index 0000000000..0e5722f4ba
--- /dev/null
+++ b/cmake.deps/patches/libuv-disable-shared.patch
@@ -0,0 +1,117 @@
+From 326a1845f924432332071d03d156b7df4af7c46f Mon Sep 17 00:00:00 2001
+From: Tim Tavlintsev <ttavlintsev@enttec.com>
+Date: Thu, 21 Jul 2022 16:42:21 +1000
+Subject: [PATCH] Add CMake option LIBUV_BUILD_SHARED to enable/disable shared
+ library build Fix #3637
+
+---
+ CMakeLists.txt | 66 +++++++++++++++++++++++++++++---------------------
+ 1 file changed, 38 insertions(+), 28 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2c42c3ff..a8e19980 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -28,6 +28,8 @@ cmake_dependent_option(LIBUV_BUILD_BENCH
+ "Build the benchmarks when building unit tests and we are the root project" ON
+ "LIBUV_BUILD_TESTS" OFF)
+
++option(LIBUV_BUILD_SHARED "Build shared lib" ON)
++
+ # Qemu Build
+ option(QEMU "build for qemu" OFF)
+ if(QEMU)
+@@ -390,25 +392,27 @@ if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|Linux|NetBSD|OpenBSD")
+ list(APPEND uv_test_libraries util)
+ endif()
+
+-add_library(uv SHARED ${uv_sources})
+-target_compile_definitions(uv
+- INTERFACE
+- USING_UV_SHARED=1
+- PRIVATE
+- BUILDING_UV_SHARED=1
+- ${uv_defines})
+-target_compile_options(uv PRIVATE ${uv_cflags})
+-target_include_directories(uv
+- PUBLIC
+- $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
+- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+- PRIVATE
+- $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>)
+-if(CMAKE_SYSTEM_NAME STREQUAL "OS390")
+- target_include_directories(uv PUBLIC $<BUILD_INTERFACE:${ZOSLIB_DIR}/include>)
+- set_target_properties(uv PROPERTIES LINKER_LANGUAGE CXX)
++if(LIBUV_BUILD_SHARED)
++ add_library(uv SHARED ${uv_sources})
++ target_compile_definitions(uv
++ INTERFACE
++ USING_UV_SHARED=1
++ PRIVATE
++ BUILDING_UV_SHARED=1
++ ${uv_defines})
++ target_compile_options(uv PRIVATE ${uv_cflags})
++ target_include_directories(uv
++ PUBLIC
++ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
++ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
++ PRIVATE
++ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>)
++ if(CMAKE_SYSTEM_NAME STREQUAL "OS390")
++ target_include_directories(uv PUBLIC $<BUILD_INTERFACE:${ZOSLIB_DIR}/include>)
++ set_target_properties(uv PROPERTIES LINKER_LANGUAGE CXX)
++ endif()
++ target_link_libraries(uv ${uv_libraries})
+ endif()
+-target_link_libraries(uv ${uv_libraries})
+
+ add_library(uv_a STATIC ${uv_sources})
+ target_compile_definitions(uv_a PRIVATE ${uv_defines})
+@@ -669,28 +673,34 @@ string(REPLACE ";" " " LIBS "${LIBS}")
+ file(STRINGS configure.ac configure_ac REGEX ^AC_INIT)
+ string(REGEX MATCH "([0-9]+)[.][0-9]+[.][0-9]+" PACKAGE_VERSION "${configure_ac}")
+ set(UV_VERSION_MAJOR "${CMAKE_MATCH_1}")
+-# The version in the filename is mirroring the behaviour of autotools.
+-set_target_properties(uv PROPERTIES
+- VERSION ${UV_VERSION_MAJOR}.0.0
+- SOVERSION ${UV_VERSION_MAJOR})
++
+ set(includedir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
+ set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
+ set(prefix ${CMAKE_INSTALL_PREFIX})
+-configure_file(libuv.pc.in libuv.pc @ONLY)
+ configure_file(libuv-static.pc.in libuv-static.pc @ONLY)
+
+ install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+ install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
+-install(FILES ${PROJECT_BINARY_DIR}/libuv.pc ${PROJECT_BINARY_DIR}/libuv-static.pc
++install(FILES ${PROJECT_BINARY_DIR}/libuv-static.pc
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
+-install(TARGETS uv EXPORT libuvConfig
+- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ install(TARGETS uv_a EXPORT libuvConfig
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ install(EXPORT libuvConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libuv)
+
++if(LIBUV_BUILD_SHARED)
++ # The version in the filename is mirroring the behaviour of autotools.
++ set_target_properties(uv PROPERTIES
++ VERSION ${UV_VERSION_MAJOR}.0.0
++ SOVERSION ${UV_VERSION_MAJOR})
++ configure_file(libuv.pc.in libuv.pc @ONLY)
++ install(FILES ${PROJECT_BINARY_DIR}/libuv.pc
++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
++ install(TARGETS uv EXPORT libuvConfig
++ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
++endif()
++
+ if(MSVC)
+ set(CMAKE_DEBUG_POSTFIX d)
+ endif()
+--
+2.37.0
+
diff --git a/cmake/FindLibUV.cmake b/cmake/FindLibUV.cmake
index 63babfea67..d6c4e9cbef 100644
--- a/cmake/FindLibUV.cmake
+++ b/cmake/FindLibUV.cmake
@@ -13,7 +13,7 @@ endif()
find_path(LIBUV_INCLUDE_DIR uv.h
HINTS ${PC_LIBUV_INCLUDEDIR} ${PC_LIBUV_INCLUDE_DIRS})
-list(APPEND LIBUV_NAMES uv)
+list(APPEND LIBUV_NAMES uv_a uv)
find_library(LIBUV_LIBRARY NAMES ${LIBUV_NAMES}
HINTS ${PC_LIBUV_LIBDIR} ${PC_LIBUV_LIBRARY_DIRS})