eclipse-platform / eclipse.platform.releng.aggregator

Aggregated repository for Eclipse Java IDE
https://www.eclipse.org/eclipse/
Eclipse Public License 2.0
36 stars 75 forks source link

Buld eclipse 4.32 under FreeBSD #2199

Closed NorbertXYZ closed 2 months ago

NorbertXYZ commented 3 months ago

Hello,

I would like to build elipse for FreeBSD. I know there was a "port" done for release 4.24, but it is not updated any more. So I tried to take that port, but the differences between release 4.24 and release 4.32 made it difficult. So tried to start with a new adaptation of release 4.32 and took some advice from the existing port of 4.24.

I started with downloading:

git clone -b R4_32 --recursive https://github.com/eclipse-platform/eclipse.platform.releng.aggregator.git

Then I added some new "binary" files as basis for FreeBSD and patched eclipse files to include FreeBSD settings. Then I started the build with

export ARCH=$(uname -p) export JAVA_HOME="/usr/local/openjdk17" export MAVEN_OPTS="-Xmx2048m" mvn -DskipTests=true -Dnative=gtk.freebsd.${ARCH} clean verify

By the wqay: Maven is version 3.9

The compilation started and was running for about 15 minutes. Then there were errors

[INFO] ---------------< org.eclipse.platform:org.eclipse.jface >--------------- [INFO] Building [bundle] JFace 3.34.0-SNAPSHOT [45/521] [INFO] from eclipse.platform.ui/bundles/org.eclipse.jface/.polyglot.META-INF [INFO] ---------------------------[ eclipse-plugin ]--------------------------- [INFO] {osgi.os=freebsd, org.eclipse.update.install.features=true, osgi.arch=amd64, org.eclipse.update.install.sources=t rue, osgi.ws=gtk, org.eclipse.jdt.buildtime=true} [ERROR] Cannot resolve project dependencies: [ERROR] Software being installed: org.eclipse.jface 3.34.0.qualifier [ERROR] Missing requirement for filter properties ~= $0: org.eclipse.swt 3.126.0.qualifier requires 'org.eclipse.equin ox.p2.iu; org.eclipse.swt.gtk.freebsd.amd64 [3.126.0.qualifier,3.126.0.qualifier], filter=(&(osgi.arch=amd64)(osgi.os=fr eebsd)(osgi.ws=gtk)(!(org.eclipse.swt.buildtime=true)))' but it could not be found [ERROR] Cannot satisfy dependency: org.eclipse.jface 3.34.0.qualifier depends on: osgi.bundle; org.eclipse.swt [3.126. 0,4.0.0) ... [INFO] [bundle] Standard Widget Toolkit for GTK on x86_64 3.126.0-SNAPSHOT SUCCESS [ 13.465 s] [INFO] [bundle] Standard Widget Toolkit for Mac OS X (Cocoa) on aarch64 3.126.0-SNAPSHOT SUCCESS [ 11.617 s] [INFO] [bundle] Standard Widget Toolkit for GTK on ppc64le 3.126.0-SNAPSHOT SUCCESS [ 10.459 s] [INFO] [bundle] Standard Widget Toolkit for GTK on aarch64 3.126.0-SNAPSHOT SUCCESS [ 10.516 s] [INFO] [bundle] Standard Widget Toolkit for Windows on x86_64 3.126.0-SNAPSHOT SUCCESS [ 12.129 s] [INFO] [bundle] Standard Widget Toolkit for Windows on aarch64 3.126.0-SNAPSHOT SUCCESS [ 11.064 s] [INFO] [bundle] Standard Widget Toolkit for Mac OS X (Cocoa) on x86_64 3.126.0-SNAPSHOT SUCCESS [ 10.605 s] [INFO] [bundle] Bidirectional Text Support 1.5.100-SNAPSHOT SUCCESS [ 0.694 s] [INFO] [bundle] JFace 3.34.0-SNAPSHOT ..................... FAILURE [ 0.043 s] [INFO] [bundle] Eclipse CSS Core Support 0.14.400-SNAPSHOT SKIPPED [INFO] [bundle] Eclipse CSS SWT Support 0.15.400-SNAPSHOT . SKIPPED ... [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 02:30 min [INFO] Finished at: 2024-07-29T16:15:35+02:00 [INFO] ------------------------------------------------------------------------ [ERROR] Cannot resolve dependencies of project org.eclipse.platform:org.eclipse.jface:eclipse-plugin:3.34.0-SNAPSHOT [ERROR] with context {osgi.os=freebsd, org.eclipse.update.install.features=true, osgi.arch=amd64, org.eclipse.update.install.sources=true, osgi.ws=gtk, org.eclipse.jdt.buildtime=true} [ERROR] Software being installed: org.eclipse.jface 3.34.0.qualifier [ERROR] Missing requirement for filter properties ~= $0: org.eclipse.swt 3.126.0.qualifier requires 'org.eclipse.equinox.p2.iu; org.eclipse.swt.gtk.freebsd.amd64 [3.126.0.qualifier,3.126.0.qualifier], filter=(&(osgi.arch=amd64)(osgi.os=freebsd)(osgi.ws=gtk)(!(org.eclipse.swt.buildtime=true)))' but it could not be found [ERROR] Cannot satisfy dependency: org.eclipse.jface 3.34.0.qualifier depends on: osgi.bundle; org.eclipse.swt [3.126.0,4.0.0): See log for details

maybe someone could give me a hint, what to do. I tried to get an "entry point" - but I don't see it. Yes, it is jface, but what is missing or wrong?

Attached my patches.

Many thanks from Muenster/Germany if someone could give me some help :-) Norbert

eclipse.txt

RetroWWU commented 3 months ago

So I got lot progress, but about 15 steps before the finish I got following error:

... [INFO] [test-bundle] Test Plug-in for Framework Admin 1.4.400-SNAPSHOT SUCCESS [ 2.219 s] [INFO] [bundle] Equinox Provisioning Discovery 1.3.300-SNAPSHOT SUCCESS [ 0.832 s] [INFO] [bundle] Equinox Provisioning Discovery 1.3.300-SNAPSHOT SUCCESS [ 0.856 s] [INFO] [bundle] Equinox Provisioning Installer 1.4.300-SNAPSHOT SUCCESS [ 1.128 s] [INFO] [bundle] Equinox Provisioning Discovery UI 1.3.300-SNAPSHOT SUCCESS [ 1.916 s] [INFO] [feature] Equinox p2, Discovery UI support 1.3.400-SNAPSHOT SUCCESS [ 1.064 s] [INFO] [bundle] Test Install Verifier 1.4.300-SNAPSHOT .... SUCCESS [ 1.840 s] [INFO] org.eclipse.equinox.p2.tests 1.9.400-SNAPSHOT ...... FAILURE [ 30.137 s] [INFO] [test-bundle] Equinox Provisioning Discovery Tests 1.4.500-SNAPSHOT SKIPPED [INFO] [test-bundle] Equinox Provisioning Tests (Incubation) 1.4.400-SNAPSHOT SKIPPED [INFO] [bundle] p2 Admin UI 1.3.400-SNAPSHOT .............. SKIPPED [INFO] [bundle] Provisioning Admin UI RCP (Incubation) 1.4.100-SNAPSHOT SKIPPED [INFO] [feature] p2 Server Feature 1.12.1300-SNAPSHOT ..... SKIPPED [INFO] [feature] Equinox p2, SDK 3.11.2400-SNAPSHOT ....... SKIPPED [INFO] org.eclipse.equinox.p2.examples 4.32.0-SNAPSHOT .... SKIPPED [INFO] [bundle] RCP Mail (Cloud Update Example) 2.3.100-SNAPSHOT SKIPPED [INFO] [bundle] Prestartupdate 1.3.100-SNAPSHOT ........... SKIPPED [INFO] [bundle] Sdkbundlevisibility 1.3.100-SNAPSHOT ...... SKIPPED [INFO] [bundle] Sdknoautoupdates 1.3.100-SNAPSHOT ......... SKIPPED [INFO] [bundle] RCP Mail (SDK UI) 1.3.100-SNAPSHOT ........ SKIPPED [INFO] org.eclipse.ant.optional.junit 3.3.400-SNAPSHOT .... SKIPPED [INFO] org.eclipse.releng.tests 3.6.500-SNAPSHOT .......... SKIPPED [INFO] org.eclipse.sdk.examples 4.32.0-SNAPSHOT ........... SKIPPED [INFO] org.eclipse.sdk.tests 4.32.0-SNAPSHOT .............. SKIPPED [INFO] org.eclipse.test 3.6.100-SNAPSHOT .................. SKIPPED [INFO] org.eclipse.test.performance.win32 3.1.600-SNAPSHOT SKIPPED [INFO] org.eclipse.sdk.feature 4.32.0-SNAPSHOT ............ SKIPPED [INFO] org.eclipse.sdk.examples.feature 4.32.0-SNAPSHOT ... SKIPPED [INFO] org.eclipse.test.feature 3.8.900-SNAPSHOT .......... SKIPPED [INFO] org.eclipse.sdk.tests.feature 4.32.0-SNAPSHOT ...... SKIPPED [INFO] eclipse.platform.releng.tychoeclipsebuilder 4.32.0-SNAPSHOT SKIPPED [INFO] [feature] Eclipse Product Configuration 1.1.2300-SNAPSHOT SKIPPED [INFO] org.eclipse.rt.osgistarterkit.product 4.32.0-SNAPSHOT SKIPPED [INFO] equinox-sdk 4.32.0-SNAPSHOT ........................ SKIPPED [INFO] eclipse.platform.repository 4.32.0-SNAPSHOT ........ SKIPPED [INFO] platform-aggregator 4.32.0-SNAPSHOT ................ SKIPPED [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE

additionally following info:

[ERROR] Failed to execute goal org.eclipse.tycho:tycho-p2-director-plugin:4.0.8:materialize-products (materialize-products) on project org.eclipse.equinox.p2.tests: Installation of product org.eclipse.equinox.p2.reconciler for environment freebsd/gtk/x86_64 failed: Call to p2 director application failed:Cannot complete the install because one or more required items could not be found.:

mmhhmmm... why? the previous steps all had enviroment freebsd/gtk/amd64 - but here it is freebsd/gtk/x86_64 - which does not fit. I don't know if this is the reason - but for me it seems...

Again - If someone could give me an advice - I would be very happy :-)

Norbert

PS: Here the patches eclipse.txt

chirontt commented 3 months ago

Do you have your forked repos somewhere that I can clone and try compiling them? They would be much better than a patch file.

In theory I can build all platforms/OSes (including this new-fangled FreeBSD) from any supported OS like Linux/Mac/Windows, even when I have no experience with FreeBSD nor any hardware running it, because the Java/Maven/Tycho build is fairly portable...

I've noticed one thing in your patch file:

             <environment>
+              <os>freebsd</os>
+              <ws>gtk</ws>
+              <arch>amd64</arch>
+            </environment>

Why define a brand-new arch=amd64? What benefits would it bring? Why not just use the existing arch=x86_64 available to all other OSes? i.e.

             <environment>
+              <os>freebsd</os>
+              <ws>gtk</ws>
+              <arch>x86_64</arch>
+            </environment>

I would also suggest that you try the arch=x86_64 for FreeBSD and make it work first, before trying other architectures such as powerpc64, powerpc64le, aarch64, etc., just to reduce the complexities involved.

NorbertXYZ commented 3 months ago

Thanks for the answer :-)

I do not have a repository till now - just started making progress my "own" way, sorry. Maybe I try to switch over...

I did what you recommended: I replaced the "amd64" architecture with "x86_64" and renamed files this way too - but the result is the same as with amd64... the build process stopped about 10 steps before the end. By the way why did I use amd64? Because of this:

uname -p amd64

And by the way - FreeBSD (along with other *BSD OS'es) are as old (and even more) as Linux is. BSD is nothing new, but a less known, but very stable operating system, which has millions of users world wide. Okay, Linux has more users and has more popularity...

If I make some progress, I will let you know... Again thanks for your comments :-)

Cheers from Germany, Norbert

chirontt commented 3 months ago

I do not have a repository till now - just started making progress my "own" way, sorry. Maybe I try to switch over...

Note that I mentioned "repos" (plural); there are more than just one repo that need be ported to FreeBSD. If you examine the repo eclipse.platform.releng.aggregator closely, it actually contains many other repos as submodules, and at least 4 of those submodule repos need be ported to FreeBSD as they contain "binaries" which need be recompiled to be FreeBSD-specific native binaries.

uname -p amd64

Why do you even need this uname command in the build? The building of any specific OS/arch combination is determined by their specific <environment> settings in various POM files and nothing to do with the uname command.

In your original post, you use this Maven command to start the build:

mvn -DskipTests=true -Dnative=gtk.freebsd.${ARCH} clean verify

That -Dnative=... option is not really needed, because it's used in various submodule repos to recompile their various "binaries" (which you already mentioned that you had already added them to your repos), not at the aggregator level. So the build command for the aggregator repo should be reduced to just:

mvn -DskipTests=true clean verify

Note that the above mvn command will build all OS/arch combinations specified in the POM file(s), not just your specific FreeBSD platform.

chirontt commented 3 months ago

Further more, if I was to do the port to FreeBSD, I would use the following approach (a divide-and-conquer strategy):

There may be other repos which contain Java source files to be changed also for FreeBSD, if they contain OS-specific code in their contents; for example, the eclipse.pde repo mentioned in your patch file.

NorbertXYZ commented 3 months ago

Thanks for the detailed description! :-) This will help much! And for "uname -p" = "amd64" - I menion, because I do not know where the architecture was taken from - now I know from the environment in the pom files.

laeubi commented 3 months ago

Does freebsd really requires an own binary? According to this you can run linux binaries under freebsd: https://docs.freebsd.org/en/books/handbook/linuxemu/

beside this @chirontt already gave a very good and detailed overview, beside that you probably want to make sure we have a machine to build and run tests (is this possible e.g. on github runners?) then it would be much easier to help out with issues.

NorbertXYZ commented 3 months ago

Thanks! Yes, there is a Linux emulation layer - but it would also be nice to have a native port... :-)

laeubi commented 3 months ago

Thanks! Yes, there is a Linux emulation layer - but it would also be nice to have a native port... :-)

Then the main problem would be to get a native machine for that purpose (or some way to build/test on a linux machine)

NorbertXYZ commented 3 months ago

Again thanks for all the comments... First I must see what all means that you have written and second: If I make progress I will let you know :-) Have a nice sunday, Norbert

NorbertXYZ commented 2 months ago

Hello back, again :-)

Today I made a big step forward and the build was successful... I took the advice to use x86_64 instead of amd64 (there was one thing, where I did not find a solution for amd64 nearby the end). The build log was finished with:

[INFO] [bundle] RCP Mail (SDK UI) 1.3.100-SNAPSHOT ........ SUCCESS [ 0.864 s] [INFO] org.eclipse.ant.optional.junit 3.3.400-SNAPSHOT .... SUCCESS [ 0.545 s] [INFO] org.eclipse.releng.tests 3.6.500-SNAPSHOT .......... SUCCESS [ 0.884 s] [INFO] org.eclipse.sdk.examples 4.32.0-SNAPSHOT ........... SUCCESS [ 0.211 s] [INFO] org.eclipse.sdk.tests 4.32.0-SNAPSHOT .............. SUCCESS [ 0.183 s] [INFO] org.eclipse.test 3.6.100-SNAPSHOT .................. SUCCESS [ 1.289 s] [INFO] org.eclipse.test.performance.win32 3.1.600-SNAPSHOT SUCCESS [ 0.238 s] [INFO] org.eclipse.sdk.feature 4.32.0-SNAPSHOT ............ SUCCESS [ 1.568 s] [INFO] org.eclipse.sdk.examples.feature 4.32.0-SNAPSHOT ... SUCCESS [ 1.248 s] [INFO] org.eclipse.test.feature 3.8.900-SNAPSHOT .......... SUCCESS [ 0.808 s] [INFO] org.eclipse.sdk.tests.feature 4.32.0-SNAPSHOT ...... SUCCESS [ 3.687 s] [INFO] eclipse.platform.releng.tychoeclipsebuilder 4.32.0-SNAPSHOT SUCCESS [ 0.025 s] [INFO] [feature] Eclipse Product Configuration 1.1.2300-SNAPSHOT SUCCESS [ 1.362 s] [INFO] org.eclipse.rt.osgistarterkit.product 4.32.0-SNAPSHOT SUCCESS [ 16.371 s] [INFO] equinox-sdk 4.32.0-SNAPSHOT ........................ SUCCESS [ 7.052 s] [INFO] eclipse.platform.repository 4.32.0-SNAPSHOT ........ SUCCESS [12:42 min] [INFO] platform-aggregator 4.32.0-SNAPSHOT ................ SUCCESS [ 1.422 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 31:06 min [INFO] Finished at: 2024-08-21T10:26:19+02:00 [INFO] ------------------------------------------------------------------------

I could get the binary from: eclipse.platform.releng.aggregator/eclipse.platform.releng.tychoeclipsebuilder/eclipse.platform.repository/target/products

and untarred the file: org.eclipse.sdk.ide-freebsd.gtk.x86_64.tar.gz

although everything was without an error, but I could not find the executable eclipse/eclipse - what did I forget?

Thanks, Norbert

HannesWell commented 2 months ago

although everything was without an error, but I could not find the executable eclipse/eclipse - what did I forget?

Did you create an equinox-launcher project for your OS or at least updated the existing org.eclipse.equinox.launcher.gtk.linux.x86_64 with the binaries built for FreeBSD (if necessary?) as described in: https://github.com/eclipse-equinox/equinox/blob/master/CONTRIBUTING.md#building-the-native-executable-and-launcher-library-binaries

But I don't know if that is even necessary or if the existing org.eclipse.equinox.launcher.gtk.linux.x86_64 works already as it is for Linux and x86_64?

NorbertXYZ commented 2 months ago

Thanks :-) I just took the description I found on github for eclipse-platform/eclipse.platform.releng.aggregator and another description for an older build (4.24) from FreeBSD. It was not mentioned that the "binaries" should be created additionally - I thought everything would be done in the eclipse build step...

I have to first understand what to do - then I will go further :-)

NorbertXYZ commented 2 months ago

@HannesWell: Your comment for the laucher took me some time today - but finally it seems, eclispe 4.32 works on FreeBSD :-) But to go further I will test more...

Thanks to all for the comments.. Without I would still be somewhere in between and some steps would be still open... :-)

NorbertXYZ commented 2 months ago

So for those, who may ask what happened to a build on FreeBSD? I got it working. If you want to see some more details, have a look here:

https://github.com/NorbertXYZ/eclipse

By the way: thanks for all remarks and comments here and from other people and to the person who made the older build of 4.24 on FreeBSD possible. Without, I would have taken maybe 3 times longer or it would have been impossible :-)

laeubi commented 2 months ago

@NorbertXYZ I just learned we can use Docker Images to build the natives, so it seems to possble to create one here:

https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/tree/master/cje-production/dockerfiles

so can you provide a Dockerfile that contains everything you used to compile the natives? A quick search just reveled https://github.com/valpackett/docker-freebsd-cross/ that claims

An Alpine based Docker image for cross-compiling to FreeBSD (11, amd64) using clang.

NorbertXYZ commented 2 months ago

Thanks - and yes, maybe a solution. But I would like to have a native running application, without docker. I know many use docker, and I use containers as well on my work. But it is no solution for what I was searching for.

By the way, I wrote a lot of stuff. Months ago I wrote a perl application, it did not work in anaconda, but without it worked - at least for the person who used it. I did not have access to that remote PC. So far for containers and similar things.

laeubi commented 2 months ago

But it is no solution for what I was searching for.

This is only for building the native, otherwise you have to contact Eclipse to provide an own native FreeBSD maschine for building (and testing) the FreeBSD port.

Once it is build / released you can run it natively under any FreeBSD of course...

NorbertXYZ commented 2 months ago

Hello @Christof - thanks:-)

but the binary build of a port / package of 4.32 is done now, I don't need an additional computer. The binary / package building process is done in a "FreeBSD way" - on their computers, so anyone can use it in future with following command on FreeBSD

pkg install eclipse

All the best! :-)

laeubi commented 2 months ago

Well if you want to maintain a fork yourself that's all fine, but such things tend to become hard to maintain and dying sooner or later if the person looses interest or moves on to other things.

That's exactly the case as you described in you inital request:

I would like to build elipse for FreeBSD. I know there was a "port" done for release 4.24, but it is not updated any more.

So usually its best to integrate the work in the official repository so others can help with maintaining it and make it more widely available.

If thats not your goal, I would rather convert this into a discussion now as it is not something we can solve here.

NorbertXYZ commented 2 months ago

Your comment has some good points. But for now I would keep the way as I did it. When I have time again, I will have a deeper look what you suggested - it makes sense. But not now. So, you can convert this conversation into a discussion. I started it to get some ideas or help - what really happened! All the best, Norbert