Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support to xlC_r compiler on AIX #279

Merged
merged 1 commit into from
May 23, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/main/java/com/github/maven_nar/Linker.java
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,15 @@ public final String getVersion(final AbstractNarMojo mojo) throws MojoFailureExc
if (m.find()) {
version = m.group(0);
}
} else if (this.name.equals("xlC_r")) {
NarUtil.runCommand("xlC_r", new String[] {
"-qversion"
}, null, null, out, err, dbg, this.log);
final Pattern p = Pattern.compile("\\d+\\.\\d+");
final Matcher m = p.matcher(out.toString());
if (m.find()) {
version = m.group(0);
}
} else if (name.equals("clang") || name.equals("clang++")) {
NarUtil.runCommand("clang", new String[] {
"--version"
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/github/maven_nar/cpptasks/CompilerEnum.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import com.github.maven_nar.cpptasks.gcc.WindresResourceCompiler;
import com.github.maven_nar.cpptasks.hp.aCCCompiler;
import com.github.maven_nar.cpptasks.ibm.VisualAgeCCompiler;
import com.github.maven_nar.cpptasks.ibm.xlC_rCompiler;
import com.github.maven_nar.cpptasks.intel.IntelLinux32CCompiler;
import com.github.maven_nar.cpptasks.intel.IntelLinux32Compiler;
import com.github.maven_nar.cpptasks.intel.IntelLinux64CCompiler;
Expand All @@ -55,6 +56,7 @@
import com.github.maven_nar.cpptasks.trolltech.MetaObjectCompiler;
import com.github.maven_nar.cpptasks.trolltech.UserInterfaceCompiler;


/**
* Enumeration of supported compilers
*
Expand Down Expand Up @@ -248,6 +250,7 @@ public class CompilerEnum extends EnumeratedAttribute {
new ProcessorEnumValue("os400", IccCompiler.getInstance()),
new ProcessorEnumValue("sunc89", C89CCompiler.getInstance()),
new ProcessorEnumValue("xlC", VisualAgeCCompiler.getInstance()),
new ProcessorEnumValue("xlC_r", xlC_rCompiler.getInstance()),
new ProcessorEnumValue("cl6x", ClxxCCompiler.getCl6xInstance()),
new ProcessorEnumValue("cl55", ClxxCCompiler.getCl55Instance()),
new ProcessorEnumValue("armcc", ADSCCompiler.getArmCC()),
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/github/maven_nar/cpptasks/LinkerEnum.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.github.maven_nar.cpptasks.gcc.LdLinker;
import com.github.maven_nar.cpptasks.hp.aCCLinker;
import com.github.maven_nar.cpptasks.ibm.VisualAgeLinker;
import com.github.maven_nar.cpptasks.ibm.xlC_rLinker;
import com.github.maven_nar.cpptasks.intel.IntelLinux32CLinker;
import com.github.maven_nar.cpptasks.intel.IntelLinux32Linker;
import com.github.maven_nar.cpptasks.intel.IntelLinux64CLinker;
Expand Down Expand Up @@ -77,6 +78,7 @@ public class LinkerEnum extends EnumeratedAttribute {
new ProcessorEnumValue("os400", IccLinker.getInstance()),
new ProcessorEnumValue("sunc89", C89Linker.getInstance()),
new ProcessorEnumValue("xlC", VisualAgeLinker.getInstance()),
new ProcessorEnumValue("xlC_r", xlC_rLinker.getInstance()),
new ProcessorEnumValue("cl6x", ClxxLinker.getCl6xInstance()),
new ProcessorEnumValue("cl55", ClxxLinker.getCl55Instance()),
new ProcessorEnumValue("armcc", ADSLinker.getInstance()),
Expand Down
130 changes: 130 additions & 0 deletions src/main/java/com/github/maven_nar/cpptasks/ibm/xlC_rCompiler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
/*
* #%L
* Native ARchive plugin for Maven
* %%
* Copyright (C) 2002 - 2014 NAR Maven Plugin developers.
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package com.github.maven_nar.cpptasks.ibm;

import com.github.maven_nar.cpptasks.OptimizationEnum;
import com.github.maven_nar.cpptasks.compiler.LinkType;
import com.github.maven_nar.cpptasks.compiler.Linker;
import com.github.maven_nar.cpptasks.gcc.GccCompatibleCCompiler;
import org.apache.tools.ant.types.Environment;

import java.io.File;
import java.util.Vector;

/**
* Adapter for the IBM(r) Visual Age(tm) C++ compiler for AIX(tm)
*
* @author Curt Arnold
*/
public final class xlC_rCompiler extends GccCompatibleCCompiler {
private final static String[] headerExtensions = new String[] {
".h", ".hpp", ".inl"
};
private final static String[] sourceExtensions = new String[] {
".c", ".cc", ".cxx", ".cpp", ".i", ".s"
};

private static final xlC_rCompiler instance = new xlC_rCompiler("xlC_r", sourceExtensions, headerExtensions,
false, null);

/**
* Gets singleton instance of this class
*/
public static xlC_rCompiler getInstance() {
return instance;
}

private String identifier;
private File[] includePath;

/**
* Private constructor. Use getInstance() to get singleton instance of this
* class.
*/
private xlC_rCompiler(final String command, final String[] sourceExtensions, final String[] headerExtensions,
final boolean newEnvironment, final Environment env) {
super(command, "-help", sourceExtensions, headerExtensions, false, null, newEnvironment, env);
}

@Override
public void addImpliedArgs(final Vector<String> args, final boolean debug, final boolean multithreaded,
final boolean exceptions, final LinkType linkType, final Boolean rtti, final OptimizationEnum optimization) {
args.addElement("-c");
if (debug) {
args.addElement("-g");
}
if (linkType.isSharedLibrary()) {
args.addElement("-fpic");
}
if (rtti != null) {
if (rtti.booleanValue()) {
args.addElement("-qrtti=all");
} else {
args.addElement("-qnortti");
}
}
}

@Override
public void addWarningSwitch(final Vector<String> args, final int level) {
switch (level) {
case 0:
args.addElement("-w");
break;
case 1:
args.addElement("-qflag=s:s");
break;
case 2:
args.addElement("-qflag=e:e");
break;
case 3:
args.addElement("-qflag=w:w");
break;
case 4:
args.addElement("-qflag=i:i");
break;
case 5:
args.addElement("-qhalt=w:w");
break;
}
}

/**
* Gets identifier for the compiler.
*
* Initial attempt at extracting version information
* would lock up. Using a stock response.
*/
@Override
public String getIdentifier() {
return "xlC_r compiler - unidentified version";
}

@Override
public Linker getLinker(final LinkType linkType) {
return VisualAgeLinker.getInstance().getLinker(linkType);
}

@Override
public int getMaximumCommandLength() {
return Integer.MAX_VALUE;
}

}
98 changes: 98 additions & 0 deletions src/main/java/com/github/maven_nar/cpptasks/ibm/xlC_rLinker.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/*
* #%L
* Native ARchive plugin for Maven
* %%
* Copyright (C) 2002 - 2014 NAR Maven Plugin developers.
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package com.github.maven_nar.cpptasks.ibm;

import com.github.maven_nar.cpptasks.CCTask;
import com.github.maven_nar.cpptasks.compiler.LinkType;
import com.github.maven_nar.cpptasks.compiler.Linker;
import com.github.maven_nar.cpptasks.gcc.AbstractLdLinker;
import com.github.maven_nar.cpptasks.gcc.GccLibrarian;

import java.util.Vector;

/**
* Adapter for IBM(r) Visual Age(tm) Linker for AIX(tm)
*
* @author Curt Arnold
*/
public final class xlC_rLinker extends AbstractLdLinker {
private static final String[] discardFiles = new String[] {};
private static final String[] objFiles = new String[] {
".o", ".a", ".lib", ".dll", ".so", ".sl"
};
private static final xlC_rLinker dllLinker = new xlC_rLinker("xlC_r", objFiles, discardFiles, "lib", ".a");
private static final xlC_rLinker instance = new xlC_rLinker("xlC_r", objFiles, discardFiles, "", "");

public static xlC_rLinker getInstance() {
return instance;
}

private xlC_rLinker(final String command, final String[] extensions, final String[] ignoredExtensions,
final String outputPrefix, final String outputSuffix) {
//
// just guessing that -? might display something useful
//
super(command, "-?", extensions, ignoredExtensions, outputPrefix, outputSuffix, false, null);
}

@Override
public void
addImpliedArgs(final CCTask task, final boolean debug, final LinkType linkType, final Vector<String> args) {
if (debug) {
// args.addElement("-g");
}
if (linkType.isSharedLibrary()) {
args.addElement("-qmkshrobj");
}
}

@Override
protected String getDynamicLibFlag() {
return "-bdynamic";
}

/**
* Gets identifier for the compiler.
*
* Initial attempt at extracting version information
* would lock up. Using a stock response.
*/
@Override
public String getIdentifier() {
return "xlC_r linker - unidentified version";
}

@Override
public Linker getLinker(final LinkType type) {
if (type.isStaticLibrary()) {
return GccLibrarian.getInstance();
}
if (type.isSharedLibrary()) {
return dllLinker;
}
return instance;
}

@Override
protected String getStaticLibFlag() {
return "-bstatic";
}

}
61 changes: 22 additions & 39 deletions src/main/resources/com/github/maven_nar/aol.properties
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,7 @@ amd64.Windows.msvc.res.excludes=

amd64.Windows.msvc.idl.compiler=midl
amd64.Windows.msvc.idl.defines=
amd64.Windows.msvc.idl.options=
Copy link
Contributor

@ctrueden ctrueden May 22, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these removals intended? If so, I think the commit message needs to explain how this is relevant to the addition of xlC_r. Same for the removal of the x86.Windows.gpp lines.

amd64.Windows.msvc.idl.includes=**/*.idl
amd64.Windows.msvc.idl.excludes=
amd64.Windows.msvc.idl.options=/x64
amd64.Windows.msvc.idl.excludes=x86/* ia64/*

Expand Down Expand Up @@ -239,38 +237,6 @@ x86.Windows.gpp.plugin.extension=dll
x86.Windows.gpp.jni.extension=dll
x86.Windows.gpp.executable.extension=

#
# Windows g++
#

x86.Windows.gpp.cpp.compiler=g++
x86.Windows.gpp.cpp.defines=Windows
x86.Windows.gpp.cpp.options=-Wall
x86.Windows.gpp.cpp.includes=**/*.cc **/*.cpp **/*.cxx
x86.Windows.gpp.cpp.excludes=

x86.Windows.gpp.c.compiler=gcc
x86.Windows.gpp.c.defines=Windows
x86.Windows.gpp.c.options=-Wall
x86.Windows.gpp.c.includes=**/*.c
x86.Windows.gpp.c.excludes=

x86.Windows.gpp.fortran.compiler=gfortran
x86.Windows.gpp.fortran.defines=Windows
x86.Windows.gpp.fortran.options=-Wall
x86.Windows.gpp.fortran.includes=**/*.f **/*.for **/*.f90
x86.Windows.gpp.fortran.excludes=

x86.Windows.gpp.java.include=include;include/win32
x86.Windows.gpp.java.runtimeDirectory=lib

x86.Windows.gpp.lib.prefix=lib
x86.Windows.gpp.shared.prefix=
x86.Windows.gpp.static.extension=a
x86.Windows.gpp.shared.extension=dll
x86.Windows.gpp.plugin.extension=dll
x86.Windows.gpp.jni.extension=dll
x86.Windows.gpp.executable.extension=


# FIXME to be removed when NAR-6
Expand Down Expand Up @@ -1098,11 +1064,28 @@ ppc.AIX.xlC.plugin.extension=a
ppc.AIX.xlC.jni.extension=a
ppc.AIX.xlC.executable.extension=

# FIXME to be removed when NARPLUGIN-137
ppc.AIX.xlC.static.extension=a
ppc.AIX.xlC.shared.extension=a
ppc.AIX.xlC.plugin.extension=a
ppc.AIX.xlC.jni.extension=a
#
# AIX xlC_r
#


ppc64.AIX.xlC_r.cpp.compiler=xlC_r
ppc64.AIX.xlC_r.cpp.defines=AIX
ppc64.AIX.xlC_r.cpp.options=-V -brtl -qstaticinline -qchar=signed
ppc64.AIX.xlC_r.cpp.includes=**/*.cc **/*.cpp **/*.cxx
ppc64.AIX.xlC_r.cpp.excludes=

ppc64.AIX.xlC_r.java.include=include;include/aix
ppc64.AIX.xlC_r.java.runtimeDirectory=jre/lib/ppc

ppc64.AIX.xlC_r.lib.prefix=lib
ppc64.AIX.xlC_r.shared.prefix=lib
ppc64.AIX.xlC_r.static.extension=a
ppc64.AIX.xlC_r.shared.extension=a
ppc64.AIX.xlC_r.plugin.extension=a
ppc64.AIX.xlC_r.jni.extension=a
ppc64.AIX.xlC_r.executable.extension=


# AIX ("AIX" => AIX) PowerPC
#
Expand Down