mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-11-28 18:19:07 +08:00
47633daa65
Avoid wrong use of popular but ambiguous variables (`WIN32` etc.) in scripts and portfiles by detection in CI. Sometimes the variables are used wrongly, and sometimes this isn't caught in PR review. This PR tries to catch those variables (when in the active code path in script mode). [This can happen to every contributor](https://github.com/microsoft/vcpkg/pull/34356#discussion_r1360074122), even if he/she knows the rules ... vcpkg is raising the bar higher than usual, having to deal with targets and hosts even in script mode. (`b2-options.cmake` (boost fragment) shows where we get if we don't pay attention: the same code being used in script mode (`WIN32` meaning host) and in project mode (`WIN32` meaning target).) The new check doesn't break any user builds because it relies on command line options. However it changes the ABI hashes.
187 lines
7.8 KiB
CMake
187 lines
7.8 KiB
CMake
if (VCPKG_TARGET_IS_LINUX)
|
|
message(WARNING "Building with a gcc version less than 6.1 is not supported.")
|
|
message(WARNING "${PORT} currently requires the following libraries from the system package manager:\n libx11-dev\n mesa-common-dev\n libxi-dev\n libxext-dev\n\nThese can be installed on Ubuntu systems via apt-get install libx11-dev mesa-common-dev libxi-dev libxext-dev.")
|
|
endif()
|
|
|
|
if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
|
|
set(ANGLE_CPU_BITNESS ANGLE_IS_32_BIT_CPU)
|
|
elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
|
|
set(ANGLE_CPU_BITNESS ANGLE_IS_64_BIT_CPU)
|
|
elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
|
|
set(ANGLE_CPU_BITNESS ANGLE_IS_32_BIT_CPU)
|
|
elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
|
|
set(ANGLE_CPU_BITNESS ANGLE_IS_64_BIT_CPU)
|
|
else()
|
|
message(FATAL_ERROR "Unsupported architecture: ${VCPKG_TARGET_ARCHITECTURE}")
|
|
endif()
|
|
|
|
set(ANGLE_USE_D3D11_COMPOSITOR_NATIVE_WINDOW "OFF")
|
|
if (VCPKG_TARGET_IS_WINDOWS OR VCPKG_TARGET_IS_UWP)
|
|
set(ANGLE_BUILDSYSTEM_PORT "Win")
|
|
if (NOT VCPKG_TARGET_IS_MINGW)
|
|
set(ANGLE_USE_D3D11_COMPOSITOR_NATIVE_WINDOW "ON")
|
|
endif()
|
|
elseif (VCPKG_TARGET_IS_OSX)
|
|
set(ANGLE_BUILDSYSTEM_PORT "Mac")
|
|
elseif (VCPKG_TARGET_IS_LINUX)
|
|
set(ANGLE_BUILDSYSTEM_PORT "Linux")
|
|
else()
|
|
# default other platforms to "Linux" config
|
|
set(ANGLE_BUILDSYSTEM_PORT "Linux")
|
|
endif()
|
|
|
|
# chromium/5414
|
|
set(ANGLE_COMMIT aa63ea230e0c507e7b4b164a30e502fb17168c17)
|
|
set(ANGLE_VERSION 5414)
|
|
set(ANGLE_SHA512 a3b55d4b484e1e9ece515d60af1d47a80a0576b198d9a2397e4e68b16efd83468dcdfadc98dae57ff17f01d02d74526f8b59fdf00661b70a45b6dd266e5ffe38)
|
|
set(ANGLE_THIRDPARTY_ZLIB_COMMIT 44d9b490c721abdb923d5c6c23ac211e45ffb1a5)
|
|
|
|
vcpkg_from_github(
|
|
OUT_SOURCE_PATH SOURCE_PATH
|
|
REPO google/angle
|
|
REF ${ANGLE_COMMIT}
|
|
SHA512 ${ANGLE_SHA512}
|
|
# On update check headers against opengl-registry
|
|
PATCHES
|
|
001-fix-uwp.patch
|
|
002-fix-builder-error.patch
|
|
003-fix-mingw.patch
|
|
)
|
|
|
|
# Generate angle_commit.h
|
|
set(ANGLE_COMMIT_HASH_SIZE 12)
|
|
string(SUBSTRING "${ANGLE_COMMIT}" 0 ${ANGLE_COMMIT_HASH_SIZE} ANGLE_COMMIT_HASH)
|
|
set(ANGLE_COMMIT_DATE "invalid-date")
|
|
set(ANGLE_REVISION "${ANGLE_VERSION}")
|
|
configure_file("${CMAKE_CURRENT_LIST_DIR}/angle_commit.h.in" "${SOURCE_PATH}/angle_commit.h" @ONLY)
|
|
configure_file("${CMAKE_CURRENT_LIST_DIR}/angle_commit.h.in" "${SOURCE_PATH}/src/common/angle_commit.h" @ONLY)
|
|
file(COPY "${CMAKE_CURRENT_LIST_DIR}/unofficial-angle-config.cmake" DESTINATION "${SOURCE_PATH}")
|
|
|
|
set(ANGLE_WEBKIT_BUILDSYSTEM_COMMIT "bb1da00b9ba878d228a5e9834a0767dbca2fee43")
|
|
|
|
# Download WebKit gni-to-cmake.py conversion script
|
|
vcpkg_download_distfile(GNI_TO_CMAKE_PY
|
|
URLS "https://github.com/WebKit/WebKit/raw/${ANGLE_WEBKIT_BUILDSYSTEM_COMMIT}/Source/ThirdParty/ANGLE/gni-to-cmake.py"
|
|
FILENAME "gni-to-cmake.py"
|
|
SHA512 9da35caf2db2e849d6cc85721ba0b77eee06b6f65a7c5314fb80483db4949b0b6e9bf4b2d4fc63613665629b24e9b052e03fb1451b09313d881297771a4f2736
|
|
)
|
|
|
|
# Generate CMake files from GN / GNI files
|
|
vcpkg_find_acquire_program(PYTHON3)
|
|
|
|
set(_root_gni_files_to_convert
|
|
"compiler.gni Compiler.cmake"
|
|
"libGLESv2.gni GLESv2.cmake"
|
|
)
|
|
set(_renderer_gn_files_to_convert
|
|
"libANGLE/renderer/d3d/BUILD.gn D3D.cmake"
|
|
"libANGLE/renderer/gl/BUILD.gn GL.cmake"
|
|
"libANGLE/renderer/metal/BUILD.gn Metal.cmake"
|
|
)
|
|
|
|
foreach(_root_gni_file IN LISTS _root_gni_files_to_convert)
|
|
separate_arguments(_file_values UNIX_COMMAND "${_root_gni_file}")
|
|
list(GET _file_values 0 _src_gn_file)
|
|
list(GET _file_values 1 _dst_file)
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${PYTHON3}" "${GNI_TO_CMAKE_PY}" "src/${_src_gn_file}" "${_dst_file}"
|
|
WORKING_DIRECTORY "${SOURCE_PATH}"
|
|
LOGNAME "gni-to-cmake-${_dst_file}-${TARGET_TRIPLET}"
|
|
)
|
|
endforeach()
|
|
|
|
foreach(_renderer_gn_file IN LISTS _renderer_gn_files_to_convert)
|
|
separate_arguments(_file_values UNIX_COMMAND "${_renderer_gn_file}")
|
|
list(GET _file_values 0 _src_gn_file)
|
|
list(GET _file_values 1 _dst_file)
|
|
get_filename_component(_src_dir "${_src_gn_file}" DIRECTORY)
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${PYTHON3}" "${GNI_TO_CMAKE_PY}" "src/${_src_gn_file}" "${_dst_file}" --prepend "src/${_src_dir}/"
|
|
WORKING_DIRECTORY "${SOURCE_PATH}"
|
|
LOGNAME "gni-to-cmake-${_dst_file}-${TARGET_TRIPLET}"
|
|
)
|
|
endforeach()
|
|
|
|
# Fetch additional CMake files from WebKit ANGLE buildsystem
|
|
vcpkg_download_distfile(WK_ANGLE_INCLUDE_CMAKELISTS
|
|
URLS "https://github.com/WebKit/WebKit/raw/${ANGLE_WEBKIT_BUILDSYSTEM_COMMIT}/Source/ThirdParty/ANGLE/include/CMakeLists.txt"
|
|
FILENAME "include_CMakeLists.txt"
|
|
SHA512 a7ddf3c6df7565e232f87ec651cc4fd84240b8866609e23e3e6e41d22532fd34c70e0f3b06120fd3d6d930ca29c1d0d470d4c8cb7003a66f8c1a840a42f32949
|
|
)
|
|
configure_file("${WK_ANGLE_INCLUDE_CMAKELISTS}" "${SOURCE_PATH}/include/CMakeLists.txt" COPYONLY)
|
|
|
|
vcpkg_download_distfile(WK_ANGLE_CMAKE_WEBKITCOMPILERFLAGS
|
|
URLS "https://github.com/WebKit/WebKit/raw/${ANGLE_WEBKIT_BUILDSYSTEM_COMMIT}/Source/cmake/WebKitCompilerFlags.cmake"
|
|
FILENAME "WebKitCompilerFlags.cmake"
|
|
SHA512 63f981694ae37d4c4ca4c34e2bf62b4d4602b6a1a660851304fa7a6ee834fc58fa6730eeb41ef4e075550f3c8b675823d4d00bdcd72ca869c6d5ab11196b33bb
|
|
)
|
|
file(COPY "${WK_ANGLE_CMAKE_WEBKITCOMPILERFLAGS}" DESTINATION "${SOURCE_PATH}/cmake")
|
|
|
|
vcpkg_download_distfile(WK_ANGLE_CMAKE_WEBKITMACROS
|
|
URLS "https://github.com/WebKit/WebKit/raw/${ANGLE_WEBKIT_BUILDSYSTEM_COMMIT}/Source/cmake/WebKitMacros.cmake"
|
|
FILENAME "WebKitMacros.cmake"
|
|
SHA512 0d126b1d1b0ca995c2ea6e51c73326db363f560f3f07912ce58c7c022d9257d27b963dac56aee0e9604ca7a3d74c5aa9f0451c243fec922fb485dd2253685ab6
|
|
)
|
|
file(COPY "${WK_ANGLE_CMAKE_WEBKITMACROS}" DESTINATION "${SOURCE_PATH}/cmake")
|
|
|
|
# Copy additional custom CMake buildsystem into appropriate folders
|
|
file(GLOB MAIN_BUILDSYSTEM "${CMAKE_CURRENT_LIST_DIR}/cmake-buildsystem/CMakeLists.txt" "${CMAKE_CURRENT_LIST_DIR}/cmake-buildsystem/*.cmake")
|
|
file(COPY ${MAIN_BUILDSYSTEM} DESTINATION "${SOURCE_PATH}")
|
|
file(GLOB MODULES "${CMAKE_CURRENT_LIST_DIR}/cmake-buildsystem/cmake/*.cmake")
|
|
file(COPY ${MODULES} DESTINATION "${SOURCE_PATH}/cmake")
|
|
|
|
function(checkout_in_path PATH URL REF)
|
|
if(EXISTS "${PATH}")
|
|
return()
|
|
endif()
|
|
|
|
vcpkg_from_git(
|
|
OUT_SOURCE_PATH DEP_SOURCE_PATH
|
|
URL "${URL}"
|
|
REF "${REF}"
|
|
)
|
|
file(RENAME "${DEP_SOURCE_PATH}" "${PATH}")
|
|
file(REMOVE_RECURSE "${DEP_SOURCE_PATH}")
|
|
endfunction()
|
|
|
|
checkout_in_path(
|
|
"${SOURCE_PATH}/third_party/zlib"
|
|
"https://chromium.googlesource.com/chromium/src/third_party/zlib"
|
|
"${ANGLE_THIRDPARTY_ZLIB_COMMIT}"
|
|
)
|
|
|
|
vcpkg_cmake_configure(
|
|
SOURCE_PATH "${SOURCE_PATH}"
|
|
OPTIONS_DEBUG -DDISABLE_INSTALL_HEADERS=1
|
|
OPTIONS
|
|
"-D${ANGLE_CPU_BITNESS}=1"
|
|
"-DPORT=${ANGLE_BUILDSYSTEM_PORT}"
|
|
"-DANGLE_USE_D3D11_COMPOSITOR_NATIVE_WINDOW=${ANGLE_USE_D3D11_COMPOSITOR_NATIVE_WINDOW}"
|
|
"-DVCPKG_TARGET_IS_WINDOWS=${VCPKG_TARGET_IS_WINDOWS}"
|
|
)
|
|
|
|
vcpkg_cmake_install()
|
|
|
|
vcpkg_cmake_config_fixup(CONFIG_PATH share/unofficial-angle PACKAGE_NAME unofficial-angle)
|
|
|
|
vcpkg_copy_pdbs()
|
|
|
|
file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
|
|
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
|
|
# Remove empty directories inside include directory
|
|
file(GLOB directory_children RELATIVE "${CURRENT_PACKAGES_DIR}/include" "${CURRENT_PACKAGES_DIR}/include/*")
|
|
foreach(directory_child ${directory_children})
|
|
if(IS_DIRECTORY "${CURRENT_PACKAGES_DIR}/include/${directory_child}")
|
|
file(GLOB_RECURSE subdirectory_children "${CURRENT_PACKAGES_DIR}/include/${directory_child}/*")
|
|
if("${subdirectory_children}" STREQUAL "")
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/${directory_child}")
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
unset(subdirectory_children)
|
|
unset(directory_child)
|
|
unset(directory_children)
|
|
|
|
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
|