Browse Source

Swich to the new mach-o support for C++ linking

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
mach-o-new
Dimitar Dobrev 4 years ago
parent
commit
bc7cfb24ae
  1. 14
      src/CppParser/CppParser.cpp
  2. 13
      src/CppParser/Link.cpp

14
src/CppParser/CppParser.cpp

@ -95,12 +95,16 @@ LinkerOptions::LinkerOptions(const char* Triple)
case llvm::Triple::OSType::Darwin: case llvm::Triple::OSType::Darwin:
case llvm::Triple::OSType::MacOSX: case llvm::Triple::OSType::MacOSX:
addArguments("-lc++"); addArguments("-arch");
addArguments("-lSystem"); addArguments("x86_64");
addArguments("-dylib"); addArguments("-platform_version");
addArguments("-sdk_version"); addArguments("macos");
addArguments("10.12.0");
addArguments("10.12.0"); addArguments("10.12.0");
addArguments("-dylib");
addArguments("-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"); addArguments("-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib");
addArguments("-lc++");
addArguments("-lSystem");
addArguments("-rpath"); addArguments("-rpath");
addArguments("."); addArguments(".");
break; break;
@ -144,4 +148,4 @@ ParserDiagnostic::ParserDiagnostic(const ParserDiagnostic& rhs)
ParserDiagnostic::~ParserDiagnostic() {} ParserDiagnostic::~ParserDiagnostic() {}
} } } }

13
src/CppParser/Link.cpp

@ -147,14 +147,21 @@ void Parser::LinkELF(const LinkerOptions* LinkerOptions,
#endif #endif
} }
bool linked = false;
void Parser::LinkMachO(const LinkerOptions* LinkerOptions, void Parser::LinkMachO(const LinkerOptions* LinkerOptions,
std::vector<const char*>& args, std::vector<const char*>& args,
llvm::StringRef& Dir, llvm::StringRef& Stem) llvm::StringRef& Dir, llvm::StringRef& Stem)
{ {
if (linked)
{
return;
}
linked = true;
#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 +189,6 @@ void Parser::LinkMachO(const LinkerOptions* 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
} }

Loading…
Cancel
Save