summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2013-09-13 12:46:29 +0200
committerSven Gothel <[email protected]>2013-09-13 12:46:29 +0200
commit8c2badcaba6b791082d50efda4441b7c69f4adbf (patch)
tree72c13613d5f6e47f5bdfe07167d000e3ff1818cc /src
parent6a5bc6fd3127cbd70fd7d337a26587c5ccb3fa51 (diff)
Complete 2cdd1070056c0f7e9dc7f40de19c2bfdfef0432a: Add 'clang' and 'clang++' support (compiler/linker) - Some derived linker definitions were missing.
Diffstat (limited to 'src')
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java32
1 files changed, 22 insertions, 10 deletions
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java b/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java
index f02dd64..52a5473 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java
@@ -37,31 +37,43 @@ public class GccLinker extends AbstractLdLinker {
private static String[] linkerOptions = new String[]{"-bundle",
"-dynamiclib", "-nostartfiles", "-nostdlib", "-prebind", "-noprebind", "-s",
"-static", "-shared", "-symbolic", "-Xlinker",
- "--export-all-symbols", "-static-libgcc",};
+ "--export-all-symbols", "-static-libgcc",};
private static String[] darwinLinkerOptions = new String[]{"-arch", "-weak_framework", "-lazy_framework", "-weak_library" };
- private static final GccLinker dllLinker = new GccLinker("gcc", objFiles,
- discardFiles, "lib", ".so", false, new GccLinker("gcc", objFiles,
- discardFiles, "lib", ".so", true, null));
+
+ private static final GccLinker dllLinker = new GccLinker("gcc", objFiles,
+ discardFiles, "lib", ".so", false, new GccLinker("gcc", objFiles, discardFiles, "lib", ".so", true, null));
+ private static final GccLinker dllCLangLinker = new GccLinker("clang", objFiles,
+ discardFiles, "lib", ".so", false, new GccLinker("clang", objFiles, discardFiles, "lib", ".so", true, null));
+
private static final GccLinker instance = new GccLinker("gcc", objFiles,
discardFiles, "", "", false, null);
private static final GccLinker clangInstance = new GccLinker("clang", objFiles,
discardFiles, "", "", false, null);
+
private static final GccLinker machBundleLinker = new GccLinker("gcc",
objFiles, discardFiles, "lib", ".bundle", false, null);
+ private static final GccLinker machCLangBundleLinker = new GccLinker("clang",
+ objFiles, discardFiles, "lib", ".bundle", false, null);
+
private static final GccLinker machDllLinker = new GccLinker("gcc",
objFiles, discardFiles, "lib", ".dylib", false, null);
+ private static final GccLinker machDllCLangLinker = new GccLinker("clang",
+ objFiles, discardFiles, "lib", ".dylib", false, null);
+
public static GccLinker getInstance() {
return instance;
}
public static GccLinker getCLangInstance() {
return clangInstance;
}
+ private final boolean isGCC;
private File[] libDirs;
protected GccLinker(String command, String[] extensions,
String[] ignoredExtensions, String outputPrefix,
String outputSuffix, boolean isLibtool, GccLinker libtoolLinker) {
super(command, "-dumpversion", extensions, ignoredExtensions,
outputPrefix, outputSuffix, isLibtool, libtoolLinker);
+ isGCC = "gcc".equals(command);
}
protected void addImpliedArgs(boolean debug, LinkType linkType, Vector args) {
super.addImpliedArgs(debug, linkType, args);
@@ -204,22 +216,22 @@ public class GccLinker extends AbstractLdLinker {
}
public Linker getLinker(LinkType type) {
if (type.isStaticLibrary()) {
- return GccLibrarian.getInstance();
+ return GccLibrarian.getInstance(); // uses 'ar', which is 'gcc' agnostic
}
if (type.isPluginModule()) {
if (isDarwin()) {
- return machBundleLinker;
+ return isGCC ? machBundleLinker : machCLangBundleLinker;
} else {
- return dllLinker;
+ return isGCC ? dllLinker : dllCLangLinker;
}
}
if (type.isSharedLibrary()) {
if (isDarwin()) {
- return machDllLinker;
+ return isGCC ? machDllLinker : machDllCLangLinker;
} else {
- return dllLinker;
+ return isGCC ? dllLinker : dllCLangLinker;
}
}
- return instance;
+ return isGCC ? instance : clangInstance;
}
}