diff --git a/apothecary/apothecary b/apothecary/apothecary index 45227949e..217779a63 100755 --- a/apothecary/apothecary +++ b/apothecary/apothecary @@ -858,6 +858,7 @@ if [[ "$TYPE" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then TVOS_LATEST_SDK=$(xcrun -sdk appletvos --show-sdk-version >/dev/null || echo "SDKNotInstalled") XROS_MIN_SDK_VER=1.1 WATCHOS_MIN_SDK_VER=6.0 + export ARCH_IS_SIMULATOR="false" fi @@ -873,10 +874,12 @@ if [ "$TYPE" = "ios" ]; then export PLATFORM="OS" elif [ $ARCH == "x86_64" ] || [ $ARCH == 64 ]; then export PLATFORM="SIMULATOR64" + export ARCH_IS_SIMULATOR="true" elif [ $ARCH == "arm64" ] ; then export PLATFORM="OS64" elif [ $ARCH == "SIM_arm64" ]; then export PLATFORM="SIMULATORARM64" + export ARCH_IS_SIMULATOR="true" fi fi @@ -890,10 +893,12 @@ if [ "$TYPE" = "tvos" ]; then export FLAG_RELEASE="-Os -fvisibility=hidden" if [ $ARCH == "x86_64" ] || [ $ARCH == 64 ]; then export PLATFORM="SIMULATOR_TVOS" + export ARCH_IS_SIMULATOR="true" elif [ $ARCH == "arm64" ] ; then export PLATFORM="TVOS" elif [ $ARCH == "SIM_arm64" ]; then export PLATFORM="SIMULATORARM64_TVOS" + export ARCH_IS_SIMULATOR="true" fi fi @@ -903,8 +908,10 @@ if [ "$TYPE" = "watchos" ]; then export PLATFORM="WATCHOS" elif [ $ARCH == "x86_64" ] ; then export PLATFORM="SIMULATOR_WATCHOS" + export ARCH_IS_SIMULATOR="true" elif [ $ARCH == "SIM_arm64" ]; then export PLATFORM="SIMULATORARM64_WATCHOS" + export ARCH_IS_SIMULATOR="true" else echoError "watchOS incorrect ARCH:[$ARCH]" fi @@ -916,8 +923,10 @@ if [ "$TYPE" = "xros" ]; then export PLATFORM="VISIONOS" elif [ $ARCH == "x86_64" ] || [ $ARCH == 64 ]; then export PLATFORM="SIMULATOR64_VISIONOS" + export ARCH_IS_SIMULATOR="true" elif [ $ARCH == "SIM_arm64" ]; then export PLATFORM="SIMULATOR_VISIONOS" + export ARCH_IS_SIMULATOR="true" fi fi diff --git a/apothecary/formulas/angle/CMakeLists.txt b/apothecary/formulas/angle/CMakeLists.txt new file mode 100644 index 000000000..5f4cb21e3 --- /dev/null +++ b/apothecary/formulas/angle/CMakeLists.txt @@ -0,0 +1,390 @@ +cmake_minimum_required(VERSION 3.8) +project(angle CXX C) +include(config.cmake) + +option(USE_FRAME_CAPTURE "build with frame capture support" OFF) +option(USE_LOADER "build with EGL/GLESv2 loader" ON) +option(USE_VULKAN "build with vulkan support" OFF) +option(USE_METAL "build with metal support" OFF) +if(WINDOWS_DESKTOP AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES arm) + option(USE_D3D9 "build with d3d9 support" ON) + option(USE_GL "build with native opengl/es support via wgl" ON) +endif() + +if (APPLE) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Cocoa -framework OpenGL -framework IOKit -framework CoreFoundation -framework IOSurface -framework QuartzCore -framework CoreGraphics") +endif() +set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") +set(CMAKE_STATIC_LIBRARY_PREFIX "") + +add_definitions( + -D_CRT_SECURE_NO_DEPRECATE + -D_SCL_SECURE_NO_WARNINGS + -D_HAS_EXCEPTIONS=0 + -DNOMINMAX + -DANGLE_STANDALONE_BUILD + -DANGLE_ENABLE_DEBUG_ANNOTATIONS +) + +configure_file(src/commit.h include/id/commit.h COPYONLY) +execute_process( + COMMAND ${CMAKE_SOURCE_DIR}/src/commit_id.py check ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE IS_GIT_REPO + OUTPUT_STRIP_TRAILING_WHITESPACE +) +if(IS_GIT_REPO STREQUAL 1) + execute_process( + COMMAND ${CMAKE_SOURCE_DIR}/src/commit_id.py gen ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/include/id/commit.h + OUTPUT_VARIABLE IS_GIT_REPO + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endif() +include_directories(include src ${CMAKE_CURRENT_BINARY_DIR}/include) + +########## +# angle::common +# android_util.h/cpp is required and not using android apis +if(WINDOWS_DESKTOP) + set(ANGLE_COMMON_PLATFORM_FILTER "_winuwp|_linux|_mac|_posix") +elseif(WINDOWS_STORE) + set(ANGLE_COMMON_PLATFORM_FILTER "_win|_linux|_mac|_posix") +elseif(LINUX) + set(ANGLE_COMMON_PLATFORM_FILTER "_win|_mac") +elseif(APPLE) + set(ANGLE_COMMON_PLATFORM_FILTER "_linux|_win") +endif() +file(GLOB ANGLE_COMMON_SOURCES "src/common/*.h" "src/common/*.inl" "src/common/*.cpp" "src/common/third_party/base/anglebase/*.h" "src/common/third_party/base/anglebase/*.cc" "src/common/third_party/base/anglebase/containers/*.h" "src/common/third_party/base/anglebase/numerics/*.h" "src/common/third_party/base/anglebase/numerics/*.cc" "src/common/third_party/xxhash/*.h" "src/common/third_party/xxhash/*.c" "src/common/third_party/smhasher/src/*.h" "src/common/third_party/smhasher/src/*.cpp") +list(FILTER ANGLE_COMMON_SOURCES EXCLUDE REGEX "_unittest|event_tracer|${ANGLE_COMMON_PLATFORM_FILTER}") +add_library(angle_common STATIC ${ANGLE_COMMON_SOURCES}) +target_include_directories(angle_common PUBLIC src/common/third_party/base) +add_library(angle::common ALIAS angle_common) +if(CMAKE_CL_64 OR CMAKE_SYSTEM_PROCESSOR MATCHES 64) + target_compile_definitions(angle_common INTERFACE -DANGLE_IS_64_BIT_CPU) +else() + target_compile_definitions(angle_common INTERFACE -DANGLE_IS_32_BIT_CPU) + if(MSVC AND CMAKE_SYSTEM_PROCESSOR MATCHES 86) + target_compile_options(angle_common INTERFACE -arch:SSE2) # clang-cl, loadimage.cpp + endif() +endif() + + +########## +# angle::image_util +file(GLOB ANGLE_IMAGE_UTIL_SOURCES "src/image_util/*.h" "src/image_util/*.inl" "src/image_util/*.cpp") +add_library(angle_image_util STATIC ${ANGLE_IMAGE_UTIL_SOURCES}) +target_link_libraries(angle_image_util PRIVATE angle::common) +add_library(angle::image_util ALIAS angle_image_util) + +set(ANGLE_GPU_INFO_UTIL_SOURCES src/gpu_info_util/SystemInfo.cpp) +if(APPLE) + list(APPEND ANGLE_GPU_INFO_UTIL_SOURCES src/gpu_info_util/SystemInfo_mac.mm) +elseif(WIN32) + list(APPEND ANGLE_GPU_INFO_UTIL_SOURCES src/gpu_info_util/SystemInfo_win.cpp) +elseif(ANDROID) + list(APPEND ANGLE_GPU_INFO_UTIL_SOURCES src/gpu_info_util/SystemInfo_android.cpp) +else() + list(APPEND ANGLE_GPU_INFO_UTIL_SOURCES src/gpu_info_util/SystemInfo_linux.cpp) +endif() +add_library(angle_gpu_info_util STATIC ${ANGLE_GPU_INFO_UTIL_SOURCES}) +target_link_libraries(angle_gpu_info_util PRIVATE angle::common) +add_library(angle::gpu_info_util ALIAS angle_gpu_info_util) +if(WIN32) + if(WINDOWS_DESKTOP) + set_property(SOURCE src/gpu_info_util/SystemInfo_win.cpp APPEND PROPERTY COMPILE_FLAGS "-DGPU_INFO_USE_SETUPAPI") # COMPILE_OPTIONS/INCLUDE_DIRECTORIES does not work + target_link_libraries(angle_gpu_info_util PRIVATE setupapi) + else() + set_property(SOURCE src/gpu_info_util/SystemInfo_win.cpp APPEND PROPERTY COMPILE_FLAGS "-DGPU_INFO_USE_DXGI") # COMPILE_OPTIONS/INCLUDE_DIRECTORIES does not work + endif() +endif() +########## +# angle::translator +file(GLOB_RECURSE TRANSLATOR_SOURCES + "src/compiler/translator/glslang.l" + "src/compiler/translator/glslang.y" + "src/compiler/translator/*.h" + "src/compiler/translator/*.cpp" + "src/third_party/compiler/ArrayBoundsClamper.cpp" +) +if(NOT WIN32) + list(FILTER TRANSLATOR_SOURCES EXCLUDE REGEX "HLSL|hlsl") +endif() +list(FILTER TRANSLATOR_SOURCES EXCLUDE REGEX "Vulkan") +add_library(angle_translator STATIC ${TRANSLATOR_SOURCES}) +target_compile_definitions(angle_translator PRIVATE + -DANGLE_ENABLE_ESSL + -DANGLE_ENABLE_GLSL +) +if(WIN32) + target_compile_definitions(angle_translator PRIVATE -DANGLE_ENABLE_HLSL) +endif() + +find_package(GTest) +if(NOT GTest_FOUND) + include(FetchContent) + FetchContent_Declare( + googletest + URL https://github.com/google/googletest/archive/release-1.10.0.tar.gz + URL_HASH SHA1=9c89be7df9c5e8cb0bc20b3c4b39bf7e82686770 + ) + FetchContent_MakeAvailable(googletest) +endif() + +target_link_libraries(angle_translator PRIVATE angle::common gtest) +add_library(angle::translator ALIAS angle_translator) + +########## +# angle::preprocessor +file(GLOB PREPROCESSOR_SOURCES + "src/compiler/preprocessor/*.h" + "src/compiler/preprocessor/*.cpp" +) +add_library(angle_preprocessor STATIC ${PREPROCESSOR_SOURCES}) +target_link_libraries(angle_preprocessor PRIVATE angle::common) +add_library(angle::preprocessor ALIAS angle_preprocessor) + +########## +# libANGLE + +## OpenGL Renderer +if(USE_GL AND WINDOWS_DESKTOP OR LINUX OR APPLE) + if(WINDOWS_DESKTOP) + set(ANGLE_RENDERER_OPENGL_PLATFORM + "src/libANGLE/renderer/gl/wgl/*.cpp" + "src/libANGLE/renderer/gl/wgl/*.inl" + "src/libANGLE/renderer/gl/wgl/*.h" + ) + elseif(APPLE) + set(ANGLE_RENDERER_OPENGL_PLATFORM + "src/libANGLE/renderer/gl/cgl/*.mm" + "src/libANGLE/renderer/gl/cgl/*.cpp" + "src/libANGLE/renderer/gl/cgl/*.inl" + "src/libANGLE/renderer/gl/cgl/*.h" + ) + elseif(LINUX) + set(ANGLE_RENDERER_OPENGL_PLATFORM + "src/libANGLE/renderer/gl/glx/*.cpp" + "src/libANGLE/renderer/gl/glx/*.inl" + "src/libANGLE/renderer/gl/glx/*.h" + ) + endif() + + file(GLOB LIBANGLE_GL_SOURCES + "src/libANGLE/renderer/gl/*.cpp" + "src/libANGLE/renderer/gl/*.inl" + "src/libANGLE/renderer/gl/*.h" + + ${ANGLE_RENDERER_OPENGL_PLATFORM} + ) + list(FILTER LIBANGLE_GL_SOURCES EXCLUDE REGEX "_unittest") + add_library(angle_renderer_opengl INTERFACE) + target_sources(angle_renderer_opengl INTERFACE ${LIBANGLE_GL_SOURCES}) + target_compile_definitions(angle_renderer_opengl INTERFACE -DANGLE_ENABLE_OPENGL) + add_library(angle::renderer::opengl ALIAS angle_renderer_opengl) +endif() + +# D3D Renderers +if(WIN32) + ## All D3D Sources + file(GLOB_RECURSE LIBANGLE_D3D_SOURCES + "src/libANGLE/renderer/d3d/*.cpp" + "src/libANGLE/renderer/d3d/*.inl" + "src/libANGLE/renderer/d3d/*.h" + ) + list(FILTER LIBANGLE_D3D_SOURCES EXCLUDE REGEX "_unittest") + + ## WinRT D3D Renderer + if(WINDOWS_STORE) + set(LIBANGLE_D3D_WINRT_SOURCES ${LIBANGLE_D3D_SOURCES}) + list(FILTER LIBANGLE_D3D_WINRT_SOURCES INCLUDE REGEX "winrt") + add_library(angle_renderer_winrt INTERFACE) + target_sources(angle_renderer_winrt INTERFACE ${LIBANGLE_D3D_WINRT_SOURCES}) + add_library(angle::renderer::winrt ALIAS angle_renderer_winrt) + endif() + + ## Win32/d3d9 D3D Renderer + if(WINDOWS_DESKTOP) + set(LIBANGLE_D3D_DESKTOP_SOURCES ${LIBANGLE_D3D_SOURCES}) + if(USE_D3D9) + list(FILTER LIBANGLE_D3D_DESKTOP_SOURCES INCLUDE REGEX "d3d9|win32|converged") + else() + list(FILTER LIBANGLE_D3D_DESKTOP_SOURCES INCLUDE REGEX "win32|converged") + endif() + add_library(angle_renderer_win32 INTERFACE) + target_sources(angle_renderer_win32 INTERFACE ${LIBANGLE_D3D_DESKTOP_SOURCES}) + if(USE_D3D9) + target_compile_definitions(angle_renderer_win32 INTERFACE -DANGLE_ENABLE_D3D9) + target_link_libraries(angle_renderer_win32 INTERFACE d3d9) + endif() + target_link_libraries(angle_renderer_win32 INTERFACE user32 gdi32) + add_library(angle::renderer::win32 ALIAS angle_renderer_win32) + if(CMAKE_HOST_WIN32) + set_property(SOURCE src/libANGLE/renderer/d3d/HLSLCompiler.cpp APPEND PROPERTY COMPILE_FLAGS "-DANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES={\\\"d3dcompiler_47.dll\\\",\\\"d3dcompiler_46.dll\\\",\\\"d3dcompiler_43.dll\\\"}") + else() # do not let bash expend {xx,oo} + set_property(SOURCE src/libANGLE/renderer/d3d/HLSLCompiler.cpp APPEND PROPERTY COMPILE_FLAGS "-DANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES='{\"d3dcompiler_47.dll\",\"d3dcompiler_46.dll\",\"d3dcompiler_43.dll\"}'") + endif() + endif() + + ## D3D11 Base renderer + list(FILTER LIBANGLE_D3D_SOURCES EXCLUDE REGEX "winrt|d3d9|win32") #|converged + find_library(DXGUID_LIB NAMES dxguid) + find_library(D3D11_LIB NAMES d3d11) + add_library(angle_renderer_d3d INTERFACE) + target_sources(angle_renderer_d3d INTERFACE ${LIBANGLE_D3D_SOURCES}) + target_compile_definitions(angle_renderer_d3d INTERFACE + -DANGLE_ENABLE_D3D11 + ) + target_link_libraries(angle_renderer_d3d INTERFACE d3d11 dxgi dxguid) #${D3D11_LIB} ${DXGUID_LIB}) + add_library(angle::renderer::d3d ALIAS angle_renderer_d3d) +endif() + +## Core libANGLE library +if(WIN32) + set(LIBANGLE_SOURCES_PLATFORM + "src/third_party/systeminfo/SystemInfo.cpp" + ) +elseif(APPLE) + file(GLOB LIBANGLE_SOURCES_PLATFORM + "src/libANGLE/renderer/*.mm" + ) +else() + set(LIBANGLE_SOURCES_PLATFORM ) +endif() + +file(GLOB LIBANGLE_SOURCES + "src/common/third_party/murmurhash/MurmurHash3.cpp" + "src/common/event_tracer.cpp" + + "src/libANGLE/*.cpp" + "src/libANGLE/*.inl" + "src/libANGLE/*.h" + + "src/libANGLE/renderer/*.cpp" + "src/libANGLE/renderer/*.inl" + "src/libANGLE/renderer/*.h" + + #"src/libANGLE/renderer/null/*.cpp" + #"src/libANGLE/renderer/null/*.inl" + #"src/libANGLE/renderer/null/*.h" + + ${LIBANGLE_SOURCES_PLATFORM} +) +list(FILTER LIBANGLE_SOURCES EXCLUDE REGEX "_unittest") +if(USE_FRAME_CAPTURE) + list(FILTER LIBANGLE_SOURCES EXCLUDE REGEX "FrameCapture_mock.cpp") +else() + list(FILTER LIBANGLE_SOURCES EXCLUDE REGEX "FrameCapture.cpp") +endif() +if(NOT USE_VULKAN AND NOT USE_METAL) + list(FILTER LIBANGLE_SOURCES EXCLUDE REGEX "glslang_wrapper_utils.cpp") # need glslang source +endif() +if(LINUX OR APPLE) + set(LIBANGLE_RENDERER_PLATFORM + angle::renderer::opengl + ) +elseif(WINDOWS_STORE) + set(LIBANGLE_RENDERER_PLATFORM + angle::renderer::d3d + angle::renderer::winrt + ) +elseif(WINDOWS_DESKTOP) + set(LIBANGLE_RENDERER_PLATFORM + angle::renderer::d3d + angle::renderer::win32 + ) + if(USE_GL) + list(APPEND LIBANGLE_RENDERER_PLATFORM angle::renderer::opengl) + endif() +else() + set(LIBANGLE_RENDERER_PLATFORM ) +endif() + +if(LINUX) + set(LIBANGLE_RENDERER_COMPILEDEF + -DANGLE_USE_X11 + ) +else() + set(LIBANGLE_RENDERER_COMPILEDEF ) +endif() + +add_library(libANGLE STATIC ${LIBANGLE_SOURCES}) +target_link_libraries(libANGLE PRIVATE + angle::common + angle::gpu_info_util + angle::image_util + angle::translator + angle::preprocessor + ${LIBANGLE_RENDERER_PLATFORM} +) +target_include_directories(libANGLE PRIVATE "src/third_party/khronos") +target_compile_definitions(libANGLE + #PRIVATE -DANGLE_ENABLE_NULL + PUBLIC + -DLIBANGLE_IMPLEMENTATION + ${LIBANGLE_RENDERER_COMPILEDEF} + -DANGLE_CAPTURE_ENABLED=$ +) +add_library(angle::libANGLE ALIAS libANGLE) + +########## +# libGLESv2 +file(GLOB LIBGLESV2_SOURCES "src/libGLESv2/*.h" "src/libGLESv2/*.cpp" "src/libGLESv2/libGLESv2_autogen.def") +list(FILTER LIBGLESV2_SOURCES EXCLUDE REGEX "proc_table_autogen|proc_table_gles_autogen") # unused, and duplicated symbols +add_library(libGLESv2 SHARED ${LIBGLESV2_SOURCES}) +target_link_libraries(libGLESv2 PRIVATE angle::common angle::libANGLE) +target_compile_definitions(libGLESv2 + PRIVATE -DLIBGLESV2_IMPLEMENTATION + PUBLIC + -DGL_GLEXT_PROTOTYPES + -DGL_GLES_PROTOTYPES=1 + # static only + # -DGL_APICALL= + # -DEGLAPI= + # -DGL_API= +) +target_include_directories(libGLESv2 PUBLIC "$") + +########## +# libEGL +file(GLOB LIBEGL_SOURCES "src/libEGL/*.cpp" "src/libEGL/*.h" "src/libEGL/libEGL.def") +# "src/libEGL/libEGL.def": duplicate /export because EGLAPI is defined as dllexport +add_library(libEGL SHARED + ${LIBEGL_SOURCES} + # "src/libEGL/libEGL.rc" +) +target_link_libraries(libEGL PRIVATE angle::common angle::libANGLE libGLESv2) +target_include_directories(libEGL PUBLIC "$") +target_include_directories(libEGL PUBLIC "$") +target_compile_definitions(libEGL PRIVATE -DLIBEGL_IMPLEMENTATION -DEGL_EGL_PROTOTYPES=1 -DEGL_EGLEXT_PROTOTYPES) # EGL_EGL_PROTOTYPES: function declarations with default visibility via EGLAPI +target_compile_definitions(libEGL PRIVATE -DANGLE_USE_EGL_LOADER -DANGLE_GLESV2_LIBRARY_NAME=\"libGLESv2\" -DANGLE_EGL_LIBRARY_NAME=\"libEGL\") # TODO: option? + +if(NOT MSVC) + target_compile_definitions(libGLESv2 PRIVATE -DGL_APICALL=__attribute__\(\(visibility\(\"default\"\)\)\)) + target_compile_definitions(libEGL PRIVATE -DEGLAPI=__attribute__\(\(visibility\(\"default\"\)\)\)) +else() + target_compile_definitions(libGLESv2 PRIVATE -DGL_API= -DGL_APICALL=)#__declspec\(dllexport\): exports_eglXXX@? + target_compile_definitions(libEGL PRIVATE -DEGLAPI=)#__declspec\(dllexport\): exports_eglXXX@? +endif() + +SET_TARGET_PROPERTIES(libANGLE PROPERTIES PREFIX "") +SET_TARGET_PROPERTIES(libGLESv2 PROPERTIES PREFIX "") +SET_TARGET_PROPERTIES(libEGL PROPERTIES PREFIX "") + +install(TARGETS libEGL libGLESv2 EXPORT ANGLEExport + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +) + +#install(EXPORT ANGLEExport FILE unofficial-angle-config.cmake NAMESPACE unofficial::angle:: DESTINATION share/unofficial-angle) + +if(NOT DISABLE_INSTALL_HEADERS) + install( + DIRECTORY include/ + DESTINATION include + FILES_MATCHING PATTERN "*.h" + PATTERN "GLSLANG" EXCLUDE + PATTERN "EGL" EXCLUDE + PATTERN "KHR" EXCLUDE + PATTERN "export.h" EXCLUDE + ) +endif() diff --git a/apothecary/formulas/angle/angle.sh b/apothecary/formulas/angle/angle.sh new file mode 100644 index 000000000..d25cbc5f5 --- /dev/null +++ b/apothecary/formulas/angle/angle.sh @@ -0,0 +1,360 @@ +#!/usr/bin/env bash +# +# ANGLE - Almost Native Graphics Layer Engine +# (Example formula for building ANGLE for multiple platforms using GN/Ninja) +# +# Supported platforms: vs, osx, emscripten, ios, watchos, catos, xros, tvos, linux, android + +FORMULA_TYPES=("vs" "osx" "emscripten" "ios" "watchos" "catos" "xros" "tvos" "linux" "android") +FORMULA_DEPENDS=() # Add any dependency formulas if needed + +VER_FULL="chromium/7066" +VER=${VER_FULL#*/} + +BUILD_ID=1 +DEFINES="" +FRAMEWORKS="" + +GIT_URL=https://github.com/google/angle/archive/refs/heads/$VER_FULL.tar.gz +GIT_TAG=v$VER + +function download() { +# . "$DOWNLOADER_SCRIPT" +# downloader ${GIT_URL} +# tar -xf $VER.tar.gz +# mv "angle-chromium-$VER" angle +# rm -f $VER.tar.gz + + if [ -d "angle" ]; then + echo "Removing existing ANGLE directory..." + rm -rf angle + fi + + echo "Cloning ANGLE repository from ${GIT_URL}..." + + # Clone the repository with submodules + git clone --recursive --depth=1 --branch "$VER_FULL" https://github.com/google/angle.git + + if [ $? -ne 0 ]; then + echo "Failed to clone ANGLE repository!" + exit 1 + fi + + cd angle || exit + + echo "Checking out branch/tag: $VER_FULL..." + git fetch --tags + git checkout "$VER_FULL" + + # # Ensure submodules are fully updated + echo "Updating ANGLE submodules..." + git submodule update --init --recursive + LIMIT_SUBS=false + if [ "$LIMIT_SUBS" == true ]; then + case "$TYPE" in + vs) # Windows (Direct3D, Vulkan) + REQUIRED_SUBMODULES=( + "build" + "buildtools" + "third_party/dawn" + "third_party/glslang/src" + "third_party/vulkan-headers/src" + "third_party/vulkan-loader/src" + "third_party/vulkan-tools/src" + "third_party/vulkan-validation-layers/src" + "third_party/vulkan_memory_allocator" + "tools/python" + ) + ;; + osx|ios|tvos|xros|catos|watchos) # Apple platforms (Metal, OpenGL) + REQUIRED_SUBMODULES=( + "build" + "buildtools" + "third_party/dawn" + "third_party/glslang/src" + "third_party/EGL-Registry/src" + "third_party/OpenGL-Registry/src" + "third_party/spirv-tools/src" + "tools/python" + "tools/clang" + ) + ;; + android) # Android (Vulkan, GLES) + REQUIRED_SUBMODULES=( + "build" + "buildtools" + "third_party/android_build_tools" + "third_party/android_deps" + "third_party/android_platform" + "third_party/android_sdk" + "third_party/dawn" + "third_party/glslang/src" + "third_party/vulkan-headers/src" + "third_party/vulkan-loader/src" + "third_party/vulkan-tools/src" + "third_party/vulkan-validation-layers/src" + "third_party/vulkan_memory_allocator" + "tools/python" + "tools/clang" + "tools/android" + ) + ;; + linux) # Linux (OpenGL, Vulkan) + REQUIRED_SUBMODULES=( + "build" + "buildtools" + "third_party/dawn" + "third_party/glslang/src" + "third_party/EGL-Registry/src" + "third_party/OpenGL-Registry/src" + "third_party/spirv-tools/src" + "third_party/wayland" + "third_party/libdrm/src" + "tools/python" + ) + ;; + emscripten) # WebAssembly (WebGL) + REQUIRED_SUBMODULES=( + "build" + "buildtools" + "third_party/dawn" + "third_party/glslang/src" + "third_party/EGL-Registry/src" + "third_party/OpenGL-Registry/src" + "third_party/spirv-tools/src" + "tools/python" + ) + ;; + *) + echo "Unsupported TYPE: $TYPE" + exit 1 + ;; + esac + + echo "Initializing required submodules..." + for submodule in "${REQUIRED_SUBMODULES[@]}"; do + git submodule update --init --recursive "$submodule" + done + fi + + cd .. + +} + + + + +function prepare() { + # If needed, copy any patch files or configuration scripts. + # For GN, ANGLE already includes the necessary BUILD.gn files. + cp -v "$FORMULA_DIR"/*.txt ./ + echo "Listing angle directory contents:" + ls -lR . + + if ! command -v gn &> /dev/null; then + rm -rf depot_tools + if [ ! -d "depot_tools" ]; then + echo "GN not found. Installing depot_tools..." + git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git + else + echo "Depot_tools already exists. Updating..." + cd depot_tools && git pull && cd .. + fi + fi + export "PATH=$PWD/depot_tools:$PATH" + + python3 scripts/bootstrap.py + gclient sync + + # if [[ "$TYPE" =~ ^(linux)$ ]]; then + # ./build/install-build-deps.sh + # fi +} + +function load() { + if [ -f "$LOAD_SCRIPT" ]; then + source "$LOAD_SCRIPT" + else + return 0 + fi + LOAD_RESULT=$(loadsave "${TYPE}" "angle" "${ARCH}" "${VER}" "$LIBS_DIR_REAL/$1/lib/$TYPE/$PLATFORM" "${BUILD_ID}") + PREBUILT=$(echo "$LOAD_RESULT" | tail -n 1) + if [ "$PREBUILT" -eq 1 ]; then + echo 1 + else + echo 0 + fi +} + +function build() { + LIBS_ROOT=$(realpath "$LIBS_DIR") + + if [[ $FORCE_DOWNLOAD -eq 0 ]] && [[ $USE_SAVE == 1 ]]; then + result=$(load "angle" | tail -n 1) + echoInfo "===Build angle - Checking if Precompiled binary :[$result]===" + if [ $result -eq 1 ]; then + echoInfo "===Build \"angle\" Precompiled binary validated. Skipping updateFormula===" + return 0 + else + echoInfo "===Build Precompiled not found or outdated. Continue updateFormula for \"angle\"===" + fi + else + echoInfo "===Build Not using cache: [FORCE_DOWNLOAD=$FORCE_DOWNLOAD] [USE_SAVE=$USE_SAVE] for updateFormula \"angle\"===" + fi + + rm -rf build_${TYPE}_${ARCH} + mkdir -p "build_${TYPE}_${ARCH}" + + rm -rf out/Debug + mkdir -p "out/Debug" + + rm -rf out/Release + mkdir -p "out/Release" + + export DEPOT_TOOLS_UPDATE=0 + if [[ ":$PATH:" != *":$PWD/depot_tools:"* ]]; then + export PATH="$PWD/depot_tools:$PATH" + echo "Added depot_tools to PATH" + else + echo "depot_tools is already in PATH" + fi + + BUILD_TESTS=${BUILD_TESTS:-false} + angle_enable_d3d9=false + angle_enable_d3d11=false + angle_enable_gl=false + angle_enable_metal=false + angle_enable_null=false + angle_enable_vulkan=false + angle_enable_essl=true + angle_enable_glsl=true + angle_enable_cl=false + is_clang=true + + is_component_build=false + is_debug=false + angle_assert_always_on=true # Recommended for debugging. Turn off for performance. + + case "$TYPE" in + vs) + angle_enable_d3d11=true + angle_enable_vulkan=true + is_clang=false + ;; + osx) + angle_enable_metal=true + angle_enable_cl=true + ;; + ios) + angle_enable_metal=true + angle_enable_cl=true + ;; + tvos|xros|catos|watchos) + angle_enable_metal=true + ;; + android|linux) + angle_enable_gl=true + angle_enable_vulkan=true + ;; + emscripten) + angle_enable_gl=true + ;; + *) + echo "Unsupported TYPE: $TYPE" + exit 1 + ;; + esac + EXTRA_GN_ARGS="" + case "$TYPE" in + osx|ios|tvos) + EXTRA_GN_ARGS=" + dcheck_always_on=true + enable_run_ios_unittests_with_xctest=true + is_component_build=${is_component_build} + is_debug=${is_debug} + angle_assert_always_on=${angle_assert_always_on} + symbol_level=1" + if [ ${ARCH_IS_SIMULATOR-:"false"} == "true" ]; then + EXTRA_GN_ARGS="${EXTRA_GN_ARGS} target_environment=\"simulator\"" + fi + ;; + android) + EXTRA_GN_ARGS=" + dcheck_always_on=true + is_component_build=${is_component_build} + is_debug=${is_debug} + angle_assert_always_on=${angle_assert_always_on} + symbol_level=1" + ;; + esac + + GN_ARGS=" + angle_enable_d3d9=${angle_enable_d3d9} + angle_enable_d3d11=${angle_enable_d3d11} + angle_enable_gl=${angle_enable_gl} + angle_enable_metal=${angle_enable_metal} + angle_enable_null=${angle_enable_null} + angle_enable_vulkan=${angle_enable_vulkan} + angle_enable_essl=${angle_enable_essl} + angle_enable_glsl=${angle_enable_glsl} + angle_enable_cl=${angle_enable_cl} + angle_build_tests=${BUILD_TESTS} + target_os=\"$TYPE\" + target_cpu=\"${ARCH:-x64}\" + ${EXTRA_GN_ARGS} + " + DEFINES="${GN_ARGS}" + GN_ARGS=$(echo "$GN_ARGS" | tr -s '\n' ' ' | sed 's/ */ /g') + GN_ARGS=$(echo "$GN_ARGS" | sed 's/\s\s*/ /g' | sed 's/\s*=\s*/=/g' | sed 's/\s*$//') + echoInfo "GN Args: [${GN_ARGS}]" + echoInfo "gn --version: [$(gn --version)]" + echoInfo "ninja --version: [$(ninja --version)]" + echoInfo "Generating GN build files in [build_${TYPE}_${ARCH}]" + + if [ $TYPE == "vs" ]; then + gn gen out/Debug --sln=angle-debug --ide=vs2022 --args='$GN_ARGS' out/Debug + autoninja -C out/Debug + else + gn gen --args='$GN_ARGS' out/Release + ninja -j 10 -k1 -C out/Release + fi + + + + #ninja -C "out/Debug" -j${PARALLEL_MAKE} + +} + +function copy() { + mkdir -p "$1/include" + . "$SECURE_SCRIPT" + if [ -d angle/include ]; then + cp -Rv angle/include/* "$1/include/" + else + echo "Warning: angle/include not found!" + fi + mkdir -p "$1/lib/$TYPE/$PLATFORM/" + if [ -f build_${TYPE}_${ARCH}/libEGL.a ]; then + cp -v build_${TYPE}_${ARCH}/libEGL.a "$1/lib/$TYPE/$PLATFORM/libEGL.a" + else + echo "Warning: build_${TYPE}_${ARCH}/libEGL.a not found!" + fi + if [ -f build_${TYPE}_${ARCH}/libGLESv2.a ]; then + cp -v build_${TYPE}_${ARCH}/libGLESv2.a "$1/lib/$TYPE/$PLATFORM/libGLESv2.a" + else + echo "Warning: build_${TYPE}_${ARCH}libGLESv2.a not found!" + fi + if [ -d "$1/license" ]; then + rm -rf "$1/license" + fi + mkdir -p "$1/license" + cp -v LICENSE "$1/license/" +} + +# Clean the GN build output. +function clean() { + if [ -d "build_${TYPE}_${ARCH}" ]; then + echo "Removing existing build directory: build_${TYPE}_${ARCH}" + rm -rf "build_${TYPE}_${ARCH}" + fi +} diff --git a/scripts/calculate_formulas.sh b/scripts/calculate_formulas.sh index 7ce9fa9d3..12980c12e 100755 --- a/scripts/calculate_formulas.sh +++ b/scripts/calculate_formulas.sh @@ -66,6 +66,7 @@ FORMULAS=( "cairo" "fmt" "metalangle" + "angle" ) if [[ "$TARGET" =~ ^(linux)$ ]]; then @@ -87,6 +88,7 @@ if [[ "$TARGET" =~ ^(linux)$ ]]; then "FreeImage" "fmt" "uriparser" + "angle" ) if [[ "$TARCH" =~ ^(64|arm64|x86_64)$ ]]; then FORMULAS+=( @@ -116,6 +118,7 @@ elif [[ "$TARGET" =~ ^(android)$ ]]; then "opencv" "openssl" "curl" + "angle" ) elif [[ "$TARGET" =~ ^(osx|macos|ios|tvos|xros|catos|watchos)$ ]]; then @@ -166,6 +169,7 @@ elif [[ "$TARGET" =~ ^(osx|macos|ios|tvos|xros|catos|watchos)$ ]]; then fi if [ "$TBUNDLE" == "3" ] || [ "$TBUNDLE" == "0" ]; then FORMULAS+=( + "angle" "fmt" "openssl" "curl" @@ -206,6 +210,7 @@ elif [ "$TARGET" == "vs" ]; then fi if [ "$TBUNDLE" == "2" ] || [ "$TBUNDLE" == "0" ]; then FORMULAS+=( + "angle" "fmt" "openssl" "curl"