diff options
author | Dundar Goc <gocdundar@gmail.com> | 2022-05-17 15:08:24 +0200 |
---|---|---|
committer | Dundar Goc <gocdundar@gmail.com> | 2022-05-17 17:07:45 +0200 |
commit | a4c0c0704308ee18e3a23954c07666f36cfbb930 (patch) | |
tree | 35564bf974d20d3e3d7e4490f491bcdd209503ac | |
parent | f49699737c9b24e1af52719974cf3bc770539ef9 (diff) | |
download | rneovim-a4c0c0704308ee18e3a23954c07666f36cfbb930.tar.gz rneovim-a4c0c0704308ee18e3a23954c07666f36cfbb930.tar.bz2 rneovim-a4c0c0704308ee18e3a23954c07666f36cfbb930.zip |
revert: "ci: remove mingw job #18580"
This partially reverts commit f8af81445bb48966d54f4a956842d935d009d275.
The mingw parts of cmake was removed to see if it was still used
(ref: https://github.com/neovim/neovim/pull/18580). It turns out it is,
so this will fix that.
Closes: https://github.com/neovim/neovim/issues/18597
-rw-r--r-- | CMakeLists.txt | 13 | ||||
-rw-r--r-- | cmake/FindLuaJit.cmake | 2 | ||||
-rw-r--r-- | third-party/CMakeLists.txt | 9 | ||||
-rw-r--r-- | third-party/cmake/BuildLibuv.cmake | 13 | ||||
-rw-r--r-- | third-party/cmake/BuildLua.cmake | 2 | ||||
-rw-r--r-- | third-party/cmake/BuildLuajit.cmake | 51 | ||||
-rw-r--r-- | third-party/cmake/BuildLuarocks.cmake | 16 | ||||
-rw-r--r-- | third-party/cmake/BuildLuv.cmake | 11 | ||||
-rw-r--r-- | third-party/cmake/BuildMsgpack.cmake | 13 |
9 files changed, 124 insertions, 6 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 19c81ffcbe..409face71c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,7 +108,14 @@ endif() option(ENABLE_LIBINTL "enable libintl" ON) option(ENABLE_LIBICONV "enable libiconv" ON) -option(ENABLE_LTO "enable link time optimization" ON) +if (MINGW) + # Disable LTO by default as it may not compile + # See https://github.com/Alexpux/MINGW-packages/issues/3516 + # and https://github.com/neovim/neovim/pull/8654#issuecomment-402316672 + option(ENABLE_LTO "enable link time optimization" OFF) +else() + option(ENABLE_LTO "enable link time optimization" ON) +endif() message(STATUS "CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") @@ -315,6 +322,10 @@ else() endif() endif() +if(MINGW) + # Use POSIX compatible stdio in Mingw + add_definitions(-D__USE_MINGW_ANSI_STDIO) +endif() if(WIN32) # Windows Vista is the minimum supported version add_definitions(-D_WIN32_WINNT=0x0600) diff --git a/cmake/FindLuaJit.cmake b/cmake/FindLuaJit.cmake index c904347f6a..72795afefd 100644 --- a/cmake/FindLuaJit.cmake +++ b/cmake/FindLuaJit.cmake @@ -17,6 +17,8 @@ find_path(LUAJIT_INCLUDE_DIR luajit.h if(MSVC) list(APPEND LUAJIT_NAMES lua51) +elseif(MINGW) + list(APPEND LUAJIT_NAMES libluajit libluajit-5.1) else() list(APPEND LUAJIT_NAMES luajit-5.1) endif() diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt index 36965a2e98..21d1f7906a 100644 --- a/third-party/CMakeLists.txt +++ b/third-party/CMakeLists.txt @@ -93,6 +93,15 @@ if(CMAKE_GENERATOR MATCHES "Makefiles") set(MAKE_PRG "$(MAKE)") endif() +if(MINGW AND CMAKE_GENERATOR MATCHES "Ninja") + find_program(MAKE_PRG NAMES mingw32-make) + if(NOT MAKE_PRG) + message(FATAL_ERROR "GNU Make for mingw32 is required to build the dependencies.") + else() + message(STATUS "Found GNU Make for mingw32: ${MAKE_PRG}") + endif() +endif() + if(CMAKE_C_COMPILER_ARG1) set(DEPS_C_COMPILER "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}") else() diff --git a/third-party/cmake/BuildLibuv.cmake b/third-party/cmake/BuildLibuv.cmake index 9d0707201f..42650308a8 100644 --- a/third-party/cmake/BuildLibuv.cmake +++ b/third-party/cmake/BuildLibuv.cmake @@ -45,11 +45,24 @@ if(UNIX) CONFIGURE_COMMAND ${UNIX_CFGCMD} MAKE=${MAKE_PRG} INSTALL_COMMAND ${MAKE_PRG} V=1 install) +elseif(MINGW AND CMAKE_CROSSCOMPILING) + # Build libuv for the 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( + CONFIGURE_COMMAND ${UNIX_CFGCMD} --host=${CROSS_TARGET} + 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() diff --git a/third-party/cmake/BuildLua.cmake b/third-party/cmake/BuildLua.cmake index 02f762234b..a40cb7dcb2 100644 --- a/third-party/cmake/BuildLua.cmake +++ b/third-party/cmake/BuildLua.cmake @@ -39,6 +39,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") set(LUA_TARGET freebsd) elseif(CMAKE_SYSTEM_NAME MATCHES "BSD") set(CMAKE_LUA_TARGET bsd) +elseif(CMAKE_SYSTEM_NAME MATCHES "^MINGW") + set(CMAKE_LUA_TARGET mingw) else() if(UNIX) set(LUA_TARGET posix) diff --git a/third-party/cmake/BuildLuajit.cmake b/third-party/cmake/BuildLuajit.cmake index 9c0a6cfba2..e02d7fe609 100644 --- a/third-party/cmake/BuildLuajit.cmake +++ b/third-party/cmake/BuildLuajit.cmake @@ -76,6 +76,57 @@ if(UNIX) CC=${DEPS_C_COMPILER} PREFIX=${DEPS_INSTALL_DIR} ${DEPLOYMENT_TARGET}) +elseif(MINGW AND CMAKE_CROSSCOMPILING) + + # Build luajit for the host + BuildLuaJit(TARGET luajit_host + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND ${INSTALLCMD_UNIX} + CC=${HOST_C_COMPILER} PREFIX=${HOSTDEPS_INSTALL_DIR}) + + # Build luajit for the target + BuildLuaJit( + # Similar to Unix + cross - fPIC + INSTALL_COMMAND + ${MAKE_PRG} PREFIX=${DEPS_INSTALL_DIR} + BUILDMODE=static install + TARGET_SYS=${CMAKE_SYSTEM_NAME} + CROSS=${CROSS_TARGET}- + HOST_CC=${HOST_C_COMPILER} HOST_CFLAGS=${HOST_C_FLAGS} + HOST_LDFLAGS=${HOST_EXE_LINKER_FLAGS} + FILE_T=luajit.exe + Q= + INSTALL_TSYMNAME=luajit.exe) + +elseif(MINGW) + + if(CMAKE_GENERATOR MATCHES "Ninja") + set(LUAJIT_MAKE_PRG ${MAKE_PRG}) + else() + set(LUAJIT_MAKE_PRG ${CMAKE_MAKE_PROGRAM}) + endif() + BuildLuaJit(BUILD_COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER} + PREFIX=${DEPS_INSTALL_DIR} + CFLAGS+=-DLUA_USE_APICHECK + CFLAGS+=-funwind-tables + CCDEBUG+=-g + BUILDMODE=static + # Build a DLL too + COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER} BUILDMODE=dynamic + + INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/luajit.exe ${DEPS_INSTALL_DIR}/bin + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_INSTALL_DIR}/bin + COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/lib + # Luarocks searches for lua51.dll in lib + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_INSTALL_DIR}/lib + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/libluajit.a ${DEPS_INSTALL_DIR}/lib + COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include/luajit-2.1 + COMMAND ${CMAKE_COMMAND} -DFROM_GLOB=${DEPS_BUILD_DIR}/src/luajit/src/*.h -DTO=${DEPS_INSTALL_DIR}/include/luajit-2.1 -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyFilesGlob.cmake + COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin/lua/jit + COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/luajit/src/jit ${DEPS_INSTALL_DIR}/bin/lua/jit + ) elseif(MSVC) BuildLuaJit( diff --git a/third-party/cmake/BuildLuarocks.cmake b/third-party/cmake/BuildLuarocks.cmake index 98783d533e..244d1d9fb8 100644 --- a/third-party/cmake/BuildLuarocks.cmake +++ b/third-party/cmake/BuildLuarocks.cmake @@ -56,7 +56,7 @@ endif() # Defaults to 5.1 for bundled LuaJIT/Lua. set(LUA_VERSION "5.1") -if(UNIX) +if(UNIX OR (MINGW AND CMAKE_CROSSCOMPILING)) if(USE_BUNDLED_LUAJIT) list(APPEND LUAROCKS_OPTS @@ -94,9 +94,13 @@ if(UNIX) CONFIGURE_COMMAND ${DEPS_BUILD_DIR}/src/luarocks/configure --prefix=${HOSTDEPS_INSTALL_DIR} --force-config ${LUAROCKS_OPTS} INSTALL_COMMAND ${MAKE_PRG} -j1 bootstrap) -elseif(MSVC) +elseif(MSVC OR MINGW) - set(COMPILER_FLAG /MSVC) + if(MINGW) + set(COMPILER_FLAG /MW) + elseif(MSVC) + set(COMPILER_FLAG /MSVC) + endif() # Ignore USE_BUNDLED_LUAJIT - always ON for native Win32 BuildLuarocks(INSTALL_COMMAND install.bat /FORCECONFIG /NOREG /NOADMIN /Q /F @@ -119,6 +123,9 @@ 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() elseif(USE_BUNDLED_LUA) add_dependencies(luarocks lua) endif() @@ -189,6 +196,9 @@ if(USE_BUNDLED_BUSTED) set(LUV_DEPS luacheck) if(USE_BUNDLED_LUV) list(APPEND LUV_DEPS luv-static lua-compat-5.3) + if(MINGW AND CMAKE_CROSSCOMPILING) + list(APPEND LUV_DEPS libuv_host) + endif() set(LUV_ARGS "CFLAGS=-O0 -g3 -fPIC") if(USE_BUNDLED_LIBUV) list(APPEND LUV_ARGS LIBUV_DIR=${HOSTDEPS_INSTALL_DIR}) diff --git a/third-party/cmake/BuildLuv.cmake b/third-party/cmake/BuildLuv.cmake index 001f5a325a..99822249c2 100644 --- a/third-party/cmake/BuildLuv.cmake +++ b/third-party/cmake/BuildLuv.cmake @@ -91,7 +91,16 @@ if(USE_BUNDLED_LIBUV) -DCMAKE_PREFIX_PATH=${DEPS_INSTALL_DIR}) endif() -if(MSVC) +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} diff --git a/third-party/cmake/BuildMsgpack.cmake b/third-party/cmake/BuildMsgpack.cmake index a89c1e34d0..f66a3bdd32 100644 --- a/third-party/cmake/BuildMsgpack.cmake +++ b/third-party/cmake/BuildMsgpack.cmake @@ -42,7 +42,18 @@ set(MSGPACK_CONFIGURE_COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/msgpack set(MSGPACK_BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}) set(MSGPACK_INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) -if(MSVC) +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_BUILD_TESTS=OFF + -DMSGPACK_BUILD_EXAMPLES=OFF + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + # Pass toolchain + -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + # 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_BUILD_TESTS=OFF |