[PATCH] D92012: [clangd][query-driver] Extract target
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 25 05:06:50 PST 2020
kadircet added inline comments.
================
Comment at: clang-tools-extra/clangd/QueryDriverDatabase.cpp:67
+
+bool isValidTarget(llvm::StringRef Triple) {
+ std::shared_ptr<TargetOptions> TargetOpts(new TargetOptions);
----------------
i think you can just do `TargetRegistry::lookupTarget`
================
Comment at: clang-tools-extra/clangd/QueryDriverDatabase.cpp:230
+ Driver, llvm::join(Info->SystemIncludes, ", "));
+ if (!Info->Target.empty())
+ log("Target extractor: successfully executed {0}, got target: "
----------------
nit: I would fold these two into a single log statement.
================
Comment at: clang-tools-extra/clangd/QueryDriverDatabase.cpp:337
- std::vector<std::string> SystemIncludes =
+ llvm::Optional<DriverInfo> Info =
QueriedDrivers.get(/*Key=*/(Driver + ":" + Lang).str(), [&] {
----------------
nit:
```
if(auto Info = ...)
setTarget(addSystemIncludes(...), ...);
return std::move(Cmd);
```
================
Comment at: clang-tools-extra/clangd/QueryDriverDatabase.cpp:212
+ if (!Target.empty()) {
+ Cmd.CommandLine.push_back("-target");
+ Cmd.CommandLine.push_back(Target);
----------------
ArcsinX wrote:
> ArcsinX wrote:
> > kadircet wrote:
> > > sammccall wrote:
> > > > `clang -target foo test.cc` seems to be a hard error in the driver if the target is unknown.
> > > > (vs likely *some* functionality if we just didn't set the driver)
> > > >
> > > > so this could regress some scenarios. Can we mitigate that?
> > > > (It's possible that we're running the driver in a mode where we proceed anyway, but I can't remember :-()
> > > what if target already exists in `Cmd`?
> > >
> > > also it would be nice to use `--target=X` format to be consistent with target inference from invocation name as in https://github.com/llvm/llvm-project/blob/master/clang/lib/Tooling/Tooling.cpp#L278.
> > I failed to find options to process in case of invalid target, so added target validation.
> We could specify several --target options, the last one will be used. But I am not sure should we override existing or not.
> We could specify several --target options, the last one will be used. But I am not sure should we override existing or not.
Having multiple targets sounds confusing. I would prefer keeping a target specifically mentioned by the user but it is also possible for the target to be inferred by clang (and that might be wrong). This is similar to our stand against predefined macros though, i think we should fix clang's inference logic if it has any false positives. So i am slightly leaning towards not overriding the target if it exists.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92012/new/
https://reviews.llvm.org/D92012
More information about the cfe-commits
mailing list