mirror of
https://github.com/neovim/neovim.git
synced 2025-10-26 12:27:24 +00:00
CMake: Build third-party deps in Windows
- Update recipes to build with MSVC or cross compile in Unix with Mingw
- For recipes that need to be reused, wrap recipe in CMake function
using cmake_parse_arguments
- New directory .deps/host is the install root for HOST targets, the old
.deps/usr is used for TARGET
- In windows disable builds for terminal libraries and jemalloc
- Added cmake script CopyFilesGlob.cmake to copy files using glob
cmake -DFROM_GLOB=*.h -DTO=/usr/include -P CopyFilesGlob.cmake
- New CMake variables HOSTDEPS_* can be used in cross compile recipes.
Except when the target is UNIX, since that would break 32bit builds
in 64bit Unix systems using the Travis 32bit toolchain
This commit is contained in:
committed by
Florian Walch
parent
73dbd14283
commit
cca32e64cc
92
third-party/cmake/BuildMsgpack.cmake
vendored
92
third-party/cmake/BuildMsgpack.cmake
vendored
@@ -1,22 +1,74 @@
|
||||
include(CMakeParseArguments)
|
||||
|
||||
# BuildMsgpack(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...)
|
||||
# Reusable function to build msgpack, wraps ExternalProject_Add.
|
||||
# Failing to pass a command argument will result in no command being run
|
||||
function(BuildMsgpack)
|
||||
cmake_parse_arguments(_msgpack
|
||||
""
|
||||
""
|
||||
"CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND"
|
||||
${ARGN})
|
||||
|
||||
if(NOT _msgpack_CONFIGURE_COMMAND AND NOT _msgpack_BUILD_COMMAND
|
||||
AND NOT _msgpack_INSTALL_COMMAND)
|
||||
message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(msgpack
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${MSGPACK_URL}
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/msgpack
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/msgpack
|
||||
-DURL=${MSGPACK_URL}
|
||||
-DEXPECTED_SHA256=${MSGPACK_SHA256}
|
||||
-DTARGET=msgpack
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
CONFIGURE_COMMAND "${_msgpack_CONFIGURE_COMMAND}"
|
||||
BUILD_COMMAND "${_msgpack_BUILD_COMMAND}"
|
||||
INSTALL_COMMAND "${_msgpack_INSTALL_COMMAND}")
|
||||
endfunction()
|
||||
|
||||
set(MSGPACK_CONFIGURE_COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/msgpack
|
||||
-DMSGPACK_ENABLE_CXX=OFF
|
||||
-DMSGPACK_BUILD_TESTS=OFF
|
||||
-DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
|
||||
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||
"-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} -fPIC")
|
||||
|
||||
set(MSGPACK_BUILD_COMMAND ${CMAKE_COMMAND} --build .)
|
||||
set(MSGPACK_INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install)
|
||||
|
||||
if(MINGW AND CMAKE_CROSSCOMPILING)
|
||||
get_filename_component(TOOLCHAIN ${CMAKE_TOOLCHAIN_FILE} REALPATH)
|
||||
set(MSGPACK_CONFIGURE_COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/msgpack
|
||||
-DMSGPACK_ENABLE_CXX=OFF
|
||||
-DMSGPACK_BUILD_TESTS=OFF
|
||||
-DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
|
||||
# Pass toolchain
|
||||
-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN}
|
||||
# Hack to avoid -rdynamic in Mingw
|
||||
-DCMAKE_SHARED_LIBRARY_LINK_C_FLAGS="")
|
||||
elseif(MSVC)
|
||||
# Same as UNIX without fPIC
|
||||
set(MSGPACK_CONFIGURE_COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/msgpack
|
||||
-DMSGPACK_ENABLE_CXX=OFF
|
||||
-DMSGPACK_BUILD_TESTS=OFF
|
||||
-DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
|
||||
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||
"-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1}"
|
||||
# Make sure we use the same generator, otherwise we may
|
||||
# accidentaly end up using different MSVC runtimes
|
||||
-DCMAKE_GENERATOR=${CMAKE_GENERATOR}
|
||||
# Use static runtime
|
||||
-DCMAKE_C_FLAGS_DEBUG="-MTd"
|
||||
-DCMAKE_C_FLAGS_RELEASE="-MT")
|
||||
endif()
|
||||
|
||||
BuildMsgpack(CONFIGURE_COMMAND ${MSGPACK_CONFIGURE_COMMAND}
|
||||
BUILD_COMMAND ${MSGPACK_BUILD_COMMAND}
|
||||
INSTALL_COMMAND ${MSGPACK_INSTALL_COMMAND})
|
||||
|
||||
ExternalProject_Add(msgpack
|
||||
PREFIX ${DEPS_BUILD_DIR}
|
||||
URL ${MSGPACK_URL}
|
||||
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/msgpack
|
||||
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
||||
-DPREFIX=${DEPS_BUILD_DIR}
|
||||
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/msgpack
|
||||
-DURL=${MSGPACK_URL}
|
||||
-DEXPECTED_SHA256=${MSGPACK_SHA256}
|
||||
-DTARGET=msgpack
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
||||
CONFIGURE_COMMAND cmake ${DEPS_BUILD_DIR}/src/msgpack
|
||||
-DMSGPACK_ENABLE_CXX=OFF
|
||||
-DMSGPACK_BUILD_TESTS=OFF
|
||||
-DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
|
||||
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||
"-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} -fPIC"
|
||||
BUILD_COMMAND ${CMAKE_COMMAND} --build .
|
||||
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install)
|
||||
list(APPEND THIRD_PARTY_DEPS msgpack)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user