summaryrefslogtreecommitdiff
path: root/archived/projt-launcher/scripts/build-cef-from-source.sh
blob: e3c5b9da641cca2d74530cad8f9e3748a60c1420 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/usr/bin/env bash

set -euo pipefail

normalize_bool() {
    case "${1:-}" in
        1|ON|on|TRUE|true|YES|yes) return 0 ;;
        *) return 1 ;;
    esac
}

CEF_VERSION="${LAUNCHER_CEF_VERSION:-${CEF_VERSION:-}}"
CEF_DISTRIBUTION="${LAUNCHER_CEF_DISTRIBUTION:-${CEF_DISTRIBUTION:-minimal}}"
CEF_BRANCH="${LAUNCHER_CEF_SOURCE_BRANCH:-${CEF_SOURCE_BRANCH:-}}"
CEF_TARGET_ARCH="${LAUNCHER_CEF_TARGET_ARCH:-${CEF_TARGET_ARCH:-}}"
CEF_BINARY_PLATFORM="${LAUNCHER_CEF_BINARY_PLATFORM:-${CEF_BINARY_PLATFORM:-}}"
CEF_DOWNLOAD_ROOT="${LAUNCHER_CEF_SOURCE_DOWNLOAD_DIR:-${CEF_SOURCE_DOWNLOAD_DIR:-${PWD}/.cache/cef-source}}"
CEF_DEPOT_TOOLS_DIR="${LAUNCHER_CEF_DEPOT_TOOLS_DIR:-${CEF_DEPOT_TOOLS_DIR:-${CEF_DOWNLOAD_ROOT}/depot_tools}}"
CEF_OUT_FILE="${LAUNCHER_CEF_SOURCE_OUT_FILE:-}"
CEF_INSTALL_BUILD_DEPS="${LAUNCHER_CEF_INSTALL_BUILD_DEPS:-0}"
CEF_FORCE_CLEAN="${LAUNCHER_CEF_SOURCE_FORCE_CLEAN:-0}"
CEF_GN_DEFINES="${LAUNCHER_CEF_GN_DEFINES:-${CEF_GN_DEFINES:-is_official_build=true use_sysroot=true symbol_level=0}}"

if [[ -z "${CEF_TARGET_ARCH}" ]]; then
    case "$(uname -m)" in
        x86_64|amd64) CEF_TARGET_ARCH="x64" ;;
        aarch64|arm64) CEF_TARGET_ARCH="arm64" ;;
    esac
fi

if [[ -z "${CEF_BINARY_PLATFORM}" ]]; then
    case "${CEF_TARGET_ARCH}" in
        x64) CEF_BINARY_PLATFORM="linux64" ;;
        arm64|aarch64) CEF_TARGET_ARCH="arm64"; CEF_BINARY_PLATFORM="linuxarm64" ;;
        *)
            echo "Unsupported Linux CEF target architecture: ${CEF_TARGET_ARCH:-unknown}" >&2
            exit 1
            ;;
    esac
fi

case "${CEF_TARGET_ARCH}" in
    x64) CEF_BUILD_ARG="--x64-build" ;;
    arm64) CEF_BUILD_ARG="--arm64-build" ;;
    *)
        echo "Unsupported Linux CEF target architecture: ${CEF_TARGET_ARCH}" >&2
        exit 1
        ;;
esac

if [[ -z "${CEF_BRANCH}" && -n "${CEF_VERSION}" && "${CEF_VERSION}" =~ chromium-[0-9]+\.0\.([0-9]+)\.[0-9]+ ]]; then
    CEF_BRANCH="${BASH_REMATCH[1]}"
fi

if [[ -z "${CEF_BRANCH}" ]]; then
    echo "LAUNCHER_CEF_SOURCE_BRANCH or CEF_SOURCE_BRANCH must be set for CEF source builds." >&2
    exit 1
fi

DOWNLOAD_DIR="${CEF_DOWNLOAD_ROOT}/chromium_git"
TOOLS_DIR="${CEF_DOWNLOAD_ROOT}/cef-tools"
AUTOMATE_SCRIPT="${TOOLS_DIR}/tools/automate/automate-git.py"
DISTRIB_PARENT="${DOWNLOAD_DIR}/chromium/src/cef/binary_distrib"

mkdir -p "${CEF_DOWNLOAD_ROOT}"

if [[ ! -d "${TOOLS_DIR}/.git" ]]; then
    git clone --filter=blob:none --depth 1 https://github.com/chromiumembedded/cef.git "${TOOLS_DIR}"
else
    git -C "${TOOLS_DIR}" fetch --depth 1 origin HEAD
    git -C "${TOOLS_DIR}" reset --hard FETCH_HEAD
fi

if normalize_bool "${CEF_FORCE_CLEAN}"; then
    rm -rf "${DISTRIB_PARENT}"
fi

find_existing_distrib() {
    local pattern="cef_binary_*_${CEF_BINARY_PLATFORM}*"
    if [[ -n "${CEF_VERSION}" ]]; then
        pattern="cef_binary_${CEF_VERSION}_${CEF_BINARY_PLATFORM}*"
    fi
    find "${DISTRIB_PARENT}" -maxdepth 1 -mindepth 1 -type d -name "${pattern}" | sort | tail -n 1
}

CEF_DISTRIB_ROOT="$(find_existing_distrib || true)"
if [[ -n "${CEF_DISTRIB_ROOT}" && -f "${CEF_DISTRIB_ROOT}/cmake/FindCEF.cmake" && -f "${CEF_DISTRIB_ROOT}/Release/libcef.so" ]]; then
    echo "Reusing existing CEF binary distribution at ${CEF_DISTRIB_ROOT}"
else
    export GN_DEFINES="${CEF_GN_DEFINES}"
    export CEF_USE_GN=1

    base_args=(
        --download-dir="${DOWNLOAD_DIR}"
        --depot-tools-dir="${CEF_DEPOT_TOOLS_DIR}"
        --branch="${CEF_BRANCH}"
        "${CEF_BUILD_ARG}"
    )

    if normalize_bool "${CEF_INSTALL_BUILD_DEPS}"; then
        install_build_deps_args=(
            --no-prompt
            --no-chromeos-fonts
        )
        if [[ "${CEF_TARGET_ARCH}" == "x64" ]]; then
            install_build_deps_args+=(--no-arm)
        fi
        python3 "${AUTOMATE_SCRIPT}" "${base_args[@]}" --no-build
        "${DOWNLOAD_DIR}/chromium/src/build/install-build-deps.sh" \
            "${install_build_deps_args[@]}"
    fi

    build_args=(
        --minimal-distrib
        --minimal-distrib-only
        --no-debug-build
        --force-distrib
    )
    if normalize_bool "${CEF_FORCE_CLEAN}"; then
        build_args+=(
            --force-clean
            --force-update
            --force-build
        )
    fi

    python3 "${AUTOMATE_SCRIPT}" "${base_args[@]}" "${build_args[@]}"
    CEF_DISTRIB_ROOT="$(find_existing_distrib || true)"
fi

if [[ -z "${CEF_DISTRIB_ROOT}" || ! -f "${CEF_DISTRIB_ROOT}/cmake/FindCEF.cmake" || ! -f "${CEF_DISTRIB_ROOT}/Release/libcef.so" ]]; then
    echo "CEF source build did not produce a usable Linux binary distribution." >&2
    exit 1
fi

echo "Using CEF binary distribution from source build: ${CEF_DISTRIB_ROOT}"
if [[ -n "${CEF_OUT_FILE}" ]]; then
    printf '%s\n' "${CEF_DISTRIB_ROOT}" > "${CEF_OUT_FILE}"
fi