feat: add riscv64 client (#1922)

This commit is contained in:
Levi Zim 2024-06-12 00:41:17 +08:00 committed by GitHub
parent ffd7e631b0
commit 8c9acad540
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 76 additions and 27 deletions

View file

@ -149,6 +149,9 @@ jobs:
- vscode_arch: armhf
npm_arch: arm
image: vscodium/vscodium-linux-build-agent:bionic-armhf
- vscode_arch: riscv64
npm_arch: riscv64
image: vscodium/vscodium-linux-build-agent:focal-riscv64
container:
image: ${{ matrix.image }}
env:

View file

@ -148,6 +148,9 @@ jobs:
- vscode_arch: armhf
npm_arch: arm
image: vscodium/vscodium-linux-build-agent:bionic-armhf
- vscode_arch: riscv64
npm_arch: riscv64
image: vscodium/vscodium-linux-build-agent:focal-riscv64
container:
image: ${{ matrix.image }}
env:

View file

@ -330,20 +330,26 @@ elif [[ "${ASSETS}" != "null" ]]; then
# linux-riscv64
if [[ "${VSCODE_ARCH}" == "riscv64" || "${CHECK_ALL}" == "yes" ]]; then
SHOULD_BUILD_APPIMAGE="no"
SHOULD_BUILD_DEB="no"
SHOULD_BUILD_RPM="no"
SHOULD_BUILD_TAR="no"
export SHOULD_BUILD_DEB="no"
export SHOULD_BUILD_RPM="no"
export SHOULD_BUILD_APPIMAGE="no"
if [[ -z $( contains "${APP_NAME}-linux-riscv64-${RELEASE_VERSION}.tar.gz" ) ]]; then
echo "Building on Linux RISC-V 64 because we have no TAR"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_TAR="no"
fi
if [[ -z $( contains "${APP_NAME_LC}-reh-linux-riscv64-${RELEASE_VERSION}.tar.gz" ) ]]; then
echo "Building on Linux RISC-V64 because we have no REH archive"
echo "Building on Linux RISC-V 64 because we have no REH archive"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_REH="no"
fi
if [[ "${SHOULD_BUILD}" != "yes" ]]; then
echo "Already have all the Linux PowerPC64LE builds"
echo "Already have all the Linux riscv64 builds"
fi
fi
@ -394,10 +400,13 @@ else
if [[ "${IS_SPEARHEAD}" == "yes" ]]; then
export SHOULD_BUILD_SRC="yes"
elif [[ "${OS_NAME}" == "linux" ]]; then
if [[ "${VSCODE_ARCH}" == "ppc64le" || "${VSCODE_ARCH}" == "riscv64" ]]; then
if [[ "${VSCODE_ARCH}" == "ppc64le" ]]; then
SHOULD_BUILD_DEB="no"
SHOULD_BUILD_RPM="no"
SHOULD_BUILD_TAR="no"
elif [[ "${VSCODE_ARCH}" == "riscv64" ]]; then
SHOULD_BUILD_DEB="no"
SHOULD_BUILD_RPM="no"
fi
if [[ "${VSCODE_ARCH}" != "x64" ]]; then
export SHOULD_BUILD_APPIMAGE="no"

View file

@ -22,6 +22,17 @@ if [[ "${VSCODE_ARCH}" == "ppc64le" ]]; then
export VSCODE_SYSROOT_PREFIX='-glibc-2.28'
fi
if [[ "${VSCODE_ARCH}" == "riscv64" ]]; then
export VSCODE_ELECTRON_REPO='riscv-forks/electron-riscv-releases'
export ELECTRON_SKIP_BINARY_DOWNLOAD=1
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
ELECTRON_VERSION="v29.4.0"
# Look for releases here if electron version used by vscode changed
# https://github.com/riscv-forks/electron-riscv-releases/releases
export VSCODE_ELECTRON_TAG="${ELECTRON_VERSION}.riscv2"
echo "7244465fe0c1a6ac6e34fe765a9d90fe0017b1a6d3406fd6b8dd9f5d2c8c9df5 *electron-v29.4.0-linux-riscv64.zip" >> build/checksums/electron.txt
fi
if [[ -d "../patches/${OS_NAME}/client/" ]]; then
for file in "../patches/${OS_NAME}/client/"*.patch; do
if [[ -f "${file}" ]]; then

View file

@ -1,5 +1,5 @@
diff --git a/build/azure-pipelines/linux/setup-env.sh b/build/azure-pipelines/linux/setup-env.sh
index e42a6b12b1f..b31af12b086 100755
index 9bfbf9ab41a..3064f783d8c 100755
--- a/build/azure-pipelines/linux/setup-env.sh
+++ b/build/azure-pipelines/linux/setup-env.sh
@@ -7,6 +7,10 @@ if [ "$SYSROOT_ARCH" == "x64" ]; then
@ -97,10 +97,33 @@ index 6f8144b0954..8a8195e9b66 100644
BUILD_TARGETS.forEach(buildTarget => {
diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
index e1507e0424f..80ed8d91a41 100644
index 3b1aeafd080..8363dae382c 100644
--- a/build/gulpfile.vscode.js
+++ b/build/gulpfile.vscode.js
@@ -429,6 +429,8 @@ const BUILD_TARGETS = [
@@ -339,11 +339,21 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
all = es.merge(all, shortcut);
}
+ const electronOverride = {};
+ if (process.env.VSCODE_ELECTRON_REPO) {
+ // electron doesn't support riscv64 and ppc64le, override the repo with `VSCODE_ELECTRON_REPO`.
+ electronOverride.repo = process.env.VSCODE_ELECTRON_REPO;
+ }
+
+ if (process.env.VSCODE_ELECTRON_TAG) {
+ electronOverride.tag = process.env.VSCODE_ELECTRON_TAG;
+ }
+
let result = all
.pipe(util.skipDirectories())
.pipe(util.fixWin32DirectoryPermissions())
.pipe(filter(['**', '!**/.github/**'], { dot: true })) // https://github.com/microsoft/vscode/issues/116523
- .pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false }))
+ .pipe(electron({ ...config, ...electronOverride, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false }))
.pipe(filter(['**', '!LICENSE', '!version'], { dot: true }));
if (platform === 'linux') {
@@ -432,6 +442,8 @@ const BUILD_TARGETS = [
{ platform: 'linux', arch: 'x64' },
{ platform: 'linux', arch: 'armhf' },
{ platform: 'linux', arch: 'arm64' },
@ -181,10 +204,10 @@ index 92f8065f262..b86b4dba2b8 100644
cmd.push(`-l${chromiumSysroot}/usr/lib`);
cmd.push(`-L${vscodeSysroot}/debian/libxkbfile1/DEBIAN/shlibs`);
diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js
index bdb265b6fec..4695f335416 100644
index d843c090063..3b869cbbe6d 100644
--- a/build/linux/debian/dep-lists.js
+++ b/build/linux/debian/dep-lists.js
@@ -140,6 +140,85 @@ exports.referenceGeneratedDepsByArch = {
@@ -139,6 +139,85 @@ exports.referenceGeneratedDepsByArch = {
'libxkbfile1 (>= 1:1.1.0)',
'libxrandr2',
'xdg-utils (>= 1.0.2)'
@ -272,10 +295,10 @@ index bdb265b6fec..4695f335416 100644
//# sourceMappingURL=dep-lists.js.map
\ No newline at end of file
diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts
index 3d6c2eba6e9..b8987ea7579 100644
index 4028370cd02..ff4df2f08cb 100644
--- a/build/linux/debian/dep-lists.ts
+++ b/build/linux/debian/dep-lists.ts
@@ -140,5 +140,84 @@ export const referenceGeneratedDepsByArch = {
@@ -139,5 +139,84 @@ export const referenceGeneratedDepsByArch = {
'libxkbfile1 (>= 1:1.1.0)',
'libxrandr2',
'xdg-utils (>= 1.0.2)'
@ -401,7 +424,7 @@ index feca7d3fa9d..f075ebcba75 100644
console.log(`Fetching ${expectedName} for ${triple}`);
const checksumSha256 = getVSCodeSysrootChecksum(expectedName);
diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts
index aa417dcc722..02b1cc4e057 100644
index aa417dcc722..58f0eeefeff 100644
--- a/build/linux/debian/install-sysroot.ts
+++ b/build/linux/debian/install-sysroot.ts
@@ -82,7 +82,10 @@ async function fetchUrl(options: IFetchOptions, retries = 10, retryDelay = 1000)
@ -409,10 +432,10 @@ index aa417dcc722..02b1cc4e057 100644
const version = '20240129-253798';
try {
- const response = await fetch(`https://api.github.com/repos/Microsoft/vscode-linux-build-agent/releases/tags/v${version}`, {
+ // if VSCODE_SYSROOT_REPO and VSCODE_SYSROOT_VERSION are set, use those instead
+ const repo = process.env['VSCODE_SYSROOT_REPO'] ?? 'Microsoft/vscode-linux-build-agent';
+ const actualVersion = process.env['VSCODE_SYSROOT_VERSION'] ?? version;
+ const response = await fetch(`https://api.github.com/repos/${repo}/releases/tags/v${actualVersion}`, {
+ // if VSCODE_SYSROOT_REPO and VSCODE_SYSROOT_VERSION are set, use those instead
+ const repo = process.env['VSCODE_SYSROOT_REPO'] ?? 'Microsoft/vscode-linux-build-agent';
+ const actualVersion = process.env['VSCODE_SYSROOT_VERSION'] ?? version;
+ const response = await fetch(`https://api.github.com/repos/${repo}/releases/tags/v${actualVersion}`, {
headers: ghApiHeaders,
signal: controller.signal as any /* Typings issue with lib.dom.d.ts */
});
@ -469,10 +492,10 @@ index e97485ef128..24fe452f7fe 100644
+ return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64'].includes(s);
}
diff --git a/build/linux/rpm/dep-lists.js b/build/linux/rpm/dep-lists.js
index bd84fc146dc..50b195e1a98 100644
index 8be477290bb..5841d4769de 100644
--- a/build/linux/rpm/dep-lists.js
+++ b/build/linux/rpm/dep-lists.js
@@ -310,6 +310,106 @@ exports.referenceGeneratedDepsByArch = {
@@ -314,6 +314,106 @@ exports.referenceGeneratedDepsByArch = {
'rpmlib(FileDigests) <= 4.6.0-1',
'rtld(GNU_HASH)',
'xdg-utils'
@ -581,10 +604,10 @@ index bd84fc146dc..50b195e1a98 100644
//# sourceMappingURL=dep-lists.js.map
\ No newline at end of file
diff --git a/build/linux/rpm/dep-lists.ts b/build/linux/rpm/dep-lists.ts
index 82a4fe7698d..1ba4c5848e3 100644
index 24b18d504c8..924e62666f9 100644
--- a/build/linux/rpm/dep-lists.ts
+++ b/build/linux/rpm/dep-lists.ts
@@ -309,5 +309,105 @@ export const referenceGeneratedDepsByArch = {
@@ -313,5 +313,105 @@ export const referenceGeneratedDepsByArch = {
'rpmlib(FileDigests) <= 4.6.0-1',
'rtld(GNU_HASH)',
'xdg-utils'
@ -820,10 +843,10 @@ index 079557869e3..c057746b870 100644
if [ "$OS_ID" != "alpine" ]; then
diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts
index 665ea2e18df..d23ba6c8a76 100644
index 183f2582871..e13fe72513c 100644
--- a/src/vs/platform/extensionManagement/common/extensionManagement.ts
+++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts
@@ -33,6 +33,8 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
@@ -39,6 +39,8 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
case TargetPlatform.LINUX_X64: return 'Linux 64 bit';
case TargetPlatform.LINUX_ARM64: return 'Linux ARM 64';
case TargetPlatform.LINUX_ARMHF: return 'Linux ARM';
@ -832,7 +855,7 @@ index 665ea2e18df..d23ba6c8a76 100644
case TargetPlatform.ALPINE_X64: return 'Alpine Linux 64 bit';
case TargetPlatform.ALPINE_ARM64: return 'Alpine ARM 64';
@@ -56,6 +58,8 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
@@ -62,6 +64,8 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
case TargetPlatform.LINUX_X64: return TargetPlatform.LINUX_X64;
case TargetPlatform.LINUX_ARM64: return TargetPlatform.LINUX_ARM64;
case TargetPlatform.LINUX_ARMHF: return TargetPlatform.LINUX_ARMHF;
@ -841,7 +864,7 @@ index 665ea2e18df..d23ba6c8a76 100644
case TargetPlatform.ALPINE_X64: return TargetPlatform.ALPINE_X64;
case TargetPlatform.ALPINE_ARM64: return TargetPlatform.ALPINE_ARM64;
@@ -91,6 +95,12 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string |
@@ -97,6 +101,12 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string |
if (arch === 'arm') {
return TargetPlatform.LINUX_ARMHF;
}