Skip to content

Commit

Permalink
Invoke "gcc" to build assembler files
Browse files Browse the repository at this point in the history
Enables pre-processing of *.S and *.sx source files.
  • Loading branch information
jld01 committed Jan 14, 2024
1 parent 5e7ce7e commit dde2c69
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.managedbuilder.core.tests; singleton:=true
Bundle-Version: 8.2.300.qualifier
Bundle-Version: 8.2.400.qualifier
Bundle-Activator: org.eclipse.cdt.managedbuilder.testplugin.CTestPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ C_SRCS :=
C_UPPER_SRCS :=
OBJ_SRCS :=
O_SRCS :=
SX_SRCS :=
S_UPPER_SRCS :=
C++M_DEPS :=
C++_DEPS :=
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.managedbuilder.gnu.ui; singleton:=true
Bundle-Version: 8.6.100.qualifier
Bundle-Version: 8.7.0.qualifier
Bundle-Activator: org.eclipse.cdt.managedbuilder.gnu.ui.GnuUIPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Expand Down
6 changes: 4 additions & 2 deletions build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -565,7 +565,7 @@
id="gnu.windres.option.preprocessor.undefined.symbols"/>
</tool-->
<tool
command="as"
command="gcc"
name="%ToolName.assembler.gnu"
outputFlag="-o"
id="cdt.managedbuild.tool.gnu.assembler"
Expand All @@ -579,6 +579,8 @@
<option
name="%Option.Gnu.Assembler.Flags"
category="gnu.asm.category.general"
commandGenerator="org.eclipse.cdt.managedbuilder.gnu.ui.GnuAsmFlagsCommandGenerator"
defaultValue="-c"
valueType="string"
id="gnu.both.asm.option.flags">
</option>
Expand Down Expand Up @@ -607,7 +609,7 @@
id="cdt.managedbuild.tool.gnu.assembler.input"
languageId="org.eclipse.cdt.core.assembly"
sourceContentType="org.eclipse.cdt.core.asmSource"
sources="s,S">
sources="s,sx,S">
</inputType>
<outputType
outputs="o"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/*******************************************************************************
* Copyright (c) 2024 John Dallaway and others.
*
* 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:
* John Dallaway - initial implementation (#666)
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.gnu.ui;

import java.util.regex.Pattern;

import org.eclipse.cdt.core.cdtvariables.CdtVariableException;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.IHoldsOptions;
import org.eclipse.cdt.managedbuilder.core.IOption;
import org.eclipse.cdt.managedbuilder.core.IOptionCommandGenerator;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver;
import org.eclipse.cdt.utils.cdtvariables.IVariableSubstitutor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;

/**
* Assembler flags command generator.
* @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients.
* @since 8.7
*/
public class GnuAsmFlagsCommandGenerator implements IOptionCommandGenerator {

private static final Pattern DO_NOT_LINK_FLAG = Pattern.compile("(^|\\s)-c($|\\s)"); //$NON-NLS-1$
private static final Pattern ASM_FLAG = Pattern.compile("-[aDKLR]\\S*"); //$NON-NLS-1$

@Override
public String generateCommand(IOption option, IVariableSubstitutor macroSubstitutor) {
IHoldsOptions optionHolder = option.getOptionHolder();
if (optionHolder instanceof ITool tool) {
try {
// if the default assembler tool command has not been overridden
if (tool.getToolCommand().equals("gcc") && option.getCommand().isEmpty() //$NON-NLS-1$
&& IOption.STRING == option.getValueType()) {
String optionValue = option.getStringValue();
String command = CdtVariableResolver.resolveToString(optionValue, macroSubstitutor);
if (!DO_NOT_LINK_FLAG.matcher(command).find()) {
// if the "-c" flag is not already present on the command line we
// assume the flags target the GNU "as" command line rather than the
// "gcc" command line so we add the "-c" flag and apply the "-Wa,"
// prefix to those flags that are intended only for the assembler
return "-c " + ASM_FLAG.matcher(command).replaceAll("-Wa,$0"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
} catch (BuildException | CdtVariableException e) {
Platform.getLog(getClass()).log(Status.error("Error generating GNU assembler command", e)); //$NON-NLS-1$
}
}
return null; // fallback to default command generator
}

}
2 changes: 1 addition & 1 deletion core/org.eclipse.cdt.core/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -625,7 +625,7 @@
<!-- declares a content type for ASM Source files -->
<content-type id="asmSource" name="%asmSourceName"
base-type="org.eclipse.core.runtime.text"
file-extensions="S,s,asm,ASM"
file-extensions="S,s,sx,asm,ASM"
priority="high"/>
</extension>

Expand Down

0 comments on commit dde2c69

Please sign in to comment.