Such filename fix could be part of https://reviews.llvm.org/D50246
pi 3. 8. 2018 o 15:17 Nico Weber <tha...@chromium.org> napísal(a): > I'm getting this warning from the mac linker after this commit: > > /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: > warning same member name (libclangDriver.RISCV.o) in output file used for > input files: obj/clang/lib/Driver/ToolChains/Arch/libclangDriver.RISCV.o > and: obj/clang/lib/Driver/ToolChains/libclangDriver.RISCV.o (due to use of > basename, truncation, blank padding or duplicate input files) > > Could we rename the file to fix that warning? > > On Tue, Jul 31, 2018 at 10:40 AM David Bolvansky via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: xbolva00 >> Date: Tue Jul 31 07:21:46 2018 >> New Revision: 338385 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=338385&view=rev >> Log: >> [RISCV] Add driver for riscv32-unknown-elf baremetal target >> >> Summary: >> This patch adds a driver for the baremetal RISC-V target (i.e. >> riscv32-unknown-elf). For reference, D39963 added basic target info and >> added support for riscv32-linux-unknown-elf. >> >> Patch by: asb (Alex Bradbury) >> >> Reviewers: efriedma, phosek, apazos, espindola, mgrang >> >> Reviewed By: mgrang >> >> Subscribers: jrtc27, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, >> emaste, mgorny, arichardson, rbar, johnrusso, simoncook, >> jordy.potman.lists, sabuasal, niosHD, kito-cheng, shiva0217, zzheng, >> edward-jones, mgrang, cfe-commits >> >> Differential Revision: https://reviews.llvm.org/D46822 >> >> Added: >> cfe/trunk/lib/Driver/ToolChains/RISCV.cpp >> cfe/trunk/lib/Driver/ToolChains/RISCV.h >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/ >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/bin/ >> >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/bin/riscv32-unknown-elf-ld >> (with props) >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/lib/ >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/lib/gcc/ >> >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/ >> >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/ >> >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtbegin.o >> >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtend.o >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/riscv32-unknown-elf/ >> >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/riscv32-unknown-elf/include/ >> >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/riscv32-unknown-elf/include/c++/ >> >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/riscv32-unknown-elf/include/c++/8.0.1/ >> >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/riscv32-unknown-elf/include/c++/8.0.1/.keep >> >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib/ >> >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib/crt0.o >> Modified: >> cfe/trunk/lib/Driver/CMakeLists.txt >> cfe/trunk/lib/Driver/Driver.cpp >> cfe/trunk/lib/Driver/ToolChains/Gnu.cpp >> cfe/trunk/test/Driver/riscv32-toolchain.c >> >> Modified: cfe/trunk/lib/Driver/CMakeLists.txt >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/CMakeLists.txt?rev=338385&r1=338384&r2=338385&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Driver/CMakeLists.txt (original) >> +++ cfe/trunk/lib/Driver/CMakeLists.txt Tue Jul 31 07:21:46 2018 >> @@ -57,6 +57,7 @@ add_clang_library(clangDriver >> ToolChains/NetBSD.cpp >> ToolChains/OpenBSD.cpp >> ToolChains/PS4CPU.cpp >> + ToolChains/RISCV.cpp >> ToolChains/Solaris.cpp >> ToolChains/TCE.cpp >> ToolChains/WebAssembly.cpp >> >> Modified: cfe/trunk/lib/Driver/Driver.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=338385&r1=338384&r2=338385&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Driver/Driver.cpp (original) >> +++ cfe/trunk/lib/Driver/Driver.cpp Tue Jul 31 07:21:46 2018 >> @@ -37,6 +37,7 @@ >> #include "ToolChains/NetBSD.h" >> #include "ToolChains/OpenBSD.h" >> #include "ToolChains/PS4CPU.h" >> +#include "ToolChains/RISCV.h" >> #include "ToolChains/Solaris.h" >> #include "ToolChains/TCE.h" >> #include "ToolChains/WebAssembly.h" >> @@ -4399,6 +4400,10 @@ const ToolChain &Driver::getToolChain(co >> case llvm::Triple::avr: >> TC = llvm::make_unique<toolchains::AVRToolChain>(*this, Target, >> Args); >> break; >> + case llvm::Triple::riscv32: >> + case llvm::Triple::riscv64: >> + TC = llvm::make_unique<toolchains::RISCVToolChain>(*this, >> Target, Args); >> + break; >> default: >> if (Target.getVendor() == llvm::Triple::Myriad) >> TC = llvm::make_unique<toolchains::MyriadToolChain>(*this, >> Target, >> >> Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Gnu.cpp?rev=338385&r1=338384&r2=338385&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Driver/ToolChains/Gnu.cpp (original) >> +++ cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Tue Jul 31 07:21:46 2018 >> @@ -1877,7 +1877,8 @@ void Generic_GCC::GCCInstallationDetecto >> >> static const char *const RISCV32LibDirs[] = {"/lib", "/lib32"}; >> static const char *const RISCVTriples[] = {"riscv32-unknown-linux-gnu", >> - >> "riscv64-unknown-linux-gnu"}; >> + "riscv64-unknown-linux-gnu", >> + "riscv32-unknown-elf"}; >> >> static const char *const SPARCv8LibDirs[] = {"/lib32", "/lib"}; >> static const char *const SPARCv8Triples[] = {"sparc-linux-gnu", >> >> Added: cfe/trunk/lib/Driver/ToolChains/RISCV.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/RISCV.cpp?rev=338385&view=auto >> >> ============================================================================== >> --- cfe/trunk/lib/Driver/ToolChains/RISCV.cpp (added) >> +++ cfe/trunk/lib/Driver/ToolChains/RISCV.cpp Tue Jul 31 07:21:46 2018 >> @@ -0,0 +1,117 @@ >> +//===--- RISCV.cpp - RISCV ToolChain Implementations ------------*- C++ >> -*-===// >> +// >> +// The LLVM Compiler Infrastructure >> +// >> +// This file is distributed under the University of Illinois Open Source >> +// License. See LICENSE.TXT for details. >> +// >> >> +//===----------------------------------------------------------------------===// >> + >> +#include "RISCV.h" >> +#include "CommonArgs.h" >> +#include "InputInfo.h" >> +#include "clang/Driver/Compilation.h" >> +#include "clang/Driver/Options.h" >> +#include "llvm/Option/ArgList.h" >> +#include "llvm/Support/Path.h" >> +#include "llvm/Support/raw_ostream.h" >> + >> +using namespace clang::driver; >> +using namespace clang::driver::toolchains; >> +using namespace clang::driver::tools; >> +using namespace clang; >> +using namespace llvm::opt; >> + >> +/// RISCV Toolchain >> +RISCVToolChain::RISCVToolChain(const Driver &D, const llvm::Triple >> &Triple, >> + const ArgList &Args) >> + : Generic_ELF(D, Triple, Args) { >> + GCCInstallation.init(Triple, Args); >> + getFilePaths().push_back(D.SysRoot + "/lib"); >> + if (GCCInstallation.isValid()) { >> + getFilePaths().push_back(GCCInstallation.getInstallPath().str()); >> + getProgramPaths().push_back( >> + (GCCInstallation.getParentLibPath() + "/../bin").str()); >> + } >> +} >> + >> +Tool *RISCVToolChain::buildLinker() const { >> + return new tools::RISCV::Linker(*this); >> +} >> + >> +void RISCVToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, >> + ArgStringList &CC1Args) >> const { >> + if (DriverArgs.hasArg(options::OPT_nostdinc)) >> + return; >> + >> + if (!DriverArgs.hasArg(options::OPT_nostdlibinc)) { >> + SmallString<128> Dir(getDriver().SysRoot); >> + llvm::sys::path::append(Dir, "include"); >> + addSystemInclude(DriverArgs, CC1Args, Dir.str()); >> + } >> +} >> + >> +void RISCVToolChain::addLibStdCxxIncludePaths( >> + const llvm::opt::ArgList &DriverArgs, >> + llvm::opt::ArgStringList &CC1Args) const { >> + StringRef LibDir = GCCInstallation.getParentLibPath(); >> + const GCCVersion &Version = GCCInstallation.getVersion(); >> + StringRef TripleStr = GCCInstallation.getTriple().str(); >> + const Multilib &Multilib = GCCInstallation.getMultilib(); >> + addLibStdCXXIncludePaths( >> + LibDir.str() + "/../" + TripleStr.str() + "/include/c++/" + >> Version.Text, >> + "", TripleStr, "", "", Multilib.includeSuffix(), DriverArgs, >> CC1Args); >> +} >> + >> +void RISCV::Linker::ConstructJob(Compilation &C, const JobAction &JA, >> + const InputInfo &Output, >> + const InputInfoList &Inputs, >> + const ArgList &Args, >> + const char *LinkingOutput) const { >> + const ToolChain &ToolChain = getToolChain(); >> + const Driver &D = ToolChain.getDriver(); >> + ArgStringList CmdArgs; >> + >> + if (!D.SysRoot.empty()) >> + CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot)); >> + >> + std::string Linker = getToolChain().GetProgramPath(getShortName()); >> + >> + bool WantCRTs = >> + !Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles); >> + >> + if (WantCRTs) { >> + >> CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt0.o"))); >> + >> CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtbegin.o"))); >> + } >> + >> + Args.AddAllArgs(CmdArgs, options::OPT_L); >> + ToolChain.AddFilePathLibArgs(Args, CmdArgs); >> + Args.AddAllArgs(CmdArgs, >> + {options::OPT_T_Group, options::OPT_e, options::OPT_s, >> + options::OPT_t, options::OPT_Z_Flag, options::OPT_r}); >> + >> + AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA); >> + >> + // TODO: add C++ includes and libs if compiling C++. >> + >> + if (!Args.hasArg(options::OPT_nostdlib) && >> + !Args.hasArg(options::OPT_nodefaultlibs)) { >> + if (ToolChain.ShouldLinkCXXStdlib(Args)) >> + ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs); >> + CmdArgs.push_back("--start-group"); >> + CmdArgs.push_back("-lc"); >> + CmdArgs.push_back("-lgloss"); >> + CmdArgs.push_back("--end-group"); >> + CmdArgs.push_back("-lgcc"); >> + } >> + >> + if (WantCRTs) >> + >> CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtend.o"))); >> + >> + CmdArgs.push_back("-o"); >> + CmdArgs.push_back(Output.getFilename()); >> + C.addCommand(llvm::make_unique<Command>(JA, *this, >> Args.MakeArgString(Linker), >> + CmdArgs, Inputs)); >> +} >> +// RISCV tools end. >> >> Added: cfe/trunk/lib/Driver/ToolChains/RISCV.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/RISCV.h?rev=338385&view=auto >> >> ============================================================================== >> --- cfe/trunk/lib/Driver/ToolChains/RISCV.h (added) >> +++ cfe/trunk/lib/Driver/ToolChains/RISCV.h Tue Jul 31 07:21:46 2018 >> @@ -0,0 +1,57 @@ >> +//===--- RISCV.h - RISCV ToolChain Implementations --------------*- C++ >> -*-===// >> +// >> +// The LLVM Compiler Infrastructure >> +// >> +// This file is distributed under the University of Illinois Open Source >> +// License. See LICENSE.TXT for details. >> +// >> >> +//===----------------------------------------------------------------------===// >> + >> +#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_RISCV_H >> +#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_RISCV_H >> + >> +#include "Gnu.h" >> +#include "clang/Driver/ToolChain.h" >> + >> +namespace clang { >> +namespace driver { >> +namespace toolchains { >> + >> +class LLVM_LIBRARY_VISIBILITY RISCVToolChain : public Generic_ELF { >> +public: >> + RISCVToolChain(const Driver &D, const llvm::Triple &Triple, >> + const llvm::opt::ArgList &Args); >> + >> + bool IsIntegratedAssemblerDefault() const override { return true; } >> + void >> + AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, >> + llvm::opt::ArgStringList &CC1Args) const >> override; >> + void >> + addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, >> + llvm::opt::ArgStringList &CC1Args) const >> override; >> + >> +protected: >> + Tool *buildLinker() const override; >> +}; >> + >> +} // end namespace toolchains >> + >> +namespace tools { >> +namespace RISCV { >> +class LLVM_LIBRARY_VISIBILITY Linker : public GnuTool { >> +public: >> + Linker(const ToolChain &TC) : GnuTool("RISCV::Linker", "ld", TC) {} >> + bool hasIntegratedCPP() const override { return false; } >> + bool isLinkJob() const override { return true; } >> + void ConstructJob(Compilation &C, const JobAction &JA, >> + const InputInfo &Output, const InputInfoList &Inputs, >> + const llvm::opt::ArgList &TCArgs, >> + const char *LinkingOutput) const override; >> +}; >> +} // end namespace RISCV >> +} // end namespace tools >> + >> +} // end namespace driver >> +} // end namespace clang >> + >> +#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_RISCV_H >> >> Added: >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/bin/riscv32-unknown-elf-ld >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/bin/riscv32-unknown-elf-ld?rev=338385&view=auto >> >> ============================================================================== >> --- >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/bin/riscv32-unknown-elf-ld >> (added) >> +++ >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/bin/riscv32-unknown-elf-ld >> Tue Jul 31 07:21:46 2018 >> @@ -0,0 +1 @@ >> +#!/bin/true >> >> Propchange: >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/bin/riscv32-unknown-elf-ld >> >> ------------------------------------------------------------------------------ >> svn:executable = * >> >> Added: >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtbegin.o >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtbegin.o?rev=338385&view=auto >> >> ============================================================================== >> (empty) >> >> Added: >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtend.o >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtend.o?rev=338385&view=auto >> >> ============================================================================== >> (empty) >> >> Added: >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/riscv32-unknown-elf/include/c++/8.0.1/.keep >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/riscv32-unknown-elf/include/c%2B%2B/8.0.1/.keep?rev=338385&view=auto >> >> ============================================================================== >> (empty) >> >> Added: >> cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib/crt0.o >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib/crt0.o?rev=338385&view=auto >> >> ============================================================================== >> (empty) >> >> Modified: cfe/trunk/test/Driver/riscv32-toolchain.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/riscv32-toolchain.c?rev=338385&r1=338384&r2=338385&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/Driver/riscv32-toolchain.c (original) >> +++ cfe/trunk/test/Driver/riscv32-toolchain.c Tue Jul 31 07:21:46 2018 >> @@ -3,6 +3,36 @@ >> // RUN: %clang %s -### -no-canonical-prefixes -target riscv32 2>&1 | >> FileCheck -check-prefix=CC1 %s >> // CC1: clang{{.*}} "-cc1" "-triple" "riscv32" >> >> +// RUN: %clang %s -### -no-canonical-prefixes \ >> +// RUN: -target riscv32-unknown-elf \ >> +// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree \ >> +// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf >> 2>&1 \ >> +// RUN: | FileCheck -check-prefix=C-RV32-BAREMETAL-ILP32 %s >> + >> +// C-RV32-BAREMETAL-ILP32: >> "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../bin{{/|\\\\}}riscv32-unknown-elf-ld" >> +// C-RV32-BAREMETAL-ILP32: >> "--sysroot={{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf" >> +// C-RV32-BAREMETAL-ILP32: >> "{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib{{/|\\\\}}crt0.o" >> +// C-RV32-BAREMETAL-ILP32: >> "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtbegin.o" >> +// C-RV32-BAREMETAL-ILP32: >> "-L{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib" >> +// C-RV32-BAREMETAL-ILP32: >> "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1" >> +// C-RV32-BAREMETAL-ILP32: "--start-group" "-lc" "-lgloss" "--end-group" >> "-lgcc" >> +// C-RV32-BAREMETAL-ILP32: >> "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtend.o" >> + >> +// RUN: %clangxx %s -### -no-canonical-prefixes \ >> +// RUN: -target riscv32-unknown-elf \ >> +// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree \ >> +// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf >> 2>&1 \ >> +// RUN: | FileCheck -check-prefix=CXX-RV32-BAREMETAL-ILP32 %s >> + >> +// CXX-RV32-BAREMETAL-ILP32: "-internal-isystem" >> "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../riscv32-unknown-elf/include/c++{{/|\\\\}}8.0.1" >> +// CXX-RV32-BAREMETAL-ILP32: >> "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../bin{{/|\\\\}}riscv32-unknown-elf-ld" >> +// CXX-RV32-BAREMETAL-ILP32: >> "--sysroot={{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf" >> +// CXX-RV32-BAREMETAL-ILP32: >> "{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib{{/|\\\\}}crt0.o" >> +// CXX-RV32-BAREMETAL-ILP32: >> "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtbegin.o" >> +// CXX-RV32-BAREMETAL-ILP32: >> "-L{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib" >> +// CXX-RV32-BAREMETAL-ILP32: >> "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1" >> +// CXX-RV32-BAREMETAL-ILP32: "-lstdc++" "--start-group" "-lc" "-lgloss" >> "--end-group" "-lgcc" >> +// CXX-RV32-BAREMETAL-ILP32: >> "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtend.o" >> >> // RUN: %clang %s -### -no-canonical-prefixes -fuse-ld=ld \ >> // RUN: -target riscv32-linux-unknown-elf \ >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits