Browse Source

Auto-link generated C++ with the new LLD Mach-O

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1641/head
Dimitar Dobrev 4 years ago
parent
commit
d9394cd5df
  1. 3
      build/LLVM.lua
  2. 1
      build/llvm/LLVM.lua
  3. 4
      src/CppParser/Link.cpp
  4. 12
      src/Parser/LinkerOptions.cs

3
build/LLVM.lua

@ -206,8 +206,7 @@ function SetupLLVMLibs()
"lldDriver", "lldDriver",
"lldReaderWriter", "lldReaderWriter",
"lldYAML", "lldYAML",
"lldMachO", "lldMachO"
"lldMachOOld"
} }
filter(c) filter(c)

1
build/llvm/LLVM.lua

@ -350,6 +350,7 @@ function cmake(gen, conf, builddir, options)
.. ' -DLLVM_TOOL_VFABI_DEMANGLE_FUZZER_BUILD=false' .. ' -DLLVM_TOOL_VFABI_DEMANGLE_FUZZER_BUILD=false'
.. ' -DLLVM_TOOL_XCODE_TOOLCHAIN_BUILD=false' .. ' -DLLVM_TOOL_XCODE_TOOLCHAIN_BUILD=false'
.. ' -DLLVM_TOOL_YAML2OBJ_BUILD=false' .. ' -DLLVM_TOOL_YAML2OBJ_BUILD=false'
.. ' -DLLVM_HAVE_LIBXAR=false'
.. ' -DCLANG_BUILD_EXAMPLES=false ' .. ' -DCLANG_BUILD_EXAMPLES=false '
.. ' -DCLANG_BUILD_TOOLS=false' .. ' -DCLANG_BUILD_TOOLS=false'
.. ' -DCLANG_ENABLE_ARCMT=false' .. ' -DCLANG_ENABLE_ARCMT=false'

4
src/CppParser/Link.cpp

@ -154,7 +154,7 @@ void Parser::LinkMachO(const CppLinkerOptions* LinkerOptions,
#ifdef __APPLE__ #ifdef __APPLE__
using namespace llvm; using namespace llvm;
args.push_back("-flavor darwinnew"); args.push_back("-flavor darwin");
for (const std::string& Arg : LinkerOptions->Arguments) for (const std::string& Arg : LinkerOptions->Arguments)
{ {
args.push_back(Arg.data()); args.push_back(Arg.data());
@ -182,6 +182,6 @@ void Parser::LinkMachO(const CppLinkerOptions* LinkerOptions,
std::string Out(Output); std::string Out(Output);
args.push_back(Out.data()); args.push_back(Out.data());
lld::mach_o::link(args, false, outs(), errs()); lld::macho::link(args, false, outs(), errs());
#endif #endif
} }

12
src/Parser/LinkerOptions.cs

@ -29,12 +29,12 @@ namespace CppSharp.Parser
public void Setup(string triple, LanguageVersion? languageVersion) public void Setup(string triple, LanguageVersion? languageVersion)
{ {
string[] parts = triple.Split('-');
switch (Platform.Host) switch (Platform.Host)
{ {
case TargetPlatform.Windows: case TargetPlatform.Windows:
AddArguments("-dll"); AddArguments("-dll");
AddArguments("libcmt.lib"); AddArguments("libcmt.lib");
string[] parts = triple.Split('-');
if (parts.Any(p => p.StartsWith("mingw") || p.StartsWith("gnu"))) if (parts.Any(p => p.StartsWith("mingw") || p.StartsWith("gnu")))
{ {
AddArguments("libstdc++-6.dll"); AddArguments("libstdc++-6.dll");
@ -42,7 +42,7 @@ namespace CppSharp.Parser
break; break;
case TargetPlatform.Linux: case TargetPlatform.Linux:
case TargetPlatform.Android: case TargetPlatform.Android:
AddArguments(SystemLibraryPath ?? "-L/usr/lib/x86_64-linux-gnu"); AddArguments("-L" + (SystemLibraryPath ?? "/usr/lib/x86_64-linux-gnu"));
AddArguments("-lc"); AddArguments("-lc");
AddArguments("--shared"); AddArguments("--shared");
AddArguments("-rpath"); AddArguments("-rpath");
@ -58,9 +58,13 @@ namespace CppSharp.Parser
} }
AddArguments("-lSystem"); AddArguments("-lSystem");
AddArguments("-dylib"); AddArguments("-dylib");
AddArguments("-sdk_version"); AddArguments("-arch");
AddArguments(parts.Length > 0 ? parts[0] : "x86_64");
AddArguments("-platform_version");
AddArguments("macos");
AddArguments(MacOSSDKVersion.ToString());
AddArguments(MacOSSDKVersion.ToString()); AddArguments(MacOSSDKVersion.ToString());
AddArguments(SystemLibraryPath ?? "-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"); AddArguments("-L" + (SystemLibraryPath ?? "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"));
AddArguments("-rpath"); AddArguments("-rpath");
AddArguments("."); AddArguments(".");
break; break;

Loading…
Cancel
Save