From f8af81445bb48966d54f4a956842d935d009d275 Mon Sep 17 00:00:00 2001 From: dundargoc <33953936+dundargoc@users.noreply.github.com> Date: Mon, 16 May 2022 00:59:58 +0200 Subject: [PATCH] ci: remove mingw job #18580 Unnecessary CI builds increase the change of spurious failures, which are costly noise. Of course, we should fix all legitimate bugs, but we also cannot micro-manage every platform, so there needs to be a clear motivation for the CI builds that we maintain. Reasons against maintaining a mingw CI job: 1. The windows mingw build is slow. 2. Failures: - https://github.com/neovim/neovim/issues/18494 - https://github.com/neovim/neovim/issues/18495 3. The mingw artifact is 10x bigger than the windows MSVC artifact: https://github.com/neovim/neovim/issues/10560 4. Our releases publish the MSVC (not mingw) artifact for Windows users: https://github.com/neovim/neovim/releases 5. Non-MSVCRT has limitations documented by libuv: http://docs.libuv.org/en/v1.x/process.html > On Windows file descriptors greater than 2 are available to the child process only if the child processes uses the MSVCRT runtime. Closes https://github.com/neovim/neovim/issues/18551 --- .github/workflows/ci.yml | 11 ++-- CMakeLists.txt | 13 +---- ci/build.ps1 | 75 +++++---------------------- cmake/FindLuaJit.cmake | 2 - third-party/CMakeLists.txt | 9 ---- third-party/cmake/BuildLibuv.cmake | 13 ----- third-party/cmake/BuildLua.cmake | 2 - third-party/cmake/BuildLuajit.cmake | 51 ------------------ third-party/cmake/BuildLuarocks.cmake | 16 ++---- third-party/cmake/BuildLuv.cmake | 11 +--- third-party/cmake/BuildMsgpack.cmake | 13 +---- 11 files changed, 22 insertions(+), 194 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c60473d541..9a98c6097c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -236,21 +236,16 @@ jobs: env: DEPS_BUILD_DIR: ${{ format('{0}/nvim-deps', github.workspace) }} DEPS_PREFIX: ${{ format('{0}/nvim-deps/usr', github.workspace) }} - - strategy: - fail-fast: false - matrix: - config: [ MINGW_64-gcov, MSVC_64 ] - name: windows (${{ matrix.config }}) + name: windows (MSVC_64) steps: - uses: actions/checkout@v2 - uses: actions/cache@v2 with: path: ${{ env.DEPS_BUILD_DIR }} - key: ${{ matrix.config }}-${{ hashFiles('third-party\**') }} + key: ${{ hashFiles('third-party\**') }} - name: Run CI run: powershell ci\build.ps1 env: - CONFIGURATION: ${{ matrix.config }} + CONFIGURATION: MSVC_64 diff --git a/CMakeLists.txt b/CMakeLists.txt index 409face71c..19c81ffcbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,14 +108,7 @@ endif() option(ENABLE_LIBINTL "enable libintl" ON) option(ENABLE_LIBICONV "enable libiconv" 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() +option(ENABLE_LTO "enable link time optimization" ON) message(STATUS "CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") @@ -322,10 +315,6 @@ 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/ci/build.ps1 b/ci/build.ps1 index 533e5804c9..99f66f7de2 100644 --- a/ci/build.ps1 +++ b/ci/build.ps1 @@ -40,55 +40,14 @@ if (-Not (Test-Path -PathType container $env:DEPS_BUILD_DIR)) { write-host "cache dir $($env:DEPS_BUILD_DIR) size: $(Get-ChildItem $env:DEPS_BUILD_DIR -recurse | Measure-Object -property length -sum | Select -expand sum)" } -if ($compiler -eq 'MINGW') { - if ($bits -eq 32) { - $arch = 'i686' - } - elseif ($bits -eq 64) { - $arch = 'x86_64' - } - if ($compileOption -eq 'gcov') { - $nvimCmakeVars['USE_GCOV'] = 'ON' - $uploadToCodecov = $true - $env:GCOV = "C:\msys64\mingw$bits\bin\gcov" +$cmakeGeneratorArgs = '/verbosity:normal' +$cmakeGenerator = 'Visual Studio 16 2019' - # Setup/build Lua coverage. - $env:USE_LUACOV = 1 - $env:BUSTED_ARGS = "--coverage" - } - # These are native MinGW builds, but they use the toolchain inside - # MSYS2, this allows using all the dependencies and tools available - # in MSYS2, but we cannot build inside the MSYS2 shell. - $cmakeGenerator = 'Ninja' - $cmakeGeneratorArgs = '-v' - $mingwPackages = @('ninja', 'cmake', 'diffutils').ForEach({ - "mingw-w64-$arch-$_" - }) - - # Add MinGW to the PATH - $env:PATH = "C:\msys64\mingw$bits\bin;$env:PATH" - - # Avoid pacman "warning" which causes non-zero return code. https://github.com/open62541/open62541/issues/2068 - & C:\msys64\usr\bin\mkdir -p /var/cache/pacman/pkg - - # Build third-party dependencies - C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm -Syu" ; exitIfFailed - # Update again in case updating pacman changes pacman.conf - C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm -Syu" ; exitIfFailed - C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm --needed -S $mingwPackages" ; exitIfFailed -} -elseif ($compiler -eq 'MSVC') { - $cmakeGeneratorArgs = '/verbosity:normal' - $cmakeGenerator = 'Visual Studio 16 2019' -} - -if ($compiler -eq 'MSVC') { - $installationPath = vswhere.exe -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath - if ($installationPath -and (test-path "$installationPath\Common7\Tools\vsdevcmd.bat")) { - & "${env:COMSPEC}" /s /c "`"$installationPath\Common7\Tools\vsdevcmd.bat`" -arch=x${bits} -no_logo && set" | foreach-object { - $name, $value = $_ -split '=', 2 - set-content env:\"$name" $value - } +$installationPath = vswhere.exe -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath +if ($installationPath -and (test-path "$installationPath\Common7\Tools\vsdevcmd.bat")) { + & "${env:COMSPEC}" /s /c "`"$installationPath\Common7\Tools\vsdevcmd.bat`" -arch=x${bits} -no_logo && set" | foreach-object { + $name, $value = $_ -split '=', 2 + set-content env:\"$name" $value } } @@ -111,14 +70,10 @@ function convertToCmakeArgs($vars) { } cd $env:DEPS_BUILD_DIR -if ($compiler -eq 'MSVC') { - if ($bits -eq 32) { - cmake -G $cmakeGenerator -A Win32 $(convertToCmakeArgs($depsCmakeVars)) "$buildDir/third-party/" ; exitIfFailed - } else { - cmake -G $cmakeGenerator -A x64 $(convertToCmakeArgs($depsCmakeVars)) "$buildDir/third-party/" ; exitIfFailed - } +if ($bits -eq 32) { + cmake -G $cmakeGenerator -A Win32 $(convertToCmakeArgs($depsCmakeVars)) "$buildDir/third-party/" ; exitIfFailed } else { - cmake -G $cmakeGenerator $(convertToCmakeArgs($depsCmakeVars)) "$buildDir/third-party/" ; exitIfFailed + cmake -G $cmakeGenerator -A x64 $(convertToCmakeArgs($depsCmakeVars)) "$buildDir/third-party/" ; exitIfFailed } cmake --build . --config $cmakeBuildType -- $cmakeGeneratorArgs ; exitIfFailed cd $buildDir @@ -126,14 +81,10 @@ cd $buildDir # Build Neovim mkdir build cd build -if ($compiler -eq 'MSVC') { - if ($bits -eq 32) { - cmake -G $cmakeGenerator -A Win32 $(convertToCmakeArgs($nvimCmakeVars)) .. ; exitIfFailed - } else { - cmake -G $cmakeGenerator -A x64 $(convertToCmakeArgs($nvimCmakeVars)) .. ; exitIfFailed - } +if ($bits -eq 32) { + cmake -G $cmakeGenerator -A Win32 $(convertToCmakeArgs($nvimCmakeVars)) .. ; exitIfFailed } else { - cmake -G $cmakeGenerator $(convertToCmakeArgs($nvimCmakeVars)) .. ; exitIfFailed + cmake -G $cmakeGenerator -A x64 $(convertToCmakeArgs($nvimCmakeVars)) .. ; exitIfFailed } cmake --build . --config $cmakeBuildType -- $cmakeGeneratorArgs ; exitIfFailed .\bin\nvim --version ; exitIfFailed diff --git a/cmake/FindLuaJit.cmake b/cmake/FindLuaJit.cmake index 72795afefd..c904347f6a 100644 --- a/cmake/FindLuaJit.cmake +++ b/cmake/FindLuaJit.cmake @@ -17,8 +17,6 @@ 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 21d1f7906a..36965a2e98 100644 --- a/third-party/CMakeLists.txt +++ b/third-party/CMakeLists.txt @@ -93,15 +93,6 @@ 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 42650308a8..9d0707201f 100644 --- a/third-party/cmake/BuildLibuv.cmake +++ b/third-party/cmake/BuildLibuv.cmake @@ -45,24 +45,11 @@ 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 a40cb7dcb2..02f762234b 100644 --- a/third-party/cmake/BuildLua.cmake +++ b/third-party/cmake/BuildLua.cmake @@ -39,8 +39,6 @@ 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 e02d7fe609..9c0a6cfba2 100644 --- a/third-party/cmake/BuildLuajit.cmake +++ b/third-party/cmake/BuildLuajit.cmake @@ -76,57 +76,6 @@ 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 244d1d9fb8..98783d533e 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 OR (MINGW AND CMAKE_CROSSCOMPILING)) +if(UNIX) if(USE_BUNDLED_LUAJIT) list(APPEND LUAROCKS_OPTS @@ -94,13 +94,9 @@ if(UNIX OR (MINGW AND CMAKE_CROSSCOMPILING)) CONFIGURE_COMMAND ${DEPS_BUILD_DIR}/src/luarocks/configure --prefix=${HOSTDEPS_INSTALL_DIR} --force-config ${LUAROCKS_OPTS} INSTALL_COMMAND ${MAKE_PRG} -j1 bootstrap) -elseif(MSVC OR MINGW) +elseif(MSVC) - if(MINGW) - set(COMPILER_FLAG /MW) - elseif(MSVC) - set(COMPILER_FLAG /MSVC) - endif() + set(COMPILER_FLAG /MSVC) # Ignore USE_BUNDLED_LUAJIT - always ON for native Win32 BuildLuarocks(INSTALL_COMMAND install.bat /FORCECONFIG /NOREG /NOADMIN /Q /F @@ -123,9 +119,6 @@ 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() @@ -196,9 +189,6 @@ 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 99822249c2..001f5a325a 100644 --- a/third-party/cmake/BuildLuv.cmake +++ b/third-party/cmake/BuildLuv.cmake @@ -91,16 +91,7 @@ if(USE_BUNDLED_LIBUV) -DCMAKE_PREFIX_PATH=${DEPS_INSTALL_DIR}) endif() -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) +if(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 f66a3bdd32..a89c1e34d0 100644 --- a/third-party/cmake/BuildMsgpack.cmake +++ b/third-party/cmake/BuildMsgpack.cmake @@ -42,18 +42,7 @@ 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(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) +if(MSVC) # Same as Unix without fPIC set(MSGPACK_CONFIGURE_COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/msgpack -DMSGPACK_BUILD_TESTS=OFF