From 1e73236596cba26230eb8d78518bb4216c1ce436 Mon Sep 17 00:00:00 2001 From: Tue Ton <49886739+chirontt@users.noreply.github.com> Date: Thu, 21 Mar 2024 23:38:12 -0400 Subject: [PATCH] Add support for Windows on Arm64 (WoA). A new launcher fragment for WoA is added: 'org.eclipse.equinox.launcher.win32.win32.aarch64' Various features are also updated to include the new fragment. To build the Equinox launcher binaries for WoA: On a WoA box, run the following command at the root directory of this repo: mvn clean generate-resources -Dnative=win32.win32.aarch64 and the following launcher binaries for WoA are generated: eclipse.exe eclipse_11902.dll eclipsec.exe which are moved over to the 'equinox.binaries' repo which is at the same directory level as that of this repo, i.e. '..\equinox.binaries', and to their corresponding directories there as followed: ..\equinox.binaries\org.eclipse.equinox.executable\bin\win32\win32\aarch64\eclipse.exe ..\equinox.binaries\org.eclipse.equinox.executable\bin\win32\win32\aarch64\eclipsec.exe ..\equinox.binaries\org.eclipse.equinox.launcher.win32.win32.aarch64\eclipse_11902.dll --- Jenkinsfile | 14 +++++++- .../.project | 22 ++++++++++++ .../org.eclipse.core.resources.prefs | 2 ++ .../META-INF/MANIFEST.MF | 10 ++++++ .../about.html | 36 +++++++++++++++++++ .../build.properties | 25 +++++++++++++ .../launcher.win32.win32.aarch64.properties | 15 ++++++++ .../build.properties | 3 ++ .../feature.xml | 7 ++++ .../library/win32/build.bat | 32 ++++++++++++++--- .../pom.xml | 15 ++++++++ .../resources/build.properties | 3 ++ .../resources/build.xml | 11 ++++++ pom.xml | 1 + 14 files changed, 191 insertions(+), 5 deletions(-) create mode 100644 bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/.project create mode 100644 bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/.settings/org.eclipse.core.resources.prefs create mode 100644 bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/META-INF/MANIFEST.MF create mode 100644 bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/about.html create mode 100644 bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/build.properties create mode 100644 bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/launcher.win32.win32.aarch64.properties diff --git a/Jenkinsfile b/Jenkinsfile index b8f3e049e3b..51bc8c73c9e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -48,6 +48,18 @@ spec: /** Returns the download URL of the JDK against whoose C headers (in the 'include/' folder) and native libaries the natives are compiled.*/ def getNativeJdkUrl(String os, String arch) { // To update the used JDK version update the URL template below + if('win32'.equals(os) && 'aarch64'.equals(arch)) { + // Temporary workaround until there are official Temurin GA releases for Windows on ARM that can be consumed through JustJ + dir("${WORKSPACE}/repackage-win32.aarch64-jdk") { + sh """ + curl -L 'https://github.com/adoptium/temurin17-binaries/releases/download/jdk17u-2024-02-07-14-14-beta/OpenJDK17U-jdk_aarch64_windows_hotspot_2024-02-07-14-14.zip' > jdk.zip + unzip -q jdk.zip jdk-17.0.11+1/include/** jdk-17.0.11+1/lib/** + cd jdk-17.0.11+1 + tar -czf ../jdk.tar.gz include/ lib/ + """ + } + return "file://${WORKSPACE}/repackage-win32.aarch64-jdk/jdk.tar.gz" + } return "https://download.eclipse.org/justj/jres/17/downloads/20230428_1804/org.eclipse.justj.openjdk.hotspot.jre.minimal.stripped-17.0.7-${os}-${arch}.tar.gz" } @@ -169,7 +181,7 @@ pipeline { axes { axis { name 'PLATFORM' - values 'cocoa.macosx.aarch64' , 'cocoa.macosx.x86_64', 'gtk.linux.aarch64', 'gtk.linux.ppc64le', 'gtk.linux.x86_64', 'win32.win32.x86_64' + values 'cocoa.macosx.aarch64' , 'cocoa.macosx.x86_64', 'gtk.linux.aarch64', 'gtk.linux.ppc64le', 'gtk.linux.x86_64', 'win32.win32.aarch64', 'win32.win32.x86_64' } } stages { diff --git a/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/.project b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/.project new file mode 100644 index 00000000000..16d793ae401 --- /dev/null +++ b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/.project @@ -0,0 +1,22 @@ + + + org.eclipse.equinox.launcher.win32.win32.aarch64 + + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + + diff --git a/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000000..99f26c0203a --- /dev/null +++ b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..ca2e6ee4211 --- /dev/null +++ b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/META-INF/MANIFEST.MF @@ -0,0 +1,10 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %pluginName +Bundle-Vendor: %providerName +Bundle-SymbolicName: org.eclipse.equinox.launcher.win32.win32.aarch64;singleton:=true +Bundle-Version: 1.2.1000.qualifier +Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.5.0,1.7.0)" +Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=aarch64)) +Bundle-Localization: launcher.win32.win32.aarch64 +Eclipse-BundleShape: dir diff --git a/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/about.html b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/about.html new file mode 100644 index 00000000000..164f781a8fd --- /dev/null +++ b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/about.html @@ -0,0 +1,36 @@ + + + + +About + + +

About This Content

+ +

November 30, 2017

+

License

+ +

+ The Eclipse Foundation makes available all content in this plug-in + ("Content"). Unless otherwise indicated below, the Content + is provided to you under the terms and conditions of the Eclipse + Public License Version 2.0 ("EPL"). A copy of the EPL is + available at http://www.eclipse.org/legal/epl-2.0. + For purposes of the EPL, "Program" will mean the Content. +

+ +

+ If you did not receive this Content directly from the Eclipse + Foundation, the Content is being redistributed by another party + ("Redistributor") and different terms and conditions may + apply to your use of any object code in the Content. Check the + Redistributor's license that was provided with the Content. If no such + license exists, contact the Redistributor. Unless otherwise indicated + below, the terms and conditions of the EPL still apply to any source + code in the Content and such source code may be obtained at http://www.eclipse.org. +

+ + + \ No newline at end of file diff --git a/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/build.properties b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/build.properties new file mode 100644 index 00000000000..4645e126913 --- /dev/null +++ b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/build.properties @@ -0,0 +1,25 @@ +############################################################################### +# Copyright (c) 2023, 2024 Eclipse Foundation. +# +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Tue Ton - initial API and implementation +############################################################################### +bin.includes = META-INF/,\ + launcher.win32.win32.aarch64.properties,\ + about.html + +generateSourceBundle=false +binaryTag=LBv1-1901 + +# Maven properties, see https://github.com/eclipse/tycho/wiki/Tycho-Pomless +tycho.pomless.parent = ../../launcher-binary-parent +pom.model.property.os = win32 +pom.model.property.ws = win32 +pom.model.property.arch = aarch64 diff --git a/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/launcher.win32.win32.aarch64.properties b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/launcher.win32.win32.aarch64.properties new file mode 100644 index 00000000000..df45f1edbf9 --- /dev/null +++ b/bundles/org.eclipse.equinox.launcher.win32.win32.aarch64/launcher.win32.win32.aarch64.properties @@ -0,0 +1,15 @@ +############################################################################### +# Copyright (c) 2023, 2024 Eclipse Foundation. +# +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Tue Ton - initial API and implementation +############################################################################### +pluginName = Equinox Launcher Win32 Arm64 Fragment +providerName = Eclipse.org - Equinox diff --git a/features/org.eclipse.equinox.executable.feature/build.properties b/features/org.eclipse.equinox.executable.feature/build.properties index 2ab3c26d5fd..f385478239b 100644 --- a/features/org.eclipse.equinox.executable.feature/build.properties +++ b/features/org.eclipse.equinox.executable.feature/build.properties @@ -21,6 +21,9 @@ bin.includes = bin/,\ ####Even though marked as custom, the content of the build.properties needs to be updated to ensure correctness of RCP app exported #root.permissions.755=${launcherName} +root.win32.win32.aarch64=bin/win32/win32/aarch64 +root.win32.win32.aarch64.permissions.755=launcher.exe + root.win32.win32.x86_64=bin/win32/win32/x86_64 root.win32.win32.x86_64.permissions.755=launcher.exe diff --git a/features/org.eclipse.equinox.executable.feature/feature.xml b/features/org.eclipse.equinox.executable.feature/feature.xml index dfeaaaafa6a..12beb75c5a0 100755 --- a/features/org.eclipse.equinox.executable.feature/feature.xml +++ b/features/org.eclipse.equinox.executable.feature/feature.xml @@ -65,6 +65,13 @@ arch="x86_64" version="0.0.0"/> + + + + + org.eclipse.tycho + target-platform-configuration + + + + win32 + win32 + aarch64 + + + + @@ -125,6 +139,7 @@ + diff --git a/features/org.eclipse.equinox.executable.feature/resources/build.properties b/features/org.eclipse.equinox.executable.feature/resources/build.properties index 731763910b9..b938365beef 100644 --- a/features/org.eclipse.equinox.executable.feature/resources/build.properties +++ b/features/org.eclipse.equinox.executable.feature/resources/build.properties @@ -17,6 +17,9 @@ custom = true ####Even though marked as custom, the content of the build.properties needs to be updated to ensure correctness of RCP app exported root.permissions.755=${launcherName} +root.win32.win32.aarch64=file:bin/win32/win32/aarch64/launcher.exe +root.win32.win32.aarch64.permissions.755=launcher.exe + root.win32.win32.x86_64=file:bin/win32/win32/x86_64/launcher.exe root.win32.win32.x86_64.permissions.755=launcher.exe diff --git a/features/org.eclipse.equinox.executable.feature/resources/build.xml b/features/org.eclipse.equinox.executable.feature/resources/build.xml index b55147fb77e..ecf01b4fd0d 100644 --- a/features/org.eclipse.equinox.executable.feature/resources/build.xml +++ b/features/org.eclipse.equinox.executable.feature/resources/build.xml @@ -48,6 +48,16 @@ + + + + + + + + + + @@ -152,6 +162,7 @@ + diff --git a/pom.xml b/pom.xml index 68986ce3ddb..0eccb4c8a4e 100644 --- a/pom.xml +++ b/pom.xml @@ -219,6 +219,7 @@ bundles/org.eclipse.equinox.launcher.gtk.linux.aarch64 bundles/org.eclipse.equinox.launcher.gtk.linux.ppc64le bundles/org.eclipse.equinox.launcher.gtk.linux.x86_64 + bundles/org.eclipse.equinox.launcher.win32.win32.aarch64 bundles/org.eclipse.equinox.launcher.win32.win32.x86_64 bundles/org.eclipse.equinox.launcher.tests