Skip to content

Commit

Permalink
Merge pull request #279 from eyalg1972/SupportxlC_R
Browse files Browse the repository at this point in the history
Add support to xlC_r compiler on AIX
  • Loading branch information
ctrueden authored May 23, 2017
2 parents 6b2b354 + 6987f34 commit e60d08f
Show file tree
Hide file tree
Showing 6 changed files with 264 additions and 39 deletions.
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=
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

0 comments on commit e60d08f

Please sign in to comment.