diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2021-02-16 20:13:02 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2021-02-16 20:13:02 +0000 |
commit | b60736ec1405bb0a8dd40989f67ef4c93da068ab (patch) | |
tree | 5c43fbb7c9fc45f0f87e0e6795a86267dbd12f9d /clang/lib/Driver/ToolChains/PS4CPU.cpp | |
parent | cfca06d7963fa0909f90483b42a6d7d194d01e08 (diff) | |
download | src-b60736ec1405bb0a8dd40989f67ef4c93da068ab.tar.gz src-b60736ec1405bb0a8dd40989f67ef4c93da068ab.zip |
Diffstat (limited to 'clang/lib/Driver/ToolChains/PS4CPU.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChains/PS4CPU.cpp | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/clang/lib/Driver/ToolChains/PS4CPU.cpp b/clang/lib/Driver/ToolChains/PS4CPU.cpp index 6dc81899cbaa..383b0c50d410 100644 --- a/clang/lib/Driver/ToolChains/PS4CPU.cpp +++ b/clang/lib/Driver/ToolChains/PS4CPU.cpp @@ -66,8 +66,9 @@ void tools::PS4cpu::Assemble::ConstructJob(Compilation &C, const JobAction &JA, const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("orbis-as")); - C.addCommand(std::make_unique<Command>( - JA, *this, ResponseFileSupport::AtFileUTF8(), Exec, CmdArgs, Inputs)); + C.addCommand(std::make_unique<Command>(JA, *this, + ResponseFileSupport::AtFileUTF8(), + Exec, CmdArgs, Inputs, Output)); } static void AddPS4SanitizerArgs(const ToolChain &TC, ArgStringList &CmdArgs) { @@ -152,8 +153,9 @@ void tools::PS4cpu::Link::ConstructJob(Compilation &C, const JobAction &JA, const char *Exec = Args.MakeArgString(ToolChain.GetProgramPath("orbis-ld")); - C.addCommand(std::make_unique<Command>( - JA, *this, ResponseFileSupport::AtFileUTF8(), Exec, CmdArgs, Inputs)); + C.addCommand(std::make_unique<Command>(JA, *this, + ResponseFileSupport::AtFileUTF8(), + Exec, CmdArgs, Inputs, Output)); } toolchains::PS4CPU::PS4CPU(const Driver &D, const llvm::Triple &Triple, @@ -237,9 +239,8 @@ SanitizerMask toolchains::PS4CPU::getSupportedSanitizers() const { } void toolchains::PS4CPU::addClangTargetOptions( - const ArgList &DriverArgs, - ArgStringList &CC1Args, - Action::OffloadKind DeviceOffloadingKind) const { + const ArgList &DriverArgs, ArgStringList &CC1Args, + Action::OffloadKind DeviceOffloadingKind) const { // PS4 does not use init arrays. if (DriverArgs.hasArg(options::OPT_fuse_init_array)) { Arg *A = DriverArgs.getLastArg(options::OPT_fuse_init_array); @@ -248,4 +249,36 @@ void toolchains::PS4CPU::addClangTargetOptions( } CC1Args.push_back("-fno-use-init-array"); + + const Arg *A = + DriverArgs.getLastArg(options::OPT_fvisibility_from_dllstorageclass, + options::OPT_fno_visibility_from_dllstorageclass); + if (!A || + A->getOption().matches(options::OPT_fvisibility_from_dllstorageclass)) { + CC1Args.push_back("-fvisibility-from-dllstorageclass"); + + if (DriverArgs.hasArg(options::OPT_fvisibility_dllexport_EQ)) + DriverArgs.AddLastArg(CC1Args, options::OPT_fvisibility_dllexport_EQ); + else + CC1Args.push_back("-fvisibility-dllexport=protected"); + + if (DriverArgs.hasArg(options::OPT_fvisibility_nodllstorageclass_EQ)) + DriverArgs.AddLastArg(CC1Args, + options::OPT_fvisibility_nodllstorageclass_EQ); + else + CC1Args.push_back("-fvisibility-nodllstorageclass=hidden"); + + if (DriverArgs.hasArg(options::OPT_fvisibility_externs_dllimport_EQ)) + DriverArgs.AddLastArg(CC1Args, + options::OPT_fvisibility_externs_dllimport_EQ); + else + CC1Args.push_back("-fvisibility-externs-dllimport=default"); + + if (DriverArgs.hasArg( + options::OPT_fvisibility_externs_nodllstorageclass_EQ)) + DriverArgs.AddLastArg( + CC1Args, options::OPT_fvisibility_externs_nodllstorageclass_EQ); + else + CC1Args.push_back("-fvisibility-externs-nodllstorageclass=default"); + } } |