mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 09:44:31 +00:00 
			
		
		
		
	Merge #6105 from justinmk/win32-bindeps
Windows: ship with common tools
This commit is contained in:
		@@ -5,6 +5,9 @@ configuration:
 | 
			
		||||
install: []
 | 
			
		||||
build_script:
 | 
			
		||||
- call .ci\build.bat
 | 
			
		||||
cache:
 | 
			
		||||
- C:\msys64\var\cache\pacman\pkg -> .ci\build.bat
 | 
			
		||||
- .deps -> third-party/CMakeLists.txt
 | 
			
		||||
artifacts:
 | 
			
		||||
- path: build/Neovim.zip
 | 
			
		||||
- path: build/bin/nvim.exe
 | 
			
		||||
 
 | 
			
		||||
@@ -299,25 +299,6 @@ if(WIN32)
 | 
			
		||||
  install(DIRECTORY ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    DESTINATION ${CMAKE_INSTALL_BINDIR})
 | 
			
		||||
 | 
			
		||||
  foreach(BIN win32yank.exe)
 | 
			
		||||
    unset(BIN_PATH CACHE)
 | 
			
		||||
    find_program(BIN_PATH ${BIN})
 | 
			
		||||
    if(NOT BIN_PATH)
 | 
			
		||||
      message(FATAL_ERROR "Unable to find external dependency ${BIN}")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    add_custom_target(external_${BIN}
 | 
			
		||||
      COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/windows_runtime_deps
 | 
			
		||||
      COMMAND ${CMAKE_COMMAND}
 | 
			
		||||
        "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
 | 
			
		||||
        -DBINARY="${BIN_PATH}"
 | 
			
		||||
        -DDST=${PROJECT_BINARY_DIR}/windows_runtime_deps
 | 
			
		||||
        -P ${PROJECT_SOURCE_DIR}/cmake/WindowsDllCopy.cmake
 | 
			
		||||
      COMMAND ${CMAKE_COMMAND} -E copy ${BIN_PATH} ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
      COMMENT "${BIN_PATH}")
 | 
			
		||||
    add_dependencies(nvim_runtime_deps "external_${BIN}")
 | 
			
		||||
  endforeach()
 | 
			
		||||
 | 
			
		||||
  add_custom_target(nvim_dll_deps DEPENDS nvim
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/windows_runtime_deps
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND}
 | 
			
		||||
@@ -326,6 +307,34 @@ if(WIN32)
 | 
			
		||||
      -DDST=${PROJECT_BINARY_DIR}/windows_runtime_deps
 | 
			
		||||
      -P ${PROJECT_SOURCE_DIR}/cmake/WindowsDllCopy.cmake)
 | 
			
		||||
  add_dependencies(nvim_runtime_deps nvim_dll_deps)
 | 
			
		||||
 | 
			
		||||
  add_custom_target(external_blobs
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/windows_runtime_deps/platforms
 | 
			
		||||
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/ca-bundle.crt"       ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/curl.exe"            ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/diff.exe"            ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/tee.exe"             ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/tidy.exe"            ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/win32yank.exe"       ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/D3Dcompiler_47.dll"  ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/libEGL.dll"          ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/libgcc_s_dw2-1.dll"  ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/libGLESV2.dll"       ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/libstdc++-6.dll"     ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/libwinpthread-1.dll" ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/nvim-qt.exe"         ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/Qt5Core.dll"         ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/Qt5Gui.dll"          ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/Qt5Network.dll"      ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/Qt5Svg.dll"          ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/Qt5Widgets.dll"      ${PROJECT_BINARY_DIR}/windows_runtime_deps/
 | 
			
		||||
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy "${DEPS_PREFIX}/bin/platforms/qwindows.dll" ${PROJECT_BINARY_DIR}/windows_runtime_deps/platforms/
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
  add_dependencies(nvim_runtime_deps external_blobs)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(CLANG_ASAN_UBSAN)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								third-party/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								third-party/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							@@ -120,9 +120,19 @@ set(LUV_SHA256 86a199403856018cd8e5529c8527450c83664a3d36f52d5253cbe909ea6c5a06)
 | 
			
		||||
set(GPERF_URL http://ftp.gnu.org/pub/gnu/gperf/gperf-3.0.4.tar.gz)
 | 
			
		||||
set(GPERF_SHA256 767112a204407e62dbc3106647cf839ed544f3cf5d0f0523aaa2508623aad63e)
 | 
			
		||||
 | 
			
		||||
# 7za.exe cat.exe curl.exe ca-bundle.crt diff.exe tee.exe tidy.exe xxd.exe
 | 
			
		||||
set(WINTOOLS_URL https://github.com/neovim/deps/raw/5d23093c66d63a8777244ed84de727c26d3f7b79/opt/win32tools.zip)
 | 
			
		||||
set(WINTOOLS_SHA256 40c7d1fbed47d8b1cf3b3cada6bfe0e0df06d99beb48775b4db27972d3ceafc1)
 | 
			
		||||
 | 
			
		||||
set(WINGUI_URL https://github.com/equalsraf/neovim-qt/releases/download/v0.2.4/neovim-qt.zip)
 | 
			
		||||
set(WINGUI_SHA256 95bbc852b69b12d0ef962a8410522010b453ba70f36ea379c548558d16abc2e6)
 | 
			
		||||
 | 
			
		||||
set(WIN32YANK_URL https://github.com/equalsraf/win32yank/releases/download/v0.0.2/win32yank.zip)
 | 
			
		||||
set(WIN32YANK_SHA256 78869bf68565607cda1b6a3d549e2487d59d6f0f16f9b003e123c0086f90309d)
 | 
			
		||||
 | 
			
		||||
set(WINPTY_URL https://github.com/rprichard/winpty/releases/download/0.4.2/winpty-0.4.2-msvc2015.zip)
 | 
			
		||||
set(WINPTY_SHA256 b465f2584ff394b3fe27c01aa1dcfc679583c1ee951d0e83de3f859d8b8305b8)
 | 
			
		||||
 | 
			
		||||
if(USE_BUNDLED_UNIBILIUM)
 | 
			
		||||
  include(BuildUnibilium)
 | 
			
		||||
endif()
 | 
			
		||||
@@ -170,8 +180,33 @@ endif()
 | 
			
		||||
include(GetBinaryDeps)
 | 
			
		||||
 | 
			
		||||
if(WIN32)
 | 
			
		||||
  GetBinaryDep(TARGET wintools
 | 
			
		||||
    INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory . ${DEPS_INSTALL_DIR}/bin)
 | 
			
		||||
 | 
			
		||||
  GetBinaryDep(TARGET win32yank
 | 
			
		||||
    INSTALL_COMMAND ${CMAKE_COMMAND} -E copy win32yank.exe ${DEPS_INSTALL_DIR}/bin)
 | 
			
		||||
 | 
			
		||||
  GetBinaryDep(TARGET wingui
 | 
			
		||||
    INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory bin ${DEPS_INSTALL_DIR}/bin
 | 
			
		||||
    COMMAND ${CMAKE_COMMAND} -E copy_directory share/nvim-qt/runtime ${DEPS_INSTALL_DIR}/share/nvim/runtime)
 | 
			
		||||
 | 
			
		||||
  include(TargetArch)
 | 
			
		||||
  if("${TARGET_ARCH}" STREQUAL "X86_64")
 | 
			
		||||
    set(TARGET_ARCH x64)
 | 
			
		||||
  elseif(TARGET_ARCH STREQUAL "X86")
 | 
			
		||||
    set(TARGET_ARCH ia32)
 | 
			
		||||
  endif()
 | 
			
		||||
  GetBinaryDep(TARGET winpty
 | 
			
		||||
    INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin
 | 
			
		||||
      COMMAND ${CMAKE_COMMAND} -DFROM_GLOB=${DEPS_BUILD_DIR}/src/winpty/${TARGET_ARCH}/bin/*
 | 
			
		||||
        -DTO=${DEPS_INSTALL_DIR}/bin/
 | 
			
		||||
        -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyFilesGlob.cmake
 | 
			
		||||
      COMMAND ${CMAKE_COMMAND} -DFROM_GLOB=${DEPS_BUILD_DIR}/src/winpty/include/*
 | 
			
		||||
        -DTO=${DEPS_INSTALL_DIR}/include/
 | 
			
		||||
        -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyFilesGlob.cmake
 | 
			
		||||
      COMMAND ${CMAKE_COMMAND} -DFROM_GLOB=${DEPS_BUILD_DIR}/src/winpty/${TARGET_ARCH}/lib/*
 | 
			
		||||
        -DTO=${DEPS_INSTALL_DIR}/lib/
 | 
			
		||||
        -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyFilesGlob.cmake)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
add_custom_target(clean-shared-libraries
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								third-party/cmake/BuildLibuv.cmake
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								third-party/cmake/BuildLibuv.cmake
									
									
									
									
										vendored
									
									
								
							@@ -75,16 +75,16 @@ elseif(WIN32 AND MSVC)
 | 
			
		||||
    message(FATAL_ERROR "Python2 is required to build libuv on windows, use -DPYTHON_EXECUTABLE to set a python interpreter")
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  string(FIND ${CMAKE_GENERATOR} Win64 VS_WIN64)
 | 
			
		||||
  if(VS_WIN64 EQUAL -1)
 | 
			
		||||
    set(VS_ARCH x86)
 | 
			
		||||
  else()
 | 
			
		||||
    set(VS_ARCH x64)
 | 
			
		||||
  include(TargetArch)
 | 
			
		||||
  if("${TARGET_ARCH}" STREQUAL "X86_64")
 | 
			
		||||
    set(TARGET_ARCH x64)
 | 
			
		||||
  elseif(TARGET_ARCH STREQUAL "X86")
 | 
			
		||||
    set(TARGET_ARCH x86)
 | 
			
		||||
  endif()
 | 
			
		||||
  string(TOLOWER ${CMAKE_BUILD_TYPE} LOWERCASE_BUILD_TYPE)
 | 
			
		||||
  set(UV_OUTPUT_DIR ${DEPS_BUILD_DIR}/src/libuv/${CMAKE_BUILD_TYPE})
 | 
			
		||||
  BuildLibUv(
 | 
			
		||||
    BUILD_COMMAND set PYTHON=${PYTHON_EXECUTABLE} COMMAND ${DEPS_BUILD_DIR}/src/libuv/vcbuild.bat shared ${LOWERCASE_BUILD_TYPE} ${VS_ARCH}
 | 
			
		||||
    BUILD_COMMAND set PYTHON=${PYTHON_EXECUTABLE} COMMAND ${DEPS_BUILD_DIR}/src/libuv/vcbuild.bat shared ${LOWERCASE_BUILD_TYPE} ${TARGET_ARCH}
 | 
			
		||||
    INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/lib
 | 
			
		||||
      COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin
 | 
			
		||||
      COMMAND ${CMAKE_COMMAND} -E copy ${UV_OUTPUT_DIR}/libuv.lib ${DEPS_INSTALL_DIR}/lib
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								third-party/cmake/TargetArch.cmake
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								third-party/cmake/TargetArch.cmake
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
# Sets TARGET_ARCH to a normalized name (X86 or X86_64).
 | 
			
		||||
# See https://github.com/axr/solar-cmake/blob/master/TargetArch.cmake
 | 
			
		||||
include(CheckSymbolExists)
 | 
			
		||||
 | 
			
		||||
# X86
 | 
			
		||||
check_symbol_exists("_M_IX86" "" T_M_IX86)
 | 
			
		||||
check_symbol_exists("__i386__" "" T_I386)
 | 
			
		||||
if(T_M_IX86 OR T_I386)
 | 
			
		||||
set(TARGET_ARCH "X86")
 | 
			
		||||
  return()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# X86_64
 | 
			
		||||
check_symbol_exists("_M_AMD64" "" T_M_AMD64)
 | 
			
		||||
check_symbol_exists("__x86_64__" "" T_X86_64)
 | 
			
		||||
check_symbol_exists("__amd64__" "" T_AMD64)
 | 
			
		||||
 | 
			
		||||
if(T_M_AMD64 OR T_X86_64 OR T_AMD64)
 | 
			
		||||
set(TARGET_ARCH "X86_64")
 | 
			
		||||
  return()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
message(FATAL_ERROR "Unknown target architecture")
 | 
			
		||||
		Reference in New Issue
	
	Block a user