Skip to content

eclipse headless build of a Cmake project #29

@duaneellissd

Description

@duaneellissd

So I have a very large C make project - several hundred C and H files spread across multiple directories in a tree.
We cross compile to RISCV and CortexM4 with this, We also ?cross? compile Linux_x86 By subsituting our HAL layer.

On windows we use MicroSemi/Micro-chip RISCV variant of Eclipse and the GCC tool chain.

Suffice it to say: Its not a small project and it is not something I can easily post on line so I'm doing the best I can with description of what I see and what I have tried and what is not working.

What I can do is: (A) Create a Eclipse project Import that project (manually, via the GUI, or from the headless commandline) Please note: what Cmake does is create a makefile project that eclipse can consume, it is not a managed build [I wish it was a managed build] but that is a totally different subject - not this one.

I can (B) Import the project into eclipse - I can do that with the GUI or from the headless command line.

I can (C) then build the project in the GUI and it works.

I can (D) debug the project in the GUI :- YEA!

What I cannot do is (C) - Build the project in headless mode. I really need to _ for "ci/cd" process reasons run a HEADLESS build of the project.

For OTHER NONCMAKE* projects I can do both a GUI or HEADLESS/Commandline build - it works just fine, you specify "NAME/ConfigName". My hunch is - CMAKE does NOT create configuration names like DEBUG and RELEASE it seems to create one called: "Configuration" and/or the HEADLESS BUILD system won't work with CMAKE generated projects in general.

Bottom line: the GUI does not require this - it works just fine with the generated project file, but the HEADLESS fails as described above (also see the log file below)

I consider that a BUG in eclipse CDT because the two BUILD mechanisms should be functionally identical. Clearly they are not.

The LOG FILE snip showing the error

!SESSION 2024-10-25 21:04:12.983 -----------------------------------------------
eclipse.buildId=4.22.0.I20211124-1800
java.version=17.0.1
java.vendor=Eclipse Adoptium
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments:  -pluginCustomization plugin_customization.ini -application org.eclipse.cdt.managedbuilder.core.headlessbuild -build [email protected]
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -pluginCustomization plugin_customization.ini -data C:\Innoflight\supervisor\sc_workspaces\dijkstra.Debug -application org.eclipse.cdt.managedbuilder.core.headlessbuild -build [email protected]

!ENTRY org.eclipse.osgi 4 0 2024-10-25 21:04:15.278
!MESSAGE Application error
!STACK 1
java.lang.NullPointerException: Cannot invoke "org.eclipse.cdt.managedbuilder.core.IConfiguration.getOwner()" because "cfg" is null
	at org.eclipse.cdt.managedbuilder.core.ManagedBuildManager.sortConfigs(ManagedBuildManager.java:4430)
	at org.eclipse.cdt.managedbuilder.core.ManagedBuildManager.buildConfigurations(ManagedBuildManager.java:4419)
	at org.eclipse.cdt.managedbuilder.internal.core.HeadlessBuilder.buildConfigurations(HeadlessBuilder.java:322)
	at org.eclipse.cdt.managedbuilder.internal.core.HeadlessBuilder.start(HeadlessBuilder.java:710)
	at org.eclipse.cdt.managedbuilder.internal.headlessbuilderapp.HeadlessBuilderWrapper.start(HeadlessBuilderWrapper.java:131)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1467)

so - I try to read the .cproject file and I am trying to GUESS what is the name of the configuration I should use after the / in the build command. In my "working" (non-cmake) project, I search for a Configuration name item and I find an entry like this:
<cconfiguration ... name=Debug>, more specifically:
** NON-WORKING CMAKE PROJECT **

<cproject>
	<storageModule moduleId="org.eclipse.cdt.core.settings">
		<cconfiguration id="org.eclipse.cdt.core.default.config.1">
			<storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="org.eclipse.cdt.core.default.config.1" moduleId="org.eclipse.cdt.core.settings" name="Configuration">

The working CMAKE created .cproject starts off like this:
** WORKING NON-CMAKE PROJECT **

<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
    	<storageModule moduleId="org.eclipse.cdt.core.settings">
        <cconfiguration id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.1813790499">
            <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.1813790499" moduleId="org.eclipse.cdt.core.settings" name="Debug">

This matches the "/Debug" option I specify on the working command line
So I thought I should use /Configuration - and I get the same error (null pointer in Java

I'm looking for suggestions here.

the PART2 of the question - is secondary. Is there any other project generator for Eclipse that can also create Unix Makefiles? Right now, CMake is very lessthenoptimal in bad ways and I would really like another method.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions