aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/angle/portfile.cmake
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/angle/portfile.cmake
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/angle/portfile.cmake')
-rw-r--r--vcpkg/ports/angle/portfile.cmake186
1 files changed, 186 insertions, 0 deletions
diff --git a/vcpkg/ports/angle/portfile.cmake b/vcpkg/ports/angle/portfile.cmake
new file mode 100644
index 0000000..97e4c6b
--- /dev/null
+++ b/vcpkg/ports/angle/portfile.cmake
@@ -0,0 +1,186 @@
+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 mesa-common-dev\n\nThese can be installed on Ubuntu systems via apt-get install mesa-common-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()
+
+set(USE_METAL OFF)
+if ("metal" IN_LIST FEATURES)
+ set(USE_METAL ON)
+endif()
+
+# chromium/7258
+set(ANGLE_COMMIT d9fc4a372074b1079c193c422fc4a180e79b6636)
+set(ANGLE_VERSION 7258)
+set(ANGLE_SHA512 483f29b6eaac5c657a3aeb238e5da48b9dd92aaa0b5eb3b4f95ebd771360cea84249ef6870dac9e1fc3b6f6c8686fa46a7a45a89a912f9b4fc258575065a28c7)
+set(ANGLE_THIRDPARTY_ZLIB_COMMIT 4028ebf8710ee39d2286cb0f847f9b95c59f84d8)
+
+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-builder-error.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)
+
+# Generate ANGLEShaderProgramVersion.h.in
+# FIXME: ANGLE's build system hashes the renderer files to determine the program version hash.
+# For now, we'll just use the ANGLE commit hash.
+# See: https://github.com/google/angle/commit/82826be01fcc4d02a637312f4df3ba97e74f7226#diff-81195814d06b98e6258a63901769078f42c522448b2847a33bd51e24ac9faef6
+set(ANGLE_PROGRAM_VERSION_HASH_SIZE 12)
+string(SUBSTRING "${ANGLE_COMMIT}" 0 ${ANGLE_PROGRAM_VERSION_HASH_SIZE} ANGLE_PROGRAM_VERSION)
+configure_file("${CMAKE_CURRENT_LIST_DIR}/ANGLEShaderProgramVersion.h.in" "${SOURCE_PATH}/ANGLEShaderProgramVersion.h" @ONLY)
+configure_file("${CMAKE_CURRENT_LIST_DIR}/ANGLEShaderProgramVersion.h.in" "${SOURCE_PATH}/src/common/ANGLEShaderProgramVersion.h" @ONLY)
+
+file(COPY "${CMAKE_CURRENT_LIST_DIR}/unofficial-angle-config.cmake" DESTINATION "${SOURCE_PATH}")
+
+set(ANGLE_WEBKIT_BUILDSYSTEM_COMMIT "0742522b24152262b04913242cb0b3c48de92ba0")
+
+# 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 cf9dab1b59cd44b9ce05a2dc4636115e770dfe7d5cfbd90c3fef659628ac8155c57b866480f7cfe9a0afeb31ff5ce5eed74473f386120a7fc5910e8b032bd61d
+)
+
+# Generate CMake files from GN / GNI files
+x_vcpkg_get_python_packages(PYTHON_VERSION "3" OUT_PYTHON_VAR "PYTHON3" PACKAGES ply)
+
+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)
+
+# 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)
+ vcpkg_from_git(
+ OUT_SOURCE_PATH DEP_SOURCE_PATH
+ URL "${URL}"
+ REF "${REF}"
+ )
+ if (CMAKE_HOST_WIN32)
+ file(COPY "${DEP_SOURCE_PATH}/" DESTINATION "${PATH}")
+ else()
+ file(RENAME "${DEP_SOURCE_PATH}" "${PATH}")
+ endif()
+ 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}"
+ "-DUSE_METAL=${USE_METAL}"
+)
+
+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}")