From bc7cfb24ae5f925addaf05c53e97de746dcb2197 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Thu, 7 Oct 2021 00:29:43 +0300 Subject: [PATCH] Swich to the new mach-o support for C++ linking Signed-off-by: Dimitar Dobrev --- src/CppParser/CppParser.cpp | 14 +++++++++----- src/CppParser/Link.cpp | 13 ++++++++++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/CppParser/CppParser.cpp b/src/CppParser/CppParser.cpp index b7fc4a41..6e4bcaa3 100644 --- a/src/CppParser/CppParser.cpp +++ b/src/CppParser/CppParser.cpp @@ -95,12 +95,16 @@ LinkerOptions::LinkerOptions(const char* Triple) case llvm::Triple::OSType::Darwin: case llvm::Triple::OSType::MacOSX: - addArguments("-lc++"); - addArguments("-lSystem"); - addArguments("-dylib"); - addArguments("-sdk_version"); + addArguments("-arch"); + addArguments("x86_64"); + addArguments("-platform_version"); + addArguments("macos"); + addArguments("10.12.0"); addArguments("10.12.0"); + addArguments("-dylib"); addArguments("-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"); + addArguments("-lc++"); + addArguments("-lSystem"); addArguments("-rpath"); addArguments("."); break; @@ -144,4 +148,4 @@ ParserDiagnostic::ParserDiagnostic(const ParserDiagnostic& rhs) ParserDiagnostic::~ParserDiagnostic() {} -} } \ No newline at end of file +} } diff --git a/src/CppParser/Link.cpp b/src/CppParser/Link.cpp index 4f3eda7f..54de619c 100644 --- a/src/CppParser/Link.cpp +++ b/src/CppParser/Link.cpp @@ -147,14 +147,21 @@ void Parser::LinkELF(const LinkerOptions* LinkerOptions, #endif } +bool linked = false; + void Parser::LinkMachO(const LinkerOptions* LinkerOptions, std::vector& args, llvm::StringRef& Dir, llvm::StringRef& Stem) { + if (linked) + { + return; + } + linked = true; #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 +189,6 @@ void Parser::LinkMachO(const LinkerOptions* 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 -} \ No newline at end of file +}