diff options
author | Puyan Lotfi <puyan@puyan.org> | 2019-10-08 15:23:14 +0000 |
---|---|---|
committer | Puyan Lotfi <puyan@puyan.org> | 2019-10-08 15:23:14 +0000 |
commit | c382d03ca85d0c93b3e49949006e42314b9d4409 (patch) | |
tree | 066d3effc16bbf439fd1c5d14f2673320a85c474 /clang/lib/Driver/ToolChains/Clang.cpp | |
parent | 08daf8cf0a554990caa8a559053c12e41af52dd2 (diff) | |
download | bcm5719-llvm-c382d03ca85d0c93b3e49949006e42314b9d4409.tar.gz bcm5719-llvm-c382d03ca85d0c93b3e49949006e42314b9d4409.zip |
[clang][ifs] Clang Interface Stubs ToolChain plumbing.
Second Landing Attempt:
This patch enables end to end support for generating ELF interface stubs
directly from clang. Now the following:
clang -emit-interface-stubs -o libfoo.so a.cpp b.cpp c.cpp
will product an ELF binary with visible symbols populated. Visibility attributes
and -fvisibility can be used to control what gets populated.
* Adding ToolChain support for clang Driver IFS Merge Phase
* Implementing a default InterfaceStubs Merge clang Tool, used by ToolChain
* Adds support for the clang Driver to involve llvm-ifs on ifs files.
* Adds -emit-merged-ifs flag, to tell llvm-ifs to emit a merged ifs text file
instead of the final object format (normally ELF)
Differential Revision: https://reviews.llvm.org/D63978
llvm-svn: 374061
Diffstat (limited to 'clang/lib/Driver/ToolChains/Clang.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChains/Clang.cpp | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 8628741f7da..26e8bc60bfa 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -3683,32 +3683,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } else if (JA.getType() == types::TY_LLVM_BC || JA.getType() == types::TY_LTO_BC) { CmdArgs.push_back("-emit-llvm-bc"); - } else if (JA.getType() == types::TY_IFS) { + } else if (JA.getType() == types::TY_IFS || + JA.getType() == types::TY_IFS_CPP) { StringRef ArgStr = Args.hasArg(options::OPT_iterface_stub_version_EQ) ? Args.getLastArgValue(options::OPT_iterface_stub_version_EQ) - : ""; - StringRef StubFormat = - llvm::StringSwitch<StringRef>(ArgStr) - .Case("experimental-ifs-v1", "experimental-ifs-v1") - .Default(""); - - if (StubFormat.empty()) { - std::string ErrorMessage = - "Invalid interface stub format: " + ArgStr.str() + - ((ArgStr == "experimental-yaml-elf-v1" || - ArgStr == "experimental-tapi-elf-v1") - ? " is deprecated." - : "."); - D.Diag(diag::err_drv_invalid_value) - << "Must specify a valid interface stub format type, ie: " - "-interface-stub-version=experimental-ifs-v1" - << ErrorMessage; - } - + : "experimental-ifs-v1"; CmdArgs.push_back("-emit-interface-stubs"); CmdArgs.push_back( - Args.MakeArgString(Twine("-interface-stub-version=") + StubFormat)); + Args.MakeArgString(Twine("-interface-stub-version=") + ArgStr.str())); } else if (JA.getType() == types::TY_PP_Asm) { CmdArgs.push_back("-S"); } else if (JA.getType() == types::TY_AST) { |