From 6987f34e90b0ade4fafb0bd24e090faa732b50b7 Mon Sep 17 00:00:00 2001 From: "eyalg1972@gmail.com" Date: Sun, 21 May 2017 14:13:50 +0300 Subject: [PATCH] Add support to xlC_r compiler on AIX --- .../java/com/github/maven_nar/Linker.java | 9 ++ .../maven_nar/cpptasks/CompilerEnum.java | 3 + .../github/maven_nar/cpptasks/LinkerEnum.java | 2 + .../maven_nar/cpptasks/ibm/xlC_rCompiler.java | 130 ++++++++++++++++++ .../maven_nar/cpptasks/ibm/xlC_rLinker.java | 98 +++++++++++++ .../com/github/maven_nar/aol.properties | 61 +++----- 6 files changed, 264 insertions(+), 39 deletions(-) create mode 100644 src/main/java/com/github/maven_nar/cpptasks/ibm/xlC_rCompiler.java create mode 100644 src/main/java/com/github/maven_nar/cpptasks/ibm/xlC_rLinker.java diff --git a/src/main/java/com/github/maven_nar/Linker.java b/src/main/java/com/github/maven_nar/Linker.java index 532acc1c1..87811ab94 100644 --- a/src/main/java/com/github/maven_nar/Linker.java +++ b/src/main/java/com/github/maven_nar/Linker.java @@ -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" diff --git a/src/main/java/com/github/maven_nar/cpptasks/CompilerEnum.java b/src/main/java/com/github/maven_nar/cpptasks/CompilerEnum.java index 1dd525640..a1fca0f87 100644 --- a/src/main/java/com/github/maven_nar/cpptasks/CompilerEnum.java +++ b/src/main/java/com/github/maven_nar/cpptasks/CompilerEnum.java @@ -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; @@ -55,6 +56,7 @@ import com.github.maven_nar.cpptasks.trolltech.MetaObjectCompiler; import com.github.maven_nar.cpptasks.trolltech.UserInterfaceCompiler; + /** * Enumeration of supported compilers * @@ -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()), diff --git a/src/main/java/com/github/maven_nar/cpptasks/LinkerEnum.java b/src/main/java/com/github/maven_nar/cpptasks/LinkerEnum.java index 048950ee5..9f0453468 100644 --- a/src/main/java/com/github/maven_nar/cpptasks/LinkerEnum.java +++ b/src/main/java/com/github/maven_nar/cpptasks/LinkerEnum.java @@ -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; @@ -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()), diff --git a/src/main/java/com/github/maven_nar/cpptasks/ibm/xlC_rCompiler.java b/src/main/java/com/github/maven_nar/cpptasks/ibm/xlC_rCompiler.java new file mode 100644 index 000000000..9343514d0 --- /dev/null +++ b/src/main/java/com/github/maven_nar/cpptasks/ibm/xlC_rCompiler.java @@ -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 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 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; + } + +} diff --git a/src/main/java/com/github/maven_nar/cpptasks/ibm/xlC_rLinker.java b/src/main/java/com/github/maven_nar/cpptasks/ibm/xlC_rLinker.java new file mode 100644 index 000000000..77a4f05f0 --- /dev/null +++ b/src/main/java/com/github/maven_nar/cpptasks/ibm/xlC_rLinker.java @@ -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 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"; + } + +} diff --git a/src/main/resources/com/github/maven_nar/aol.properties b/src/main/resources/com/github/maven_nar/aol.properties index 0ee5d30ba..ee51053c6 100644 --- a/src/main/resources/com/github/maven_nar/aol.properties +++ b/src/main/resources/com/github/maven_nar/aol.properties @@ -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/* @@ -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 @@ -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 #