diff options
Diffstat (limited to 'third-party/cmake')
-rw-r--r-- | third-party/cmake/BuildJeMalloc.cmake | 2 | ||||
-rw-r--r-- | third-party/cmake/BuildLibuv.cmake | 8 | ||||
-rw-r--r-- | third-party/cmake/BuildLua.cmake | 85 | ||||
-rw-r--r-- | third-party/cmake/BuildLuarocks.cmake | 35 | ||||
-rw-r--r-- | third-party/cmake/BuildLuv.cmake | 90 | ||||
-rw-r--r-- | third-party/cmake/BuildMsgpack.cmake | 2 | ||||
-rw-r--r-- | third-party/cmake/PatchLuv.cmake | 29 |
7 files changed, 234 insertions, 17 deletions
diff --git a/third-party/cmake/BuildJeMalloc.cmake b/third-party/cmake/BuildJeMalloc.cmake index 8b0fac36a4..637aadaad9 100644 --- a/third-party/cmake/BuildJeMalloc.cmake +++ b/third-party/cmake/BuildJeMalloc.cmake @@ -19,6 +19,6 @@ ExternalProject_Add(jemalloc CONFIGURE_COMMAND ${DEPS_BUILD_DIR}/src/jemalloc/configure CC=${DEPS_C_COMPILER} --prefix=${DEPS_INSTALL_DIR} BUILD_COMMAND "" - INSTALL_COMMAND ${MAKE_PRG} install_include install_lib) + INSTALL_COMMAND ${MAKE_PRG} install_include install_lib_static) list(APPEND THIRD_PARTY_DEPS jemalloc) diff --git a/third-party/cmake/BuildLibuv.cmake b/third-party/cmake/BuildLibuv.cmake index 5debe5c071..1d8d69e64e 100644 --- a/third-party/cmake/BuildLibuv.cmake +++ b/third-party/cmake/BuildLibuv.cmake @@ -41,18 +41,18 @@ set(UNIX_CFGCMD sh ${DEPS_BUILD_DIR}/src/libuv/autogen.sh && CC=${DEPS_C_COMPILER}) if(UNIX) - BuildLibUv( + BuildLibuv( CONFIGURE_COMMAND ${UNIX_CFGCMD} INSTALL_COMMAND ${MAKE_PRG} V=1 install) elseif(MINGW AND CMAKE_CROSSCOMPILING) # Build libuv for the host - BuildLibUv(TARGET libuv_host + BuildLibuv(TARGET libuv_host CONFIGURE_COMMAND sh ${DEPS_BUILD_DIR}/src/libuv_host/autogen.sh && ${DEPS_BUILD_DIR}/src/libuv_host/configure --with-pic --disable-shared --prefix=${HOSTDEPS_INSTALL_DIR} CC=${HOST_C_COMPILER} INSTALL_COMMAND ${MAKE_PRG} V=1 install) # Build libuv for the target - BuildLibUv( + BuildLibuv( CONFIGURE_COMMAND ${UNIX_CFGCMD} --host=${CROSS_TARGET} INSTALL_COMMAND ${MAKE_PRG} V=1 install) @@ -70,7 +70,7 @@ elseif(WIN32 AND MSVC) else() set(VS_ARCH x64) endif() - BuildLibUv( + BuildLibuv( # By default this creates Debug builds BUILD_COMMAND set PYTHON=${PYTHON_EXECUTABLE} COMMAND ${DEPS_BUILD_DIR}/src/libuv/vcbuild.bat static debug ${VS_ARCH} INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/lib diff --git a/third-party/cmake/BuildLua.cmake b/third-party/cmake/BuildLua.cmake new file mode 100644 index 0000000000..1c5e2a186c --- /dev/null +++ b/third-party/cmake/BuildLua.cmake @@ -0,0 +1,85 @@ +include(CMakeParseArguments) + +# BuildLua(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) +# Reusable function to build lua, wraps ExternalProject_Add. +# Failing to pass a command argument will result in no command being run +function(BuildLua) + cmake_parse_arguments(_lua + "" + "" + "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" + ${ARGN}) + + if(NOT _lua_CONFIGURE_COMMAND AND NOT _lua_BUILD_COMMAND + AND NOT _lua_INSTALL_COMMAND) + message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") + endif() + + ExternalProject_Add(lua + PREFIX ${DEPS_BUILD_DIR} + URL ${LUA_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/lua + -DURL=${LUA_URL} + -DEXPECTED_SHA256=${LUA_SHA256} + -DTARGET=lua + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + CONFIGURE_COMMAND "${_lua_CONFIGURE_COMMAND}" + BUILD_IN_SOURCE 1 + BUILD_COMMAND "${_lua_BUILD_COMMAND}" + INSTALL_COMMAND "${_lua_INSTALL_COMMAND}") +endfunction() + +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(LUA_TARGET linux) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(LUA_TARGET macosx) +elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(LUA_TARGET freebsd) +elseif(CMAKE_SYSTEM_NAME MATCHES "BSD") + set(CMAKE_LUA_TARGET bsd) +elseif(SYSTEM_NAME MATCHES "^MINGW") + set(CMAKE_LUA_TARGET mingw) +else() + if(UNIX) + set(LUA_TARGET posix) + else() + set(LUA_TARGET generic) + endif() +endif() + +set(LUA_CONFIGURE_COMMAND + sed -e "/^CC/s@gcc@${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}@" + -e "/^CFLAGS/s@-O2@-g3@" + -e "s@-lreadline@@g" + -e "s@-lhistory@@g" + -e "s@-lncurses@@g" + -i ${DEPS_BUILD_DIR}/src/lua/src/Makefile && + sed -e "/#define LUA_USE_READLINE/d" + -i ${DEPS_BUILD_DIR}/src/lua/src/luaconf.h) +set(LUA_BUILD_COMMAND + ${MAKE_PRG} ${LUA_TARGET}) +set(LUA_INSTALL_COMMAND + ${MAKE_PRG} INSTALL_TOP=${DEPS_INSTALL_DIR} install) + +message(STATUS "Lua target is ${LUA_TARGET}") + +BuildLua(CONFIGURE_COMMAND ${LUA_CONFIGURE_COMMAND} + BUILD_COMMAND ${LUA_BUILD_COMMAND} + INSTALL_COMMAND ${LUA_INSTALL_COMMAND}) +list(APPEND THIRD_PARTY_DEPS lua) +add_dependencies(lua busted) + +set(BUSTED ${DEPS_INSTALL_DIR}/bin/busted) +set(BUSTED_LUA ${BUSTED}-lua) + +add_custom_command(OUTPUT ${BUSTED_LUA} + COMMAND sed -e 's/^exec/exec $$LUA_DEBUGGER/' -e 's/jit//g' < ${BUSTED} > ${BUSTED_LUA} && chmod +x ${BUSTED_LUA} + DEPENDS lua) +add_custom_target(busted-lua + DEPENDS ${DEPS_INSTALL_DIR}/bin/busted-lua) + +list(APPEND THIRD_PARTY_DEPS busted-lua) diff --git a/third-party/cmake/BuildLuarocks.cmake b/third-party/cmake/BuildLuarocks.cmake index a6126af789..1662f89b24 100644 --- a/third-party/cmake/BuildLuarocks.cmake +++ b/third-party/cmake/BuildLuarocks.cmake @@ -89,25 +89,26 @@ list(APPEND THIRD_PARTY_DEPS luarocks) if(USE_BUNDLED_LUAJIT) add_dependencies(luarocks luajit) + if(MINGW AND CMAKE_CROSSCOMPILING) + add_dependencies(luarocks luajit_host) + endif() endif() # Each target depends on the previous module, this serializes all calls to # luarocks since it is unhappy to be called in parallel. -add_custom_command(OUTPUT ${HOSTDEPS_LIB_DIR}/luarocks/rocks/lua-messagepack +add_custom_command(OUTPUT ${HOSTDEPS_LIB_DIR}/luarocks/rocks/mpack COMMAND ${LUAROCKS_BINARY} - ARGS build lua-messagepack ${LUAROCKS_BUILDARGS} + ARGS build mpack ${LUAROCKS_BUILDARGS} DEPENDS luarocks) -add_custom_target(lua-messagepack - DEPENDS ${HOSTDEPS_LIB_DIR}/luarocks/rocks/lua-messagepack) -list(APPEND THIRD_PARTY_DEPS lua-messagepack) +add_custom_target(mpack + DEPENDS ${HOSTDEPS_LIB_DIR}/luarocks/rocks/mpack) +list(APPEND THIRD_PARTY_DEPS mpack) -# Like before, depend on lua-messagepack to ensure serialization of install -# commands add_custom_command(OUTPUT ${HOSTDEPS_LIB_DIR}/luarocks/rocks/lpeg COMMAND ${LUAROCKS_BINARY} ARGS build lpeg ${LUAROCKS_BUILDARGS} - DEPENDS lua-messagepack) + DEPENDS mpack) add_custom_target(lpeg DEPENDS ${HOSTDEPS_LIB_DIR}/luarocks/rocks/lpeg) @@ -117,7 +118,7 @@ if(USE_BUNDLED_BUSTED) add_custom_command(OUTPUT ${HOSTDEPS_BIN_DIR}/busted COMMAND ${LUAROCKS_BINARY} ARGS build https://raw.githubusercontent.com/Olivine-Labs/busted/v2.0.rc11-0/busted-2.0.rc11-0.rockspec ${LUAROCKS_BUILDARGS} - DEPENDS luarocks) + DEPENDS lpeg) add_custom_target(busted DEPENDS ${HOSTDEPS_BIN_DIR}/busted) @@ -128,10 +129,22 @@ if(USE_BUNDLED_BUSTED) add_custom_target(luacheck DEPENDS ${HOSTDEPS_BIN_DIR}/luacheck) + set(LUV_DEPS luacheck luv-static) + if(MINGW AND CMAKE_CROSSCOMPILING) + set(LUV_DEPS ${LUV_DEPS} libuv_host) + endif() + add_custom_command(OUTPUT ${HOSTDEPS_LIB_DIR}/luarocks/rocks/luv + COMMAND ${LUAROCKS_BINARY} + ARGS make ${LUAROCKS_BUILDARGS} LIBUV_DIR=${HOSTDEPS_INSTALL_DIR} CFLAGS='-O0 -g3 -fPIC' + WORKING_DIRECTORY ${DEPS_BUILD_DIR}/src/luv + DEPENDS ${LUV_DEPS}) + add_custom_target(luv + DEPENDS ${HOSTDEPS_LIB_DIR}/luarocks/rocks/luv) + add_custom_command(OUTPUT ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client COMMAND ${LUAROCKS_BINARY} - ARGS build https://raw.githubusercontent.com/neovim/lua-client/0.0.1-14/nvim-client-0.0.1-14.rockspec ${LUAROCKS_BUILDARGS} LIBUV_DIR=${HOSTDEPS_INSTALL_DIR} - DEPENDS luacheck libuv) + ARGS build https://raw.githubusercontent.com/neovim/lua-client/0.0.1-24/nvim-client-0.0.1-24.rockspec ${LUAROCKS_BUILDARGS} + DEPENDS luv) add_custom_target(nvim-client DEPENDS ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client) diff --git a/third-party/cmake/BuildLuv.cmake b/third-party/cmake/BuildLuv.cmake new file mode 100644 index 0000000000..3060590bce --- /dev/null +++ b/third-party/cmake/BuildLuv.cmake @@ -0,0 +1,90 @@ +include(CMakeParseArguments) + +# BuildLuv(PATCH_COMMAND ... CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) +# Reusable function to build luv, wraps ExternalProject_Add. +# Failing to pass a command argument will result in no command being run +function(BuildLuv) + cmake_parse_arguments(_luv + "" + "" + "PATCH_COMMAND;CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" + ${ARGN}) + + if(NOT _luv_CONFIGURE_COMMAND AND NOT _luv_BUILD_COMMAND + AND NOT _luv_INSTALL_COMMAND) + message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") + endif() + + ExternalProject_Add(luv-static + PREFIX ${DEPS_BUILD_DIR} + URL ${LUV_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luv + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luv + -DURL=${LUV_URL} + -DEXPECTED_SHA256=${LUV_SHA256} + -DTARGET=luv + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + PATCH_COMMAND "${_luv_PATCH_COMMAND}" + CONFIGURE_COMMAND "${_luv_CONFIGURE_COMMAND}" + BUILD_COMMAND "${_luv_BUILD_COMMAND}" + INSTALL_COMMAND "${_luv_INSTALL_COMMAND}") +endfunction() + +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.0") + +set(LUV_PATCH_COMMAND + ${CMAKE_COMMAND} -DLUV_SRC_DIR=${LUV_SRC_DIR} + -P ${PROJECT_SOURCE_DIR}/cmake/PatchLuv.cmake) + +set(LUV_CONFIGURE_COMMAND_COMMON + ${CMAKE_COMMAND} ${LUV_SRC_DIR} + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + -DLUA_BUILD_TYPE=System + -DWITH_SHARED_LIBUV=ON + -DBUILD_SHARED_LIBS=OFF + -DBUILD_MODULE=OFF) + +if(MINGW AND CMAKE_CROSSCOMPILING) + get_filename_component(TOOLCHAIN ${CMAKE_TOOLCHAIN_FILE} REALPATH) + set(LUV_CONFIGURE_COMMAND + ${LUV_CONFIGURE_COMMAND_COMMON} + # Pass toolchain + -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} + "-DCMAKE_C_FLAGS:STRING=${LUV_INCLUDE_FLAGS} -D_WIN32_WINNT=0x0600" + # Hack to avoid -rdynamic in Mingw + -DCMAKE_SHARED_LIBRARY_LINK_C_FLAGS="") +elseif(MSVC) + set(LUV_CONFIGURE_COMMAND + ${LUV_CONFIGURE_COMMAND_COMMON} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + # Same as Unix without fPIC + "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} ${LUV_INCLUDE_FLAGS}" + # 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") +else() + set(LUV_CONFIGURE_COMMAND + ${LUV_CONFIGURE_COMMAND_COMMON} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} ${LUV_INCLUDE_FLAGS} -fPIC") +endif() + +set(LUV_BUILD_COMMAND ${CMAKE_COMMAND} --build .) +set(LUV_INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install) + +BuildLuv(PATCH_COMMAND ${LUV_PATCH_COMMAND} + CONFIGURE_COMMAND ${LUV_CONFIGURE_COMMAND} + BUILD_COMMAND ${LUV_BUILD_COMMAND} + INSTALL_COMMAND ${LUV_INSTALL_COMMAND}) + +list(APPEND THIRD_PARTY_DEPS luv-static) +add_dependencies(luv-static luajit) +add_dependencies(luv-static libuv) diff --git a/third-party/cmake/BuildMsgpack.cmake b/third-party/cmake/BuildMsgpack.cmake index f0d5fab676..4b6b361e85 100644 --- a/third-party/cmake/BuildMsgpack.cmake +++ b/third-party/cmake/BuildMsgpack.cmake @@ -53,7 +53,7 @@ if(MINGW AND CMAKE_CROSSCOMPILING) # Hack to avoid -rdynamic in Mingw -DCMAKE_SHARED_LIBRARY_LINK_C_FLAGS="") elseif(MSVC) - # Same as UNIX without fPIC + # Same as Unix without fPIC set(MSGPACK_CONFIGURE_COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/msgpack -DMSGPACK_ENABLE_CXX=OFF -DMSGPACK_BUILD_TESTS=OFF diff --git a/third-party/cmake/PatchLuv.cmake b/third-party/cmake/PatchLuv.cmake new file mode 100644 index 0000000000..96595a2f30 --- /dev/null +++ b/third-party/cmake/PatchLuv.cmake @@ -0,0 +1,29 @@ +# replace luv default rockspec with the alternate one under the "rockspecs" +# directory +file(GLOB LUV_ROCKSPEC RELATIVE ${LUV_SRC_DIR} ${LUV_SRC_DIR}/*.rockspec) +file(RENAME ${LUV_SRC_DIR}/rockspecs/${LUV_ROCKSPEC} ${LUV_SRC_DIR}/${LUV_ROCKSPEC}) + +# Some versions of mingw are missing defines required by luv dns module, add +# them now +set(LUV_SRC_DNS_C_DEFS +"#ifndef AI_NUMERICSERV +# define AI_NUMERICSERV 0x0008 +#endif +#ifndef AI_ALL +# define AI_ALL 0x00000100 +#endif +#ifndef AI_ADDRCONFIG +# define AI_ADDRCONFIG 0x00000400 +#endif +#ifndef AI_V4MAPPED +# define AI_V4MAPPED 0x00000800 +#endif") + +file(READ ${LUV_SRC_DIR}/src/dns.c LUV_SRC_DNS_C) +string(REPLACE + "\n#include <netdb.h>" + "\n#include <netdb.h>\n#else\n${LUV_SRC_DNS_C_DEFS}" + LUV_SRC_DNS_C_PATCHED + "${LUV_SRC_DNS_C}") +file(WRITE ${LUV_SRC_DIR}/src/dns.c "${LUV_SRC_DNS_C_PATCHED}") + |