From 1a42fc4fcddfa5061a81769d89035c64e2a158c5 Mon Sep 17 00:00:00 2001 From: Undefine Date: Mon, 30 Jun 2025 13:12:39 +0200 Subject: [PATCH] Meta: Patch angle vcpkg to build on FreeBSD --- .../angle/cmake-buildsystem/CMakeLists.txt | 5 +- .../cmake-buildsystem/PlatformLinux.cmake | 2 +- .../overlay-ports/angle/fix-freebsd.patch | 56 +++++++++++++++++++ .../vcpkg/overlay-ports/angle/portfile.cmake | 1 + vcpkg.json | 2 +- 5 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 Meta/CMake/vcpkg/overlay-ports/angle/fix-freebsd.patch diff --git a/Meta/CMake/vcpkg/overlay-ports/angle/cmake-buildsystem/CMakeLists.txt b/Meta/CMake/vcpkg/overlay-ports/angle/cmake-buildsystem/CMakeLists.txt index e370a503ee2..0f3e62c2ef6 100644 --- a/Meta/CMake/vcpkg/overlay-ports/angle/cmake-buildsystem/CMakeLists.txt +++ b/Meta/CMake/vcpkg/overlay-ports/angle/cmake-buildsystem/CMakeLists.txt @@ -44,7 +44,7 @@ add_compile_options("$<$:-DANGLE_ENABLE_DEBUG_ANNOTATIONS>") if(WIN32) add_definitions(-DANGLE_IS_WIN) endif() -if(LINUX) +if(LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD") add_definitions(-DANGLE_IS_LINUX) endif() if(ANGLE_IS_64_BIT_CPU) @@ -258,6 +258,9 @@ if (USE_ANGLE_EGL OR ENABLE_WEBGL) target_compile_definitions(ANGLE PUBLIC ${ANGLE_DEFINITIONS}) target_link_libraries(ANGLE PRIVATE ZLIB::ZLIB ${CMAKE_DL_LIBS}) + find_package(Threads REQUIRED) + target_link_libraries(ANGLE PRIVATE Threads::Threads) + target_compile_definitions(ANGLEFramework INTERFACE ${gl_prototypes}) add_library(GLESv2 ${GLESv2_LIBRARY_TYPE} diff --git a/Meta/CMake/vcpkg/overlay-ports/angle/cmake-buildsystem/PlatformLinux.cmake b/Meta/CMake/vcpkg/overlay-ports/angle/cmake-buildsystem/PlatformLinux.cmake index 4a1f9ca3a2b..4f802d192c9 100644 --- a/Meta/CMake/vcpkg/overlay-ports/angle/cmake-buildsystem/PlatformLinux.cmake +++ b/Meta/CMake/vcpkg/overlay-ports/angle/cmake-buildsystem/PlatformLinux.cmake @@ -1,4 +1,4 @@ -list(APPEND ANGLE_DEFINITIONS ANGLE_PLATFORM_LINUX USE_SYSTEM_EGL) +list(APPEND ANGLE_DEFINITIONS USE_SYSTEM_EGL) include(linux.cmake) if (USE_OPENGL) diff --git a/Meta/CMake/vcpkg/overlay-ports/angle/fix-freebsd.patch b/Meta/CMake/vcpkg/overlay-ports/angle/fix-freebsd.patch new file mode 100644 index 00000000000..908acbe1eb9 --- /dev/null +++ b/Meta/CMake/vcpkg/overlay-ports/angle/fix-freebsd.patch @@ -0,0 +1,56 @@ +diff --git a/src/common/platform.h b/src/common/platform.h +index 44f485f1ce..fbbbfa7919 100644 +--- a/src/common/platform.h ++++ b/src/common/platform.h +@@ -23,7 +23,10 @@ + #elif defined(__linux__) || defined(EMSCRIPTEN) + # define ANGLE_PLATFORM_LINUX 1 + # define ANGLE_PLATFORM_POSIX 1 +-#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || \ ++#elif defined(__FreeBSD__) ++# define ANGLE_PLATFORM_FREEBSD 1 ++# define ANGLE_PLATFORM_POSIX 1 ++#elif defined(__OpenBSD__) || defined(__NetBSD__) || \ + defined(__DragonFly__) || defined(__sun) || defined(__GLIBC__) || defined(__GNU__) || \ + defined(__QNX__) || defined(__Fuchsia__) || defined(__HAIKU__) + # define ANGLE_PLATFORM_POSIX 1 +diff --git a/src/libANGLE/Display.cpp b/src/libANGLE/Display.cpp +index d261bf1e5a..44c1d91bc3 100644 +--- a/src/libANGLE/Display.cpp ++++ b/src/libANGLE/Display.cpp +@@ -58,7 +58,7 @@ + # include "libANGLE/renderer/gl/wgl/DisplayWGL.h" + # elif ANGLE_ENABLE_CGL + # include "libANGLE/renderer/gl/cgl/DisplayCGL.h" +-# elif defined(ANGLE_PLATFORM_LINUX) ++# elif defined(ANGLE_PLATFORM_LINUX) || defined(ANGLE_PLATFORM_FREEBSD) + # include "libANGLE/renderer/gl/egl/DisplayEGL.h" + # if defined(ANGLE_USE_X11) + # include "libANGLE/renderer/gl/glx/DisplayGLX_api.h" +@@ -422,7 +422,7 @@ rx::DisplayImpl *CreateDisplayFromAttribs(EGLAttrib displayType, + impl = new rx::DisplayCGL(state); + break; + +-# elif defined(ANGLE_PLATFORM_LINUX) ++# elif defined(ANGLE_PLATFORM_LINUX) || defined(ANGLE_PLATFORM_FREEBSD) + # if defined(ANGLE_USE_GBM) + if (platformType == 0) + { +@@ -468,7 +468,7 @@ rx::DisplayImpl *CreateDisplayFromAttribs(EGLAttrib displayType, + #if defined(ANGLE_ENABLE_OPENGL) + # if defined(ANGLE_PLATFORM_WINDOWS) + impl = new rx::DisplayWGL(state); +-# elif defined(ANGLE_PLATFORM_LINUX) ++# elif defined(ANGLE_PLATFORM_LINUX) || defined(ANGLE_PLATFORM_FREEBSD) + # if defined(ANGLE_USE_GBM) + if (platformType == 0) + { +@@ -519,7 +519,7 @@ rx::DisplayImpl *CreateDisplayFromAttribs(EGLAttrib displayType, + impl = rx::CreateVulkanWin32Display(state); + } + break; +-# elif defined(ANGLE_PLATFORM_LINUX) ++# elif defined(ANGLE_PLATFORM_LINUX) || defined(ANGLE_PLATFORM_FREEBSD) + # if defined(ANGLE_USE_GBM) + if (platformType == EGL_PLATFORM_GBM_KHR && rx::IsVulkanGbmDisplayAvailable()) + { diff --git a/Meta/CMake/vcpkg/overlay-ports/angle/portfile.cmake b/Meta/CMake/vcpkg/overlay-ports/angle/portfile.cmake index 895386610fe..21fc5c17e6b 100644 --- a/Meta/CMake/vcpkg/overlay-ports/angle/portfile.cmake +++ b/Meta/CMake/vcpkg/overlay-ports/angle/portfile.cmake @@ -49,6 +49,7 @@ vcpkg_from_github( # On update check headers against opengl-registry PATCHES 001-fix-builder-error.patch + fix-freebsd.patch ) # Generate angle_commit.h diff --git a/vcpkg.json b/vcpkg.json index 43a9bbec5e1..fbc70e7b006 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -10,7 +10,7 @@ }, { "name": "angle", - "platform": "linux | windows | android" + "platform": "linux | windows | android | freebsd" }, { "name": "curl",