Просмотр исходного кода

CI: Update macOS build scripts to use new CMake presets

PatTheMav 2 лет назад
Родитель
Сommit
f0dee071c1

+ 1 - 15
CI/build-macos.sh

@@ -24,16 +24,6 @@
 #   -c, --codesign                 : Codesign OBS and all libraries
 #                                    (default: ad-hoc only)
 #   -n, --notarize                 : Notarize OBS (default: off)
-#   --xcode                        : Create Xcode build environment instead
-#                                    of Ninja
-#   --build-dir                    : Specify alternative build directory
-#                                    (default: build)"
-# Environment Variables (optional):
-#
-#   MACOS_DEPS_VERSION        : Precompiled macOS dependencies version
-#   MACOS_CEF_BUILD_VERSION   : Chromium Embedded Framework version
-#   VLC_VERSION               : VLC version
-#   SPARKLE_VERSION           : Sparkle Framework version
 #
 ##############################################################################
 
@@ -70,9 +60,7 @@ print_usage() {
             "-b, --bundle                   : Create relocatable application bundle (default: off)\n" \
             "-p, --package                  : Create distributable disk image (default: off)\n" \
             "-c, --codesign                 : Codesign OBS and all libraries (default: ad-hoc only)\n" \
-            "-n, --notarize                 : Notarize OBS (default: off)\n" \
-            "--xcode                        : Create Xcode build environment instead of Ninja\n" \
-            "--build-dir                    : Specify alternative build directory (default: build)\n"
+            "-n, --notarize                 : Notarize OBS (default: off)\n"
 }
 
 print_deprecation() {
@@ -101,8 +89,6 @@ obs-build-main() {
             -c | --codesign ) CODESIGN=TRUE; shift ;;
             -n | --notarize ) NOTARIZE=TRUE; PACKAGE=TRUE CODESIGN=TRUE; shift ;;
             -b | --bundle ) BUNDLE=TRUE; shift ;;
-            --xcode ) XCODE=TRUE; shift ;;
-            --build-dir ) BUILD_DIR="${2}"; shift 2 ;;
             -s ) print_deprecation ${1}; exit 1 ;;
             -- ) shift; break ;;
             * ) break ;;

+ 2 - 1
CI/check-cmake.sh

@@ -36,7 +36,8 @@ if ! type cmake-format 2> /dev/null ; then
 fi
 
 find . -type d \( \
-    -path ./\*build -o \
+    -path ./.deps -o \
+    -path ./\*build\* -o \
     -path ./deps/jansson -o \
     -path ./plugins/decklink/\*/decklink-sdk -o \
     -path ./plugins/enc-amf -o \

+ 2 - 1
CI/check-format.sh

@@ -42,7 +42,8 @@ else
 fi
 
 find . -type d \( \
-    -path ./\*build -o \
+    -path ./.deps -o \
+    -path ./\*build\* -o \
     -path ./cmake -o \
     -path ./plugins/decklink/\*/decklink-sdk -o \
     -path ./plugins/enc-amf -o \

+ 1 - 0
CI/include/Brewfile

@@ -2,3 +2,4 @@ brew "cmake"
 brew "ccache"
 brew "ninja"
 brew "coreutils"
+brew "xcbeautify"

+ 8 - 33
CI/include/build_support_macos.sh

@@ -10,22 +10,6 @@
 
 # Setup build environment
 WORKFLOW_CONTENT=$(/bin/cat "${CI_WORKFLOW}")
-CI_DEPS_VERSION=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+DEPS_VERSION_MAC: '([0-9\-]+)'/\1/p")
-CI_DEPS_HASH_X86_64=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+DEPS_HASH_MAC_X86_64: '([0-9a-f]+)'/\1/p")
-CI_DEPS_HASH_ARM64=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+DEPS_HASH_MAC_ARM64: '([0-9a-f]+)'/\1/p")
-CI_VLC_VERSION=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+VLC_VERSION_MAC: '([0-9\.]+)'/\1/p")
-CI_VLC_HASH=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+VLC_HASH_MAC: '([0-9a-f]+)'/\1/p")
-CI_SPARKLE_VERSION=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+SPARKLE_VERSION: '([0-9\.]+)'/\1/p")
-CI_SPARKLE_HASH=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+SPARKLE_HASH: '([0-9a-f]+)'/\1/p")
-CI_QT_VERSION=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+QT_VERSION_MAC: '([0-9\.]+)'/\1/p" | /usr/bin/head -1)
-CI_QT_HASH_X86_64=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+QT_HASH_MAC_X86_64: '([0-9a-f]+)'/\1/p")
-CI_QT_HASH_ARM64=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+QT_HASH_MAC_ARM64: '([0-9a-f]+)'/\1/p")
-CI_QT_HASH_UNIVERSAL=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+QT_HASH_MAC_UNIVERSAL: '([0-9a-f]+)'/\1/p")
-CI_MACOSX_DEPLOYMENT_TARGET_X86_64=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+MACOSX_DEPLOYMENT_TARGET_X86_64: '([0-9\.]+)'/\1/p")
-CI_MACOSX_DEPLOYMENT_TARGET_ARM64=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+MACOSX_DEPLOYMENT_TARGET_ARM64: '([0-9\.]+)'/\1/p")
-CI_MACOS_CEF_VERSION=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+CEF_BUILD_VERSION_MAC: '([0-9]+)'/\1/p")
-CI_CEF_HASH_X86_64=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+CEF_HASH_MAC_X86_64: '([0-9a-f]+)'/\1/p")
-CI_CEF_HASH_ARM64=$(echo "${WORKFLOW_CONTENT}" | /usr/bin/sed -En "s/[ ]+CEF_HASH_MAC_ARM64: '([0-9a-f]+)'/\1/p")
 
 MACOS_VERSION="$(/usr/bin/sw_vers -productVersion)"
 MACOS_MAJOR="$(echo ${MACOS_VERSION} | /usr/bin/cut -d '.' -f 1)"
@@ -48,22 +32,15 @@ fi
 ## DEFINE UTILITIES ##
 check_macos_version() {
     ARCH="${ARCH:-${CURRENT_ARCH}}"
-    if [ "${ARCH}" = "x86_64" ]; then
-        CI_MACOSX_DEPLOYMENT_TARGET="${CI_MACOSX_DEPLOYMENT_TARGET_X86_64}"
-        CI_CEF_HASH="${CI_CEF_HASH_X86_64}"
-        CI_QT_HASH="${CI_QT_HASH_X86_64}"
-        CI_DEPS_HASH="${CI_DEPS_HASH_X86_64}"
-    elif [ "${ARCH}" = "arm64" ]; then
-        CI_MACOSX_DEPLOYMENT_TARGET="${CI_MACOSX_DEPLOYMENT_TARGET_ARM64}"
-        CI_CEF_HASH="${CI_CEF_HASH_ARM64}"
-        CI_QT_HASH="${CI_QT_HASH_ARM64}"
-        CI_DEPS_HASH="${CI_DEPS_HASH_ARM64}"
-    else
-        caught_error "Unsupported architecture '${ARCH}' provided"
-    fi
+
+    case "${ARCH}" in
+        x86_64) ;;
+        arm64) ;;
+        *) caught_error "Unsupported architecture '${ARCH}' provided" ;;
+    esac
 
     step "Check macOS version..."
-    MIN_VERSION=${MACOSX_DEPLOYMENT_TARGET:-${CI_MACOSX_DEPLOYMENT_TARGET}}
+    MIN_VERSION="11.0"
     MIN_MAJOR=$(echo ${MIN_VERSION} | /usr/bin/cut -d '.' -f 1)
     MIN_MINOR=$(echo ${MIN_VERSION} | /usr/bin/cut -d '.' -f 2)
 
@@ -71,9 +48,7 @@ check_macos_version() {
         error "ERROR: Minimum required macOS version is ${MIN_VERSION}, but running on ${MACOS_VERSION}"
     fi
 
-    if [ "${MACOS_MAJOR}" -ge "11" ]; then
-        export CODESIGN_LINKER="ON"
-    fi
+    export CODESIGN_LINKER="ON"
 }
 
 install_homebrew_deps() {

+ 0 - 131
CI/macos/01_install_dependencies.sh

@@ -11,143 +11,12 @@
 # Halt on errors
 set -eE
 
-install_obs-deps() {
-    status "Set up precompiled macOS OBS dependencies v${1}"
-    ensure_dir "${DEPS_BUILD_DIR}"
-    step "Download..."
-    check_and_fetch "https://github.com/obsproject/obs-deps/releases/download/${1}/macos-deps-${1}-${ARCH:-x86_64}.tar.xz" "${2}"
-    mkdir -p obs-deps
-    step "Unpack..."
-    /usr/bin/tar -xf "./macos-deps-${1}-${ARCH:-x86_64}.tar.xz" -C ./obs-deps
-    /usr/bin/xattr -r -d com.apple.quarantine ./obs-deps
-}
-
-install_qt-deps() {
-    status "Set up precompiled dependency Qt v${1}"
-    ensure_dir "${DEPS_BUILD_DIR}"
-    step "Download..."
-
-    if [[ -n ${CI} ]]; then
-        _ARCH='universal'
-        _HASH=${CI_QT_HASH_UNIVERSAL}
-    else
-        _ARCH="${ARCH:-x86_64}"
-        _HASH="${2}"
-    fi
-
-    check_and_fetch "https://github.com/obsproject/obs-deps/releases/download/${1}/macos-deps-qt6-${1}-${_ARCH}.tar.xz" "${_HASH}"
-    mkdir -p obs-deps
-    step "Unpack..."
-    /usr/bin/tar -xf "./macos-deps-qt6-${1}-${_ARCH}.tar.xz" -C ./obs-deps
-    /usr/bin/xattr -r -d com.apple.quarantine ./obs-deps
-}
-
-install_vlc() {
-    status "Set up dependency VLC v${1}"
-    ensure_dir "${DEPS_BUILD_DIR}"
-    unset _SKIP
-
-    if [ "${CI}" -a "${RESTORED_VLC}" ]; then
-        _SKIP=TRUE
-    elif [ -d "${DEPS_BUILD_DIR}/vlc-${1}" -a -f "${DEPS_BUILD_DIR}/vlc-${1}/include/vlc/vlc.h" ]; then
-        _SKIP=TRUE
-    fi
-
-    if [ -z "${_SKIP}" ]; then
-        step "Download..."
-        check_and_fetch "https://downloads.videolan.org/vlc/${1}/vlc-${1}.tar.xz" "${2}"
-        step "Unpack..."
-        /usr/bin/tar -xf vlc-${1}.tar.xz
-    else
-        step "Found existing VLC..."
-    fi
-}
-
-install_sparkle() {
-    status "Set up dependency Sparkle v${1}"
-    ensure_dir "${DEPS_BUILD_DIR}"
-    unset _SKIP
-
-    if [ "${CI}" -a "${RESTORED_SPARKLE}" ]; then
-        _SKIP=TRUE
-    elif [ -d "${DEPS_BUILD_DIR}/obs-deps/lib/Sparkle.framework" -a -f "${DEPS_BUILD_DIR}/obs-deps/lib/Sparkle.framework/Sparkle" ]; then
-        _SKIP=TRUE
-    fi
-
-    if [ -z "${_SKIP}" ]; then
-        step "Download..."
-        check_and_fetch "https://github.com/sparkle-project/Sparkle/releases/download/${1}/Sparkle-${1}.tar.xz" "${2}"
-        step "Unpack..."
-        ensure_dir "${DEPS_BUILD_DIR}/sparkle"
-        /usr/bin/tar -xf ../Sparkle-${1}.tar.xz
-        cp -cpR "${DEPS_BUILD_DIR}"/sparkle/Sparkle.framework "${DEPS_BUILD_DIR}"/obs-deps/lib/
-    else
-        step "Found existing Sparkle Framework..."
-    fi
-}
-
-install_cef() {
-    status "Set up dependency CEF v${1}"
-    ensure_dir "${DEPS_BUILD_DIR}"
-    unset _SKIP
-
-    if [ "${CI}" -a "${RESTORED_CEF}" ]; then
-        _SKIP=TRUE
-    elif [ -d "${DEPS_BUILD_DIR}/cef_binary_${1}_macos_${ARCH:-x86_64}" -a -f "${DEPS_BUILD_DIR}/cef_binary_${1}_macos_${ARCH:-x86_64}/build/libcef_dll_wrapper/libcef_dll_wrapper.a" ]; then
-        _SKIP=TRUE
-    fi
-
-    if [ -z "${_SKIP}" ]; then
-        step "Download..."
-        check_and_fetch "https://cdn-fastly.obsproject.com/downloads/cef_binary_${1}_macos_${ARCH:-x86_64}.tar.xz" "${2}"
-        step "Unpack..."
-        /usr/bin/tar -xf cef_binary_${1}_macos_${ARCH:-x86_64}.tar.xz
-        cd cef_binary_${1}_macos_${ARCH:-x86_64}
-        step "Fix tests..."
-
-        /usr/bin/sed -i '.orig' '/add_subdirectory(tests\/ceftests)/d' ./CMakeLists.txt
-        /usr/bin/sed -E -i '' 's/"10.(9|10|11)"/"'${MACOSX_DEPLOYMENT_TARGET:-${CI_MACOSX_DEPLOYMENT_TARGET}}'"/' ./cmake/cef_variables.cmake
-
-        step "Run CMake..."
-        check_ccache
-        cmake ${CCACHE_OPTIONS} ${QUIET:+-Wno-deprecated -Wno-dev --log-level=ERROR} \
-            -S . -B build \
-            -G Ninja \
-            -DPROJECT_ARCH=${CMAKE_ARCHS:-x86_64} \
-            -DCEF_COMPILER_FLAGS="-Wno-deprecated-copy" \
-            -DCMAKE_BUILD_TYPE=Release \
-            -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++ -Wno-deprecated-declarations -Wno-unknown-warning-option" \
-            -DCMAKE_EXE_LINKER_FLAGS="-std=c++11 -stdlib=libc++" \
-            -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET:-${CI_MACOSX_DEPLOYMENT_TARGET}}
-
-        step "Build CEF v${1}..."
-        cmake --build build
-        mkdir -p build/libcef_dll
-    else
-        step "Found existing Chromium Embedded Framework and loader library..."
-    fi
-}
-
 install_dependencies() {
     status "Install Homebrew dependencies"
     trap "caught_error 'install_dependencies'" ERR
 
-    BUILD_DEPS=(
-        "obs-deps ${MACOS_DEPS_VERSION:-${CI_DEPS_VERSION}} ${MACOS_DEPS_HASH:-${CI_DEPS_HASH}}"
-        "qt-deps ${MACOS_DEPS_VERSION:-${CI_DEPS_VERSION}} ${QT_HASH:-${CI_QT_HASH}}"
-        "cef ${MACOS_CEF_BUILD_VERSION:-${CI_MACOS_CEF_VERSION}} ${CEF_HASH:-${CI_CEF_HASH}}"
-        "vlc ${VLC_VERSION:-${CI_VLC_VERSION}} ${VLC_HASH:-${CI_VLC_HASH}}"
-        "sparkle ${SPARKLE_VERSION:-${CI_SPARKLE_VERSION}} ${SPARKLE_HASH:-${CI_SPARKLE_HASH}}"
-    )
-
     install_homebrew_deps
 
-    for DEPENDENCY in "${BUILD_DEPS[@]}"; do
-        set -- ${DEPENDENCY}
-        trap "caught_error ${DEPENDENCY}" ERR
-        FUNC_NAME="install_${1}"
-        ${FUNC_NAME} ${2} ${3} ${4}
-    done
 }
 
 install-dependencies-standalone() {

+ 38 - 25
CI/macos/02_build_obs.sh

@@ -23,7 +23,16 @@ build_obs() {
 
     ensure_dir "${CHECKOUT_DIR}/"
     step "Build OBS targets..."
-    cmake --build ${BUILD_DIR}
+
+    if [ "${PRESET}" != "macos-ci-${ARCH}" ]; then
+        export NSUnbufferedIO=YES
+
+        set -o pipefail && cmake --build --preset macos-${ARCH} --parallel 2>&1 | xcbeautify
+
+        unset NSUnbufferedIO
+    else
+        cmake --build --preset macos-${ARCH}
+    fi
 }
 
 bundle_obs() {
@@ -33,7 +42,8 @@ bundle_obs() {
     ensure_dir "${CHECKOUT_DIR}"
 
     step "Install OBS application bundle..."
-    cmake --install ${BUILD_DIR}
+
+    find "build_${ARCH}/UI/${BUILD_CONFIG}" -type d -name "OBS.app" | xargs -I{} cp -r {} "build_${ARCH}"/
 }
 
 # Function to configure OBS build
@@ -59,34 +69,41 @@ _configure_obs() {
         YOUTUBE_OPTIONS="-DYOUTUBE_CLIENTID='${YOUTUBE_CLIENTID}' -DYOUTUBE_CLIENTID_HASH='${YOUTUBE_CLIENTID_HASH}' -DYOUTUBE_SECRET='${YOUTUBE_SECRET}' -DYOUTUBE_SECRET_HASH='${YOUTUBE_SECRET_HASH}'"
     fi
 
-    if [ "${XCODE}" ]; then
-        GENERATOR="Xcode"
-    else
-        GENERATOR="Ninja"
-    fi
-
     if [ "${SPARKLE_APPCAST_URL}" -a "${SPARKLE_PUBLIC_KEY}" ]; then
         SPARKLE_OPTIONS="-DSPARKLE_APPCAST_URL=\"${SPARKLE_APPCAST_URL}\" -DSPARKLE_PUBLIC_KEY=\"${SPARKLE_PUBLIC_KEY}\""
     fi
 
-    cmake -S . -B ${BUILD_DIR} -G ${GENERATOR} \
-        -DCEF_ROOT_DIR="${DEPS_BUILD_DIR}/cef_binary_${MACOS_CEF_BUILD_VERSION:-${CI_MACOS_CEF_VERSION}}_macos_${ARCH:-x86_64}" \
-        -DENABLE_BROWSER=ON \
-        -DVLC_PATH="${DEPS_BUILD_DIR}/vlc-${VLC_VERSION:-${CI_VLC_VERSION}}" \
-        -DENABLE_VLC=ON \
-        -DCMAKE_PREFIX_PATH="${DEPS_BUILD_DIR}/obs-deps" \
-        -DBROWSER_LEGACY=$(test "${MACOS_CEF_BUILD_VERSION:-${CI_MACOS_CEF_VERSION}}" -le 3770 && echo "ON" || echo "OFF") \
-        -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET:-${CI_MACOSX_DEPLOYMENT_TARGET}} \
-        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_ARCHS} \
-        -DOBS_CODESIGN_LINKER=${CODESIGN_LINKER:-OFF} \
+    PRESET="macos-${ARCH}"
+
+    if [ "${CI}" ]; then
+        case "${GITHUB_EVENT_NAME}" in
+            schedule) PRESET="macos-${ARCH}" ;;
+            push)
+                if [ "${GITHUB_REF_TYPE}" == 'tag' ]; then
+                    PRESET="macos-release-${ARCH}"
+                else
+                    PRESET="macos-ci-${ARCH}"
+                fi
+                ;;
+            pull_request)
+                if [ "${SEEKING_TESTERS}" == '1' ]; then
+                    PRESET="macos-${ARCH}"
+                else
+                    PRESET="macos-ci-${ARCH}"
+                fi
+                ;;
+            *) PRESET="macos-ci-${ARCH}" ;;
+        esac
+    fi
+
+    cmake -S . --preset ${PRESET} \
         -DCMAKE_INSTALL_PREFIX=${BUILD_DIR}/install \
         -DCMAKE_BUILD_TYPE=${BUILD_CONFIG} \
-        -DOBS_BUNDLE_CODESIGN_IDENTITY="${CODESIGN_IDENT:--}" \
+        -DOBS_CODESIGN_IDENTITY="${CODESIGN_IDENT:--}" \
         ${YOUTUBE_OPTIONS} \
         ${TWITCH_OPTIONS} \
         ${RESTREAM_OPTIONS} \
         ${SPARKLE_OPTIONS} \
-        ${CI:+-DBUILD_FOR_DISTRIBUTION=${BUILD_FOR_DISTRIBUTION} -DOBS_BUILD_NUMBER=${GITHUB_RUN_ID}} \
         ${QUIET:+-Wno-deprecated -Wno-dev --log-level=ERROR}
 }
 
@@ -139,9 +156,7 @@ print_usage() {
             "-v, --verbose                  : Enable more verbose build process output\n" \
             "-a, --architecture             : Specify build architecture (default: x86_64, alternative: arm64)\n" \
             "-c, --codesign                 : Codesign OBS and all libraries (default: ad-hoc only)\n" \
-            "-b, --bundle                   : Create relocatable OBS application bundle in build directory (default: build/install/OBS.app)\n" \
-            "--xcode                        : Create Xcode build environment instead of Ninja\n" \
-            "--build-dir                    : Specify alternative build directory (default: build)\n"
+            "-b, --bundle                   : Create relocatable OBS application bundle in build directory (default: build/install/OBS.app)\n"
 }
 
 build-obs-main() {
@@ -154,8 +169,6 @@ build-obs-main() {
                 -a | --architecture ) ARCH="${2}"; shift 2 ;;
                 -c | --codesign ) CODESIGN=TRUE; shift ;;
                 -b | --bundle ) BUNDLE=TRUE; shift ;;
-                --xcode ) XCODE=TRUE; shift ;;
-                --build-dir ) BUILD_DIR="${2}"; shift 2 ;;
                 -- ) shift; break ;;
                 * ) break ;;
             esac

+ 6 - 2
CI/macos/03_package_obs.sh

@@ -24,9 +24,13 @@ package_obs() {
     ensure_dir "${CHECKOUT_DIR}"
 
     step "Package OBS..."
-    cmake --build ${BUILD_DIR} -t package
+    BUILD_DIR="build_${ARCH}"
 
-    DMG_NAME=$(/usr/bin/find "${BUILD_DIR}" -type f -name "OBS-*.dmg" -depth 1 | sort -rn | head -1)
+    pushd "${BUILD_DIR}" > /dev/null > /dev/null
+    cpack -C ${BUILD_CONFIG:-RelWithDebInfo}
+    popd > /dev/null
+
+    DMG_NAME=$(/usr/bin/find "${BUILD_DIR}" -type f -name "obs-studio-*.dmg" -depth 1 | sort -rn | head -1)
 
     if [ "${DMG_NAME}" ]; then
         mv "${DMG_NAME}" "${BUILD_DIR}/${FILE_NAME}"

+ 276 - 0
CMakePresets.json

@@ -0,0 +1,276 @@
+{
+  "version": 5,
+  "cmakeMinimumRequired": {
+    "major": 3,
+    "minor": 22,
+    "patch": 0
+  },
+  "configurePresets": [
+    {
+      "name": "macos",
+      "hidden": true,
+      "condition": {
+        "type": "equals",
+        "lhs": "${hostSystemName}",
+        "rhs": "Darwin"
+      },
+      "generator": "Xcode",
+      "warnings": {"dev": true, "deprecated": true},
+      "cacheVariables": {
+        "QT_VERSION": "6",
+        "ENABLE_BROWSER": true,
+        "ENABLE_VLC": true,
+        "CMAKE_OSX_DEPLOYMENT_TARGET": "11.0",
+        "OBS_CODESIGN_IDENTITY": "-",
+        "OBS_CMAKE_VERSION": "3.0.0"
+      }
+    },
+    {
+      "name": "macos-arm64",
+      "inherits": "macos",
+      "displayName": "macOS Apple Silicon",
+      "description": "obs-studio for macOS 11.0+ (Apple Silicon)",
+      "binaryDir": "${sourceDir}/build_arm64",
+      "cacheVariables": {
+        "CMAKE_OSX_ARCHITECTURES": "arm64"
+      }
+    },
+    {
+      "name": "macos-x86_64",
+      "inherits": "macos",
+      "displayName": "macOS Apple Intel",
+      "description": "obs-studio for macOS 11.0+ (Intel)",
+      "binaryDir": "${sourceDir}/build_x86_64",
+      "cacheVariables": {
+        "CMAKE_OSX_ARCHITECTURES": "x86_64"
+      }
+    },
+    {
+      "name": "macos-ci-arm64",
+      "inherits": ["macos-arm64"],
+      "generator": "Ninja",
+      "cacheVariables": {
+        "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+      }
+    },
+    {
+      "name": "macos-ci-x86_64",
+      "inherits": ["macos-x86_64"],
+      "generator": "Ninja",
+      "cacheVariables": {
+        "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+      }
+    },
+    {
+      "name": "macos-release-arm64",
+      "displayName": "macOS Apple Silicon (Release)",
+      "description": "obs-studio for macOS (Apple) - Release Configuration",
+      "inherits": ["macos-arm64"],
+      "cacheVariables": {
+        "ENABLE_RELEASE_BUILD": true,
+        "ENABLE_SPARKLE": true,
+        "OBS_SPARKLE_KEY": {"type": "STRING", "value": ""},
+        "OBS_CODESIGN_IDENTITY": "$penv{CODESIGN_IDENT}",
+        "SPARKLE_APPCAST_URL": {"type": "STRING", "value": "https://obsproject.com/osx_update/updates_arm64_v2.xml"},
+        "SPARKLE_PUBLIC_KEY": {"type": "STRING", "value": "HQ5/Ba9VHOuEWaM0jtVjZzgHKFJX9YTl+HNVpgNF0iM="},
+        "VIRTUALCAM_DEVICE_UUID": {"type": "STRING", "value": "7626645E-4425-469E-9D8B-97E0FA59AC75"},
+        "VIRTUALCAM_SOURCE_UUID": {"type": "STRING", "value": "A8D7B8AA-65AD-4D21-9C42-66480DBFA8E1"},
+        "VIRTUALCAM_SINK_UUID": {"type": "STRING", "value": "A3F16177-7044-4DD8-B900-72E2419F7A9A"}
+      }
+    },
+    {
+      "name": "macos-release-x86_64",
+      "displayName": "macOS Intel (Release)",
+      "description": "obs-studio for macOS (Intel) - Release Configuration",
+      "inherits": ["macos-x86_64"],
+      "cacheVariables": {
+        "ENABLE_RELEASE_BUILD": true,
+        "ENABLE_SPARKLE": true,
+        "OBS_SPARKLE_KEY": {"type": "STRING", "value": ""},
+        "OBS_CODESIGN_IDENTITY": "$penv{CODESIGN_IDENT}",
+        "SPARKLE_APPCAST_URL": {"type": "STRING", "value": "https://obsproject.com/osx_update/updates_x86_64_v2.xml"},
+        "SPARKLE_PUBLIC_KEY": {"type": "STRING", "value": "HQ5/Ba9VHOuEWaM0jtVjZzgHKFJX9YTl+HNVpgNF0iM="},
+        "VIRTUALCAM_DEVICE_UUID": {"type": "STRING", "value": "7626645E-4425-469E-9D8B-97E0FA59AC75"},
+        "VIRTUALCAM_SOURCE_UUID": {"type": "STRING", "value": "A8D7B8AA-65AD-4D21-9C42-66480DBFA8E1"},
+        "VIRTUALCAM_SINK_UUID": {"type": "STRING", "value": "A3F16177-7044-4DD8-B900-72E2419F7A9A"}
+      }
+    },
+    {
+      "name": "linux-aarch64",
+      "displayName": "Linux aarch64",
+      "description": "obs-studio for Linux (aarch64)",
+      "condition": {
+        "type": "equals",
+        "lhs": "${hostSystemName}",
+        "rhs": "Linux"
+      },
+      "binaryDir": "${sourceDir}/build_aarch64",
+      "generator": "Ninja",
+      "warnings": {"dev": true, "deprecated": true},
+      "cacheVariables": {
+        "ENABLE_WAYLAND": true,
+        "ENABLE_VLC": true,
+        "QT_VERSION": "6",
+        "CMAKE_BUILD_TYPE": "Debug",
+        "OBS_CMAKE_VERSION": "2.0.0",
+        "CMAKE_PREFIX_PATH": {
+          "type": "PATH",
+          "value": ""
+        }
+      }
+    },
+    {
+      "name": "linux-ci-aarch64",
+      "inherits": ["linux-aarch64"],
+      "hidden": true,
+      "cacheVariables": {
+        "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+      }
+    },
+    {
+      "name": "linux-release-aarch64",
+      "displayName": "Linux aarch64 (Release)",
+      "description": "obs-studio for Linux (aarch64) - Release Configuration",
+      "inherits": "linux-aarch64",
+      "cacheVariables": {
+        "ENABLE_RELEASE_BUILD": true
+      }
+    },
+    {
+      "name": "linux-x86_64",
+      "displayName": "Linux x86_64",
+      "description": "obs-studio for Linux (x86_64)",
+      "condition": {
+        "type": "equals",
+        "lhs": "${hostSystemName}",
+        "rhs": "Linux"
+      },
+      "binaryDir": "${sourceDir}/build_x86_64",
+      "generator": "Ninja",
+      "warnings": {"dev": true, "deprecated": true},
+      "cacheVariables": {
+        "ENABLE_WAYLAND": true,
+        "ENABLE_VLC": true,
+        "QT_VERSION": "6",
+        "CMAKE_BUILD_TYPE": "Debug",
+        "OBS_CMAKE_VERSION": "2.0.0",
+        "CMAKE_PREFIX_PATH": {
+          "type": "PATH",
+          "value": ""
+        },
+        "CEF_ROOT_DIR": {
+          "type": "PATH",
+          "value": ""
+        }
+      }
+    },
+    {
+      "name": "linux-ci-x86_64",
+      "inherits": ["linux-x86_64"],
+      "hidden": true,
+      "cacheVariables": {
+        "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+      }
+    },
+    {
+      "name": "linux-release-x86_64",
+      "displayName": "Linux x86_64 (Release)",
+      "description": "obs-studio for Linux (x86_64) - Release Configuration",
+      "inherits": "linux-x86_64",
+      "cacheVariables": {
+        "ENABLE_RELEASE_BUILD": true,
+        "ENABLE_BROWSER": true
+      }
+    },
+    {
+      "name": "windows-x64",
+      "displayName": "Windows x64",
+      "description": "obs-studio for Windows (x64)",
+      "condition": {
+        "type": "equals",
+        "lhs": "${hostSystemName}",
+        "rhs": "Windows"
+      },
+      "architecture": "x64",
+      "binaryDir": "${sourceDir}/build_x64",
+      "generator": "Visual Studio 17 2022",
+      "warnings": {"dev": true, "deprecated": true},
+      "cacheVariables": {
+        "QT_VERSION": "6",
+        "CMAKE_BUILD_TYPE": "Debug",
+        "OBS_WINDOWS_LEGACY_DIRS": true,
+        "CMAKE_SYSTEM_VERSION": "10.0.18363.657",
+        "OBS_CMAKE_VERSION": "2.0.0",
+        "CMAKE_PREFIX_PATH": {
+          "type": "PATH",
+          "value": ""
+        },
+        "CEF_ROOT_DIR": {
+          "type": "PATH",
+          "value": ""
+        },
+        "VLC_PATH": {
+          "type": "PATH",
+          "value": ""
+        }
+      }
+    },
+    {
+      "name": "windows-ci-x64",
+      "inherits": "windows-x64",
+      "hidden": true,
+      "cacheVariables": {
+        "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+      }
+    },
+    {
+      "name": "windows-release-x64",
+      "displayName": "Windowx x64 (Release)",
+      "description": "obs-studio for Windows (x64) - Release Configuration",
+      "inherits": "windows-x64",
+      "cacheVariables": {
+        "ENABLE_RELEASE_BUILD": true,
+        "ENABLE_BROWSER": true,
+        "ENABLE_VLC": true,
+        "VIRTUALCAM_GUID": { "type": "STRING", "value": "A3FCE0F5-3493-419F-958A-ABA1250EC20B"}
+      }
+    }
+  ],
+  "buildPresets": [
+    {
+      "name": "macos-arm64",
+      "configurePreset": "macos-arm64",
+      "displayName": "macOS Apple Silicon",
+      "description": "macOS build for Apple Silicon",
+      "configuration": "RelWithDebInfo"
+    },
+    {
+      "name": "macos-x86_64",
+      "configurePreset": "macos-x86_64",
+      "displayName": "macOS Intel",
+      "description": "macOS build for Intel",
+      "configuration": "RelWithDebInfo"
+    },
+    {
+      "name": "linux-aarch64",
+      "configurePreset": "linux-aarch64",
+      "displayName": "Linux aarch64",
+      "description": "Linux build for aarch64 (aka arm64)",
+      "configuration": "RelWithDebInfo"
+    },
+    {
+      "name": "linux-x86_64",
+      "configurePreset": "linux-x86_64",
+      "displayName": "Linux x86_64",
+      "description": "Linux build for x86_64 (aka amd64)",
+      "configuration": "RelWithDebInfo"
+    },
+    {
+      "name": "windows-x64",
+      "configurePreset": "windows-x64",
+      "displayName": "Windows 64-bit",
+      "description": "Windows build for 64-bit (aka x64)",
+      "configuration": "RelWithDebInfo"
+    }
+  ]
+}