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() @@ -206,8 +206,7 @@ function SetupLLVMLibs()
"lldDriver",
"lldReaderWriter",
"lldYAML",
"lldMachO",
"lldMachOOld"
"lldMachO"
}
filter(c)

1
build/llvm/LLVM.lua

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

4
src/CppParser/Link.cpp

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

12
src/Parser/LinkerOptions.cs

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

Loading…
Cancel
Save