mirror of
https://github.com/ziglang/zig.git
synced 2026-02-21 16:54:52 +00:00
update clang and ar to llvm 16
This commit is contained in:
parent
9c3bd437e6
commit
5994a5d18d
@ -656,9 +656,9 @@ include_directories(
|
||||
|
||||
# These have to go before the -Wno- flags
|
||||
if(MSVC)
|
||||
set(EXE_CXX_FLAGS "/std:c++14")
|
||||
set(EXE_CXX_FLAGS "/std:c++17")
|
||||
else(MSVC)
|
||||
set(EXE_CXX_FLAGS "-std=c++14")
|
||||
set(EXE_CXX_FLAGS "-std=c++17")
|
||||
endif(MSVC)
|
||||
|
||||
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
||||
|
||||
@ -177,7 +177,8 @@ static int PrintSupportedCPUs(std::string TargetStr) {
|
||||
// the target machine will handle the mcpu printing
|
||||
llvm::TargetOptions Options;
|
||||
std::unique_ptr<llvm::TargetMachine> TheTargetMachine(
|
||||
TheTarget->createTargetMachine(TargetStr, "", "+cpuhelp", Options, None));
|
||||
TheTarget->createTargetMachine(TargetStr, "", "+cpuhelp", Options,
|
||||
std::nullopt));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -54,6 +54,7 @@
|
||||
#include "llvm/Support/Timer.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <system_error>
|
||||
using namespace clang;
|
||||
using namespace clang::driver;
|
||||
@ -134,6 +135,7 @@ struct AssemblerInvocation {
|
||||
unsigned NoExecStack : 1;
|
||||
unsigned FatalWarnings : 1;
|
||||
unsigned NoWarn : 1;
|
||||
unsigned NoTypeCheck : 1;
|
||||
unsigned IncrementalLinkerCompatible : 1;
|
||||
unsigned EmbedBitcode : 1;
|
||||
|
||||
@ -149,7 +151,14 @@ struct AssemblerInvocation {
|
||||
|
||||
/// Darwin target variant triple, the variant of the deployment target
|
||||
/// for which the code is being compiled.
|
||||
llvm::Optional<llvm::Triple> DarwinTargetVariantTriple;
|
||||
std::optional<llvm::Triple> DarwinTargetVariantTriple;
|
||||
|
||||
/// The version of the darwin target variant SDK which was used during the
|
||||
/// compilation
|
||||
llvm::VersionTuple DarwinTargetVariantSDKVersion;
|
||||
|
||||
/// The name of a file to use with \c .secure_log_unique directives.
|
||||
std::string AsSecureLogFile;
|
||||
/// @}
|
||||
|
||||
public:
|
||||
@ -166,6 +175,7 @@ public:
|
||||
NoExecStack = 0;
|
||||
FatalWarnings = 0;
|
||||
NoWarn = 0;
|
||||
NoTypeCheck = 0;
|
||||
IncrementalLinkerCompatible = 0;
|
||||
Dwarf64 = 0;
|
||||
DwarfVersion = 0;
|
||||
@ -218,6 +228,14 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
||||
Opts.Triple = llvm::Triple::normalize(Args.getLastArgValue(OPT_triple));
|
||||
if (Arg *A = Args.getLastArg(options::OPT_darwin_target_variant_triple))
|
||||
Opts.DarwinTargetVariantTriple = llvm::Triple(A->getValue());
|
||||
if (Arg *A = Args.getLastArg(OPT_darwin_target_variant_sdk_version_EQ)) {
|
||||
VersionTuple Version;
|
||||
if (Version.tryParse(A->getValue()))
|
||||
Diags.Report(diag::err_drv_invalid_value)
|
||||
<< A->getAsString(Args) << A->getValue();
|
||||
else
|
||||
Opts.DarwinTargetVariantSDKVersion = Version;
|
||||
}
|
||||
|
||||
Opts.CPU = std::string(Args.getLastArgValue(OPT_target_cpu));
|
||||
Opts.Features = Args.getAllArgValues(OPT_target_feature);
|
||||
@ -237,11 +255,12 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
||||
Opts.CompressDebugSections =
|
||||
llvm::StringSwitch<llvm::DebugCompressionType>(A->getValue())
|
||||
.Case("none", llvm::DebugCompressionType::None)
|
||||
.Case("zlib", llvm::DebugCompressionType::Z)
|
||||
.Case("zlib", llvm::DebugCompressionType::Zlib)
|
||||
.Case("zstd", llvm::DebugCompressionType::Zstd)
|
||||
.Default(llvm::DebugCompressionType::None);
|
||||
}
|
||||
|
||||
Opts.RelaxELFRelocations = Args.hasArg(OPT_mrelax_relocations);
|
||||
Opts.RelaxELFRelocations = !Args.hasArg(OPT_mrelax_relocations_no);
|
||||
if (auto *DwarfFormatArg = Args.getLastArg(OPT_gdwarf64, OPT_gdwarf32))
|
||||
Opts.Dwarf64 = DwarfFormatArg->getOption().matches(OPT_gdwarf64);
|
||||
Opts.DwarfVersion = getLastArgIntValue(Args, OPT_dwarf_version_EQ, 2, Diags);
|
||||
@ -304,6 +323,7 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
||||
Opts.NoExecStack = Args.hasArg(OPT_mno_exec_stack);
|
||||
Opts.FatalWarnings = Args.hasArg(OPT_massembler_fatal_warnings);
|
||||
Opts.NoWarn = Args.hasArg(OPT_massembler_no_warn);
|
||||
Opts.NoTypeCheck = Args.hasArg(OPT_mno_type_check);
|
||||
Opts.RelocationModel =
|
||||
std::string(Args.getLastArgValue(OPT_mrelocation_model, "pic"));
|
||||
Opts.TargetABI = std::string(Args.getLastArgValue(OPT_target_abi));
|
||||
@ -329,6 +349,8 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
||||
.Case("default", EmitDwarfUnwindType::Default);
|
||||
}
|
||||
|
||||
Opts.AsSecureLogFile = Args.getLastArgValue(OPT_as_secure_log_file);
|
||||
|
||||
return Success;
|
||||
}
|
||||
|
||||
@ -380,6 +402,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
|
||||
|
||||
MCTargetOptions MCOptions;
|
||||
MCOptions.EmitDwarfUnwind = Opts.EmitDwarfUnwind;
|
||||
MCOptions.AsSecureLogFile = Opts.AsSecureLogFile;
|
||||
|
||||
std::unique_ptr<MCAsmInfo> MAI(
|
||||
TheTarget->createMCAsmInfo(*MRI, Opts.Triple, MCOptions));
|
||||
@ -429,6 +452,8 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
|
||||
TheTarget->createMCObjectFileInfo(Ctx, PIC));
|
||||
if (Opts.DarwinTargetVariantTriple)
|
||||
MOFI->setDarwinTargetVariantTriple(*Opts.DarwinTargetVariantTriple);
|
||||
if (!Opts.DarwinTargetVariantSDKVersion.empty())
|
||||
MOFI->setDarwinTargetVariantSDKVersion(Opts.DarwinTargetVariantSDKVersion);
|
||||
Ctx.setObjectFileInfo(MOFI.get());
|
||||
|
||||
if (Opts.SaveTemporaryLabels)
|
||||
@ -468,6 +493,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
|
||||
|
||||
MCOptions.MCNoWarn = Opts.NoWarn;
|
||||
MCOptions.MCFatalWarnings = Opts.FatalWarnings;
|
||||
MCOptions.MCNoTypeCheck = Opts.NoTypeCheck;
|
||||
MCOptions.ABIName = Opts.TargetABI;
|
||||
|
||||
// FIXME: There is a bit of code duplication with addPassesToEmitFile.
|
||||
|
||||
@ -13,6 +13,7 @@
|
||||
|
||||
#include "clang/Driver/Driver.h"
|
||||
#include "clang/Basic/DiagnosticOptions.h"
|
||||
#include "clang/Basic/HeaderInclude.h"
|
||||
#include "clang/Basic/Stack.h"
|
||||
#include "clang/Config/config.h"
|
||||
#include "clang/Driver/Compilation.h"
|
||||
@ -48,6 +49,7 @@
|
||||
#include "llvm/Support/Timer.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <set>
|
||||
#include <system_error>
|
||||
using namespace clang;
|
||||
@ -241,29 +243,68 @@ static void getCLEnvVarOptions(std::string &EnvValue, llvm::StringSaver &Saver,
|
||||
*NumberSignPtr = '=';
|
||||
}
|
||||
|
||||
static void SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) {
|
||||
auto CheckEnvVar = [](const char *EnvOptSet, const char *EnvOptFile,
|
||||
std::string &OptFile) {
|
||||
bool OptSet = !!::getenv(EnvOptSet);
|
||||
if (OptSet) {
|
||||
if (const char *Var = ::getenv(EnvOptFile))
|
||||
OptFile = Var;
|
||||
}
|
||||
return OptSet;
|
||||
};
|
||||
template <class T>
|
||||
static T checkEnvVar(const char *EnvOptSet, const char *EnvOptFile,
|
||||
std::string &OptFile) {
|
||||
const char *Str = ::getenv(EnvOptSet);
|
||||
if (!Str)
|
||||
return T{};
|
||||
|
||||
T OptVal = Str;
|
||||
if (const char *Var = ::getenv(EnvOptFile))
|
||||
OptFile = Var;
|
||||
return OptVal;
|
||||
}
|
||||
|
||||
static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) {
|
||||
TheDriver.CCPrintOptions =
|
||||
CheckEnvVar("CC_PRINT_OPTIONS", "CC_PRINT_OPTIONS_FILE",
|
||||
TheDriver.CCPrintOptionsFilename);
|
||||
TheDriver.CCPrintHeaders =
|
||||
CheckEnvVar("CC_PRINT_HEADERS", "CC_PRINT_HEADERS_FILE",
|
||||
TheDriver.CCPrintHeadersFilename);
|
||||
checkEnvVar<bool>("CC_PRINT_OPTIONS", "CC_PRINT_OPTIONS_FILE",
|
||||
TheDriver.CCPrintOptionsFilename);
|
||||
if (checkEnvVar<bool>("CC_PRINT_HEADERS", "CC_PRINT_HEADERS_FILE",
|
||||
TheDriver.CCPrintHeadersFilename)) {
|
||||
TheDriver.CCPrintHeadersFormat = HIFMT_Textual;
|
||||
TheDriver.CCPrintHeadersFiltering = HIFIL_None;
|
||||
} else {
|
||||
std::string EnvVar = checkEnvVar<std::string>(
|
||||
"CC_PRINT_HEADERS_FORMAT", "CC_PRINT_HEADERS_FILE",
|
||||
TheDriver.CCPrintHeadersFilename);
|
||||
if (!EnvVar.empty()) {
|
||||
TheDriver.CCPrintHeadersFormat =
|
||||
stringToHeaderIncludeFormatKind(EnvVar.c_str());
|
||||
if (!TheDriver.CCPrintHeadersFormat) {
|
||||
TheDriver.Diag(clang::diag::err_drv_print_header_env_var)
|
||||
<< 0 << EnvVar;
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *FilteringStr = ::getenv("CC_PRINT_HEADERS_FILTERING");
|
||||
HeaderIncludeFilteringKind Filtering;
|
||||
if (!stringToHeaderIncludeFiltering(FilteringStr, Filtering)) {
|
||||
TheDriver.Diag(clang::diag::err_drv_print_header_env_var)
|
||||
<< 1 << FilteringStr;
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((TheDriver.CCPrintHeadersFormat == HIFMT_Textual &&
|
||||
Filtering != HIFIL_None) ||
|
||||
(TheDriver.CCPrintHeadersFormat == HIFMT_JSON &&
|
||||
Filtering != HIFIL_Only_Direct_System)) {
|
||||
TheDriver.Diag(clang::diag::err_drv_print_header_env_var_combination)
|
||||
<< EnvVar << FilteringStr;
|
||||
return false;
|
||||
}
|
||||
TheDriver.CCPrintHeadersFiltering = Filtering;
|
||||
}
|
||||
}
|
||||
|
||||
TheDriver.CCLogDiagnostics =
|
||||
CheckEnvVar("CC_LOG_DIAGNOSTICS", "CC_LOG_DIAGNOSTICS_FILE",
|
||||
TheDriver.CCLogDiagnosticsFilename);
|
||||
checkEnvVar<bool>("CC_LOG_DIAGNOSTICS", "CC_LOG_DIAGNOSTICS_FILE",
|
||||
TheDriver.CCLogDiagnosticsFilename);
|
||||
TheDriver.CCPrintProcessStats =
|
||||
CheckEnvVar("CC_PRINT_PROC_STAT", "CC_PRINT_PROC_STAT_FILE",
|
||||
TheDriver.CCPrintStatReportFilename);
|
||||
checkEnvVar<bool>("CC_PRINT_PROC_STAT", "CC_PRINT_PROC_STAT_FILE",
|
||||
TheDriver.CCPrintStatReportFilename);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void FixupDiagPrefixExeName(TextDiagnosticPrinter *DiagClient,
|
||||
@ -306,16 +347,17 @@ static int ExecuteCC1Tool(SmallVectorImpl<const char *> &ArgV) {
|
||||
llvm::cl::ResetAllOptionOccurrences();
|
||||
|
||||
llvm::BumpPtrAllocator A;
|
||||
llvm::StringSaver Saver(A);
|
||||
llvm::cl::ExpandResponseFiles(Saver, &llvm::cl::TokenizeGNUCommandLine, ArgV,
|
||||
/*MarkEOLs=*/false);
|
||||
llvm::cl::ExpansionContext ECtx(A, llvm::cl::TokenizeGNUCommandLine);
|
||||
if (llvm::Error Err = ECtx.expandResponseFiles(ArgV)) {
|
||||
llvm::errs() << toString(std::move(Err)) << '\n';
|
||||
return 1;
|
||||
}
|
||||
StringRef Tool = ArgV[1];
|
||||
void *GetExecutablePathVP = (void *)(intptr_t)GetExecutablePath;
|
||||
if (Tool == "-cc1")
|
||||
return cc1_main(makeArrayRef(ArgV).slice(1), ArgV[0], GetExecutablePathVP);
|
||||
return cc1_main(ArrayRef(ArgV).slice(1), ArgV[0], GetExecutablePathVP);
|
||||
if (Tool == "-cc1as")
|
||||
return cc1as_main(makeArrayRef(ArgV).slice(2), ArgV[0],
|
||||
GetExecutablePathVP);
|
||||
return cc1as_main(ArrayRef(ArgV).slice(2), ArgV[0], GetExecutablePathVP);
|
||||
// Reject unknown tools.
|
||||
llvm::errs() << "error: unknown integrated tool '" << Tool << "'. "
|
||||
<< "Valid tools include '-cc1' and '-cc1as'.\n";
|
||||
@ -355,7 +397,7 @@ int ZigClang_main(int Argc, const char **Argv) {
|
||||
// Finally, our -cc1 tools don't care which tokenization mode we use because
|
||||
// response files written by clang will tokenize the same way in either mode.
|
||||
bool ClangCLMode =
|
||||
IsClangCL(getDriverMode(Args[0], llvm::makeArrayRef(Args).slice(1)));
|
||||
IsClangCL(getDriverMode(Args[0], llvm::ArrayRef(Args).slice(1)));
|
||||
enum { Default, POSIX, Windows } RSPQuoting = Default;
|
||||
for (const char *F : Args) {
|
||||
if (strcmp(F, "--rsp-quoting=posix") == 0)
|
||||
@ -377,7 +419,12 @@ int ZigClang_main(int Argc, const char **Argv) {
|
||||
|
||||
if (MarkEOLs && Args.size() > 1 && StringRef(Args[1]).startswith("-cc1"))
|
||||
MarkEOLs = false;
|
||||
llvm::cl::ExpandResponseFiles(Saver, Tokenizer, Args, MarkEOLs);
|
||||
llvm::cl::ExpansionContext ECtx(A, Tokenizer);
|
||||
ECtx.setMarkEOLs(MarkEOLs);
|
||||
if (llvm::Error Err = ECtx.expandResponseFiles(Args)) {
|
||||
llvm::errs() << toString(std::move(Err)) << '\n';
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Handle -cc1 integrated tools, even if -cc1 was expanded from a response
|
||||
// file.
|
||||
@ -409,19 +456,19 @@ int ZigClang_main(int Argc, const char **Argv) {
|
||||
// prepended or appended.
|
||||
if (ClangCLMode) {
|
||||
// Arguments in "CL" are prepended.
|
||||
llvm::Optional<std::string> OptCL = llvm::sys::Process::GetEnv("CL");
|
||||
std::optional<std::string> OptCL = llvm::sys::Process::GetEnv("CL");
|
||||
if (OptCL) {
|
||||
SmallVector<const char *, 8> PrependedOpts;
|
||||
getCLEnvVarOptions(OptCL.value(), Saver, PrependedOpts);
|
||||
getCLEnvVarOptions(*OptCL, Saver, PrependedOpts);
|
||||
|
||||
// Insert right after the program name to prepend to the argument list.
|
||||
Args.insert(Args.begin() + 1, PrependedOpts.begin(), PrependedOpts.end());
|
||||
}
|
||||
// Arguments in "_CL_" are appended.
|
||||
llvm::Optional<std::string> Opt_CL_ = llvm::sys::Process::GetEnv("_CL_");
|
||||
std::optional<std::string> Opt_CL_ = llvm::sys::Process::GetEnv("_CL_");
|
||||
if (Opt_CL_) {
|
||||
SmallVector<const char *, 8> AppendedOpts;
|
||||
getCLEnvVarOptions(Opt_CL_.value(), Saver, AppendedOpts);
|
||||
getCLEnvVarOptions(*Opt_CL_, Saver, AppendedOpts);
|
||||
|
||||
// Insert at the end of the argument list to append.
|
||||
Args.append(AppendedOpts.begin(), AppendedOpts.end());
|
||||
@ -479,7 +526,8 @@ int ZigClang_main(int Argc, const char **Argv) {
|
||||
|
||||
insertTargetAndModeArgs(TargetAndMode, Args, SavedStrings);
|
||||
|
||||
SetBackdoorDriverOutputsFromEnvVars(TheDriver);
|
||||
if (!SetBackdoorDriverOutputsFromEnvVars(TheDriver))
|
||||
return 1;
|
||||
|
||||
if (!UseNewCC1Process) {
|
||||
TheDriver.CC1Main = &ExecuteCC1Tool;
|
||||
@ -491,12 +539,13 @@ int ZigClang_main(int Argc, const char **Argv) {
|
||||
|
||||
Driver::ReproLevel ReproLevel = Driver::ReproLevel::OnCrash;
|
||||
if (Arg *A = C->getArgs().getLastArg(options::OPT_gen_reproducer_eq)) {
|
||||
auto Level = llvm::StringSwitch<Optional<Driver::ReproLevel>>(A->getValue())
|
||||
.Case("off", Driver::ReproLevel::Off)
|
||||
.Case("crash", Driver::ReproLevel::OnCrash)
|
||||
.Case("error", Driver::ReproLevel::OnError)
|
||||
.Case("always", Driver::ReproLevel::Always)
|
||||
.Default(None);
|
||||
auto Level =
|
||||
llvm::StringSwitch<std::optional<Driver::ReproLevel>>(A->getValue())
|
||||
.Case("off", Driver::ReproLevel::Off)
|
||||
.Case("crash", Driver::ReproLevel::OnCrash)
|
||||
.Case("error", Driver::ReproLevel::OnError)
|
||||
.Case("always", Driver::ReproLevel::Always)
|
||||
.Default(std::nullopt);
|
||||
if (!Level) {
|
||||
llvm::errs() << "Unknown value for " << A->getSpelling() << ": '"
|
||||
<< A->getValue() << "'\n";
|
||||
|
||||
@ -68,9 +68,9 @@ static StringRef ToolName;
|
||||
static StringRef Stem;
|
||||
|
||||
static void printRanLibHelp(StringRef ToolName) {
|
||||
outs() << "OVERVIEW: LLVM Ranlib\n\n"
|
||||
<< "This program generates an index to speed access to archives\n\n"
|
||||
<< "USAGE: " + ToolName + " <archive-file>\n\n"
|
||||
outs() << "OVERVIEW: LLVM ranlib\n\n"
|
||||
<< "Generate an index for archives\n\n"
|
||||
<< "USAGE: " + ToolName + " archive...\n\n"
|
||||
<< "OPTIONS:\n"
|
||||
<< " -h --help - Display available options\n"
|
||||
<< " -v --version - Display the version of this program\n"
|
||||
@ -875,8 +875,16 @@ static InsertAction computeInsertAction(ArchiveOperation Operation,
|
||||
|
||||
if (Operation == QuickAppend || Members.empty())
|
||||
return IA_AddOldMember;
|
||||
auto MI = find_if(
|
||||
Members, [Name](StringRef Path) { return comparePaths(Name, Path); });
|
||||
|
||||
auto MI = find_if(Members, [Name](StringRef Path) {
|
||||
if (Thin && !sys::path::is_absolute(Path)) {
|
||||
Expected<std::string> PathOrErr =
|
||||
computeArchiveRelativePath(ArchiveName, Path);
|
||||
return comparePaths(Name, PathOrErr ? *PathOrErr : Path);
|
||||
} else {
|
||||
return comparePaths(Name, Path);
|
||||
}
|
||||
});
|
||||
|
||||
if (MI == Members.end())
|
||||
return IA_AddOldMember;
|
||||
@ -1125,8 +1133,7 @@ static void performOperation(ArchiveOperation Operation,
|
||||
llvm_unreachable("Unknown operation.");
|
||||
}
|
||||
|
||||
static int performOperation(ArchiveOperation Operation,
|
||||
std::vector<NewArchiveMember> *NewMembers) {
|
||||
static int performOperation(ArchiveOperation Operation) {
|
||||
// Create or open the archive object.
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> Buf = MemoryBuffer::getFile(
|
||||
ArchiveName, /*IsText=*/false, /*RequiresNullTerminator=*/false);
|
||||
@ -1145,7 +1152,7 @@ static int performOperation(ArchiveOperation Operation,
|
||||
if (Archive->isThin())
|
||||
CompareFullPath = true;
|
||||
performOperation(Operation, Archive.get(), std::move(Buf.get()),
|
||||
NewMembers);
|
||||
/*NewMembers=*/nullptr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1160,7 +1167,7 @@ static int performOperation(ArchiveOperation Operation,
|
||||
}
|
||||
}
|
||||
|
||||
performOperation(Operation, nullptr, nullptr, NewMembers);
|
||||
performOperation(Operation, nullptr, nullptr, /*NewMembers=*/nullptr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1219,7 +1226,7 @@ static void runMRIScript() {
|
||||
break;
|
||||
case MRICommand::CreateThin:
|
||||
Thin = true;
|
||||
LLVM_FALLTHROUGH;
|
||||
[[fallthrough]];
|
||||
case MRICommand::Create:
|
||||
Create = true;
|
||||
if (!ArchiveName.empty())
|
||||
@ -1323,7 +1330,7 @@ static int ar_main(int argc, char **argv) {
|
||||
SmallVector<const char *, 0> Argv(argv + 1, argv + argc);
|
||||
StringSaver Saver(Alloc);
|
||||
|
||||
cl::ExpandResponseFiles(Saver, getRspQuoting(makeArrayRef(argv, argc)), Argv);
|
||||
cl::ExpandResponseFiles(Saver, getRspQuoting(ArrayRef(argv, argc)), Argv);
|
||||
|
||||
// Get BitMode from enviorment variable "OBJECT_MODE" for AIX OS, if
|
||||
// specified.
|
||||
@ -1403,12 +1410,11 @@ static int ar_main(int argc, char **argv) {
|
||||
Options += *ArgIt + 1;
|
||||
}
|
||||
|
||||
ArchiveOperation Operation = parseCommandLine();
|
||||
return performOperation(Operation, nullptr);
|
||||
return performOperation(parseCommandLine());
|
||||
}
|
||||
|
||||
static int ranlib_main(int argc, char **argv) {
|
||||
bool ArchiveSpecified = false;
|
||||
std::vector<StringRef> Archives;
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
StringRef arg(argv[i]);
|
||||
if (handleGenericOption(arg)) {
|
||||
@ -1433,16 +1439,17 @@ static int ranlib_main(int argc, char **argv) {
|
||||
arg = arg.drop_front(1);
|
||||
}
|
||||
} else {
|
||||
if (ArchiveSpecified)
|
||||
fail("exactly one archive should be specified");
|
||||
ArchiveSpecified = true;
|
||||
ArchiveName = arg.str();
|
||||
Archives.push_back(arg);
|
||||
}
|
||||
}
|
||||
if (!ArchiveSpecified) {
|
||||
badUsage("an archive name must be specified");
|
||||
|
||||
for (StringRef Archive : Archives) {
|
||||
ArchiveName = Archive.str();
|
||||
performOperation(CreateSymTab);
|
||||
}
|
||||
return performOperation(CreateSymTab, nullptr);
|
||||
if (Archives.empty())
|
||||
badUsage("an archive name must be specified");
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern "C" int ZigLlvmAr_main(int argc, char **argv);
|
||||
@ -1474,11 +1481,11 @@ int ZigLlvmAr_main(int argc, char **argv) {
|
||||
};
|
||||
|
||||
if (Is("dlltool"))
|
||||
return dlltoolDriverMain(makeArrayRef(argv, argc));
|
||||
return dlltoolDriverMain(ArrayRef(argv, argc));
|
||||
if (Is("ranlib"))
|
||||
return ranlib_main(argc, argv);
|
||||
if (Is("lib"))
|
||||
return libDriverMain(makeArrayRef(argv, argc));
|
||||
return libDriverMain(ArrayRef(argv, argc));
|
||||
if (Is("ar"))
|
||||
return ar_main(argc, argv);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user