diff --git a/.github/workflows/insider-linux.yml b/.github/workflows/insider-linux.yml index 8229111..e8a8c77 100644 --- a/.github/workflows/insider-linux.yml +++ b/.github/workflows/insider-linux.yml @@ -276,6 +276,9 @@ jobs: - slug: RISCV64 vscode_arch: riscv64 npm_arch: riscv64 + - slug: LOONG64 + vscode_arch: loong64 + npm_arch: loong64 env: BUILD_SOURCEVERSION: ${{ needs.compile.outputs.BUILD_SOURCEVERSION }} DISABLED: ${{ vars[format('DISABLE_INSIDER_LINUX_REH_{0}', matrix.slug)] }} diff --git a/.github/workflows/stable-linux.yml b/.github/workflows/stable-linux.yml index 65d6fe7..92e7186 100644 --- a/.github/workflows/stable-linux.yml +++ b/.github/workflows/stable-linux.yml @@ -274,6 +274,9 @@ jobs: - slug: RISCV64 vscode_arch: riscv64 npm_arch: riscv64 + - slug: LOONG64 + vscode_arch: loong64 + npm_arch: loong64 env: BUILD_SOURCEVERSION: ${{ needs.compile.outputs.BUILD_SOURCEVERSION }} DISABLED: ${{ vars[format('DISABLE_STABLE_LINUX_REH_{0}', matrix.slug)] }} diff --git a/build/build.sh b/build/build.sh index cc11a9a..66d6723 100755 --- a/build/build.sh +++ b/build/build.sh @@ -59,6 +59,8 @@ elif [[ "${UNAME_ARCH}" == "ppc64le" ]]; then export VSCODE_ARCH="ppc64le" elif [[ "${UNAME_ARCH}" == "riscv64" ]]; then export VSCODE_ARCH="riscv64" +elif [[ "${UNAME_ARCH}" == "loongarch64" ]]; then + export VSCODE_ARCH="loong64" else export VSCODE_ARCH="x64" fi diff --git a/check_tags.sh b/check_tags.sh index b738cbe..91a9afa 100755 --- a/check_tags.sh +++ b/check_tags.sh @@ -426,6 +426,32 @@ elif [[ "${ASSETS}" != "null" ]]; then fi fi + # linux-loong64 + if [[ "${VSCODE_ARCH}" == "loong64" || "${CHECK_ALL}" == "yes" ]]; then + export SHOULD_BUILD_DEB="no" + export SHOULD_BUILD_RPM="no" + export SHOULD_BUILD_APPIMAGE="no" + export SHOULD_BUILD_TAR="no" + + if [[ -z $( contains "${APP_NAME_LC}-reh-linux-loong64-${RELEASE_VERSION}.tar.gz" ) ]]; then + echo "Building on Linux Loong64 because we have no REH archive" + export SHOULD_BUILD="yes" + else + export SHOULD_BUILD_REH="no" + fi + + if [[ -z $( contains "${APP_NAME_LC}-reh-web-linux-loong64-${RELEASE_VERSION}.tar.gz" ) ]]; then + echo "Building on Linux Loong64 because we have no REH-web archive" + export SHOULD_BUILD="yes" + else + export SHOULD_BUILD_REH_WEB="no" + fi + + if [[ "${SHOULD_BUILD}" != "yes" ]]; then + echo "Already have all the Linux Loong64 builds" + fi + fi + # linux-x64 if [[ "${VSCODE_ARCH}" == "x64" || "${CHECK_ALL}" == "yes" ]]; then if [[ -z $( contains "amd64.deb" ) ]]; then @@ -544,6 +570,10 @@ else elif [[ "${VSCODE_ARCH}" == "riscv64" ]]; then SHOULD_BUILD_DEB="no" SHOULD_BUILD_RPM="no" + elif [[ "${VSCODE_ARCH}" == "loong64" ]]; then + SHOULD_BUILD_DEB="no" + SHOULD_BUILD_RPM="no" + SHOULD_BUILD_TAR="no" fi if [[ "${VSCODE_ARCH}" != "x64" || "${DISABLE_APPIMAGE}" == "yes" ]]; then export SHOULD_BUILD_APPIMAGE="no" diff --git a/electron.riscv64.sh b/electron_linux_riscv64.sh similarity index 100% rename from electron.riscv64.sh rename to electron_linux_riscv64.sh diff --git a/package_linux_bin.sh b/package_linux_bin.sh index 8239c7f..03a8ea6 100755 --- a/package_linux_bin.sh +++ b/package_linux_bin.sh @@ -29,12 +29,15 @@ elif [[ "${VSCODE_ARCH}" == "riscv64" ]]; then export ELECTRON_SKIP_BINARY_DOWNLOAD=1 export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 export VSCODE_SKIP_SETUPENV=1 +fi - source ../electron.riscv64.sh +if [[ -f "../electron_linux_${VSCODE_ARCH}.sh" ]]; then + # shellcheck disable=SC1090 + source "../electron_linux_${VSCODE_ARCH}.sh" - if [[ "${ELECTRON_VERSION}" != "$(yarn config get target)" ]]; then + if [[ "${ELECTRON_VERSION}" != "$( yarn config get target )" ]]; then # Fail the pipeline if electron target doesn't match what is used. - echo "Electron RISC-V binary version doesn't match target electron version!" + echo "Electron ${VSCODE_ARCH} binary version doesn't match target electron version!" echo "Releases available at: https://github.com/${VSCODE_ELECTRON_REPOSITORY}/releases" exit 1 fi diff --git a/package_linux_reh.sh b/package_linux_reh.sh index 92857ba..9a3e36c 100755 --- a/package_linux_reh.sh +++ b/package_linux_reh.sh @@ -52,6 +52,15 @@ elif [[ "${VSCODE_ARCH}" == "riscv64" ]]; then export VSCODE_NODEJS_SITE='https://unofficial-builds.nodejs.org' # part of the url before '/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz' export VSCODE_NODEJS_URLROOT='/download/release' +elif [[ "${VSCODE_ARCH}" == "loong64" ]]; then + NODE_VERSION="20.16.0" + VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:trixie-devtoolset-loong64" + + export ELECTRON_SKIP_BINARY_DOWNLOAD=1 + export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 + export VSCODE_SKIP_SETUPENV=1 + export VSCODE_NODEJS_SITE='https://unofficial-builds.nodejs.org' + export VSCODE_NODEJS_URLROOT='/download/release' fi export VSCODE_PLATFORM='linux' @@ -142,9 +151,15 @@ if [[ "${SHOULD_BUILD_REH}" != "no" ]]; then EXPECTED_GLIBC_VERSION="${GLIBC_VERSION}" EXPECTED_GLIBCXX_VERSION="${GLIBCXX_VERSION}" SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ./build/azure-pipelines/linux/verify-glibc-requirements.sh - echo "Archiving REH" pushd "../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" + + if [[ -f "../ripgrep_${VSCODE_PLATFORM}_${VSCODE_ARCH}.sh" ]]; then + exec "../ripgrep_${VSCODE_PLATFORM}_${VSCODE_ARCH}.sh" + fi + + echo "Archiving REH" tar czf "../assets/${APP_NAME_LC}-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}-${RELEASE_VERSION}.tar.gz" . + popd fi @@ -155,9 +170,15 @@ if [[ "${SHOULD_BUILD_REH_WEB}" != "no" ]]; then EXPECTED_GLIBC_VERSION="${GLIBC_VERSION}" EXPECTED_GLIBCXX_VERSION="${GLIBCXX_VERSION}" SEARCH_PATH="../vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ./build/azure-pipelines/linux/verify-glibc-requirements.sh - echo "Archiving REH-web" pushd "../vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}" + + if [[ -f "../ripgrep_${VSCODE_PLATFORM}_${VSCODE_ARCH}.sh" ]]; then + exec "../ripgrep_${VSCODE_PLATFORM}_${VSCODE_ARCH}.sh" + fi + + echo "Archiving REH-web" tar czf "../assets/${APP_NAME_LC}-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}-${RELEASE_VERSION}.tar.gz" . + popd fi diff --git a/patches/linux/arch-3-loong64.patch b/patches/linux/arch-3-loong64.patch new file mode 100644 index 0000000..2c113a5 --- /dev/null +++ b/patches/linux/arch-3-loong64.patch @@ -0,0 +1,96 @@ +diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js +index df4fda0c898..ce8f21bbc0e 100644 +--- a/build/gulpfile.reh.js ++++ b/build/gulpfile.reh.js +@@ -52,2 +52,3 @@ const BUILD_TARGETS = [ + { platform: 'linux', arch: 'riscv64' }, ++ { platform: 'linux', arch: 'loong64' }, + { platform: 'alpine', arch: 'arm64' }, +diff --git a/build/gulpfile.scan.js b/build/gulpfile.scan.js +index 0eafadc1fff..3c1d6fb5bfc 100644 +--- a/build/gulpfile.scan.js ++++ b/build/gulpfile.scan.js +@@ -28,2 +28,3 @@ const BUILD_TARGETS = [ + { platform: 'linux', arch: 'riscv64' }, ++ { platform: 'linux', arch: 'loong64' }, + ]; +diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js +index b208d700f2c..4be8f93f704 100644 +--- a/build/gulpfile.vscode.js ++++ b/build/gulpfile.vscode.js +@@ -489,2 +489,3 @@ const BUILD_TARGETS = [ + { platform: 'linux', arch: 'riscv64' }, ++ { platform: 'linux', arch: 'loong64' }, + ]; +diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs +index 29228cb4235..c1163029377 100644 +--- a/cli/src/update_service.rs ++++ b/cli/src/update_service.rs +@@ -220,2 +220,3 @@ pub enum Platform { + LinuxRISCV64, ++ LinuxLoong64, + DarwinX64, +@@ -235,2 +236,3 @@ impl Platform { + Platform::LinuxRISCV64 => Some("linux-riscv64".to_owned()), ++ Platform::LinuxLoong64 => Some("linux-loong64".to_owned()), + Platform::DarwinX64 => Some("darwin".to_owned()), +@@ -256,2 +258,3 @@ impl Platform { + Platform::LinuxRISCV64 => "server-linux-riscv64", ++ Platform::LinuxLoong64 => "server-linux-loong64", + Platform::DarwinX64 => "server-darwin", +@@ -278,2 +281,3 @@ impl Platform { + Platform::LinuxRISCV64 => "cli-linux-riscv64", ++ Platform::LinuxLoong64 => "cli-linux-loong64", + Platform::DarwinX64 => "cli-darwin-x64", +@@ -314,2 +318,4 @@ impl Platform { + Some(Platform::LinuxRISCV64) ++ } else if cfg!(all(target_os = "linux", target_arch = "loongarch64")) { ++ Some(Platform::LinuxLoong64) + } else if cfg!(all(target_os = "macos", target_arch = "x86_64")) { +@@ -344,2 +350,3 @@ impl fmt::Display for Platform { + Platform::LinuxRISCV64 => "LinuxRISCV64", ++ Platform::LinuxLoong64 => "LinuxLoong64", + Platform::DarwinX64 => "DarwinX64", +diff --git a/cli/src/util/prereqs.rs b/cli/src/util/prereqs.rs +index 137a2570130..8f1e20c2aa9 100644 +--- a/cli/src/util/prereqs.rs ++++ b/cli/src/util/prereqs.rs +@@ -90,2 +90,4 @@ impl PreReqChecker { + Platform::LinuxRISCV64 ++ } else if cfg!(target_arch = "loongarch64") { ++ Platform::LinuxLoong64 + } else { +diff --git a/resources/server/bin/helpers/check-requirements-linux.sh b/resources/server/bin/helpers/check-requirements-linux.sh +index 91c9d203387..7776dbcbc24 100644 +--- a/resources/server/bin/helpers/check-requirements-linux.sh ++++ b/resources/server/bin/helpers/check-requirements-linux.sh +@@ -58,2 +58,3 @@ case $ARCH in + riscv64) LDCONFIG_ARCH="RISC-V";; ++ loongarch64) LDCONFIG_ARCH="double-float";; + esac +diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts +index 03e78ca3116..8e59218d7ad 100644 +--- a/src/vs/platform/extensionManagement/common/extensionManagement.ts ++++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts +@@ -44,2 +44,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) { + case TargetPlatform.LINUX_RISCV64: return 'Linux RISC-V 64'; ++ case TargetPlatform.LINUX_LOONG64: return 'Linux Loong64'; + +@@ -69,2 +70,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform { + case TargetPlatform.LINUX_RISCV64: return TargetPlatform.LINUX_RISCV64; ++ case TargetPlatform.LINUX_LOONG64: return TargetPlatform.LINUX_LOONG64; + +@@ -113,2 +115,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string | + } ++ if (arch === 'loong64') { ++ return TargetPlatform.LINUX_LOONG64; ++ } + return TargetPlatform.UNKNOWN; +diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts +index a7aa2bb23bf..a4d076ce596 100644 +--- a/src/vs/platform/extensions/common/extensions.ts ++++ b/src/vs/platform/extensions/common/extensions.ts +@@ -296,2 +296,3 @@ export const enum TargetPlatform { + LINUX_RISCV64 = 'linux-riscv64', ++ LINUX_LOONG64 = 'linux-loong64', + diff --git a/patches/linux/yarn-dependencies.patch b/patches/linux/yarn-dependencies.patch index 9545000..6b9ce32 100644 --- a/patches/linux/yarn-dependencies.patch +++ b/patches/linux/yarn-dependencies.patch @@ -1,9 +1,12 @@ diff --git a/build/npm/postinstall.js b/build/npm/postinstall.js -index d45d5bc..81a6449 100644 +index 88e3c9e..4cad4f1 100644 --- a/build/npm/postinstall.js +++ b/build/npm/postinstall.js -@@ -56,3 +56,3 @@ function yarnInstall(dir, opts) { +@@ -55,4 +55,6 @@ function npmInstall(dir, opts) { opts.cwd = root; - if (process.env['npm_config_arch'] === 'arm64') { + if (process.env['npm_config_arch'] === 'arm64' || process.env['npm_config_arch'] === 'arm' || process.env['npm_config_arch'] === 'ppc64' || process.env['npm_config_arch'] === 'riscv64') { run('sudo', ['docker', 'run', '--rm', '--privileged', 'multiarch/qemu-user-static', '--reset', '-p', 'yes'], opts); ++ } else if (process.env['npm_config_arch'] === 'loong64') { ++ run('sudo', ['docker', 'run', '--rm', '--privileged', 'loongcr.lcpu.dev/multiarch/archlinux', '--reset', '-p', 'yes'], opts); + } diff --git a/ripgrep_linux_loong64.sh b/ripgrep_linux_loong64.sh new file mode 100755 index 0000000..da7126b --- /dev/null +++ b/ripgrep_linux_loong64.sh @@ -0,0 +1,11 @@ +# When installing @vscode/ripgrep, it will try to download prebuilt ripgrep binary from https://github.com/microsoft/ripgrep-prebuilt, +# however, loong64 is not a supported architecture and x86 will be picked as fallback, so we need to replace it with a native one. + +RG_PATH="node_modules/@vscode/ripgrep/bin/rg" +RG_VERSION="14.1.1" + +echo "Replacing ripgrep binary with loong64 one" + +rm "${RG_PATH}" +curl --silent --fail -L https://github.com/darkyzhou/ripgrep-loongarch64-musl/releases/download/${RG_VERSION}/rg -o "${RG_PATH}" +chmod +x "${RG_PATH}"