sunfish marked an inline comment as done.
sunfish added inline comments.
================
Comment at: clang/lib/Driver/ToolChains/WebAssembly.cpp:96
+ if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
+ if (const char *WasmOptPath = getenv("WASM_OPT")) {
+ StringRef OOpt = "s";
----------------
dschuff wrote:
> sunfish wrote:
> > dschuff wrote:
> > > sunfish wrote:
> > > > dschuff wrote:
> > > > > sunfish wrote:
> > > > > > dschuff wrote:
> > > > > > > What would you think about adding a way to pass arguments through
> > > > > > > to wasm-opt on the command line, like we have for the linker,
> > > > > > > assembler, etc? Something like `-Wo,-O2` (or `-Ww` or whatever;
> > > > > > > analogous to `-Wl` and `-Wa`). That seems nicer than an env var,
> > > > > > > although it doesn't solve the problem of controlling whether to
> > > > > > > run the optimizer in the first place.
> > > > > > My guess here is that we don't need clang to have an option for
> > > > > > passing additional flags -- if people want to do extra special
> > > > > > things with wasm-opt on clang's output they can just run wasm-opt
> > > > > > directly themselves. Does that sound reasonable?
> > > > > Maybe. But I still don't like the use of an env var for this kind of
> > > > > behavior-effecting (i.e. non-debugging) use case. It's hard enough
> > > > > to get reproducible and hermetic build behavior as it is, I
> > > > > definitely wouldn't want to worry about the environment affecting the
> > > > > output in addition to all the random flags, included files, etc.
> > > > If we did -Wo,-O2 or so, we'd still need to be able to find the
> > > > wasm-opt program to be able to run it. We could just search for it in
> > > > PATH, but that's also a little dicey from a hermetic build perspective.
> > > >
> > > > I borrowed "WASM_OPT" from
> > > > [cargo-wasi](https://github.com/bytecodealliance/cargo-wasi). I'm also
> > > > not a fan of environment variables in general, but this way does have
> > > > the advantage that people can set it once, and not have to modify their
> > > > Makefiles to add new flags. Users can think of it as just being part of
> > > > -O2 and friends.
> > > >
> > > What's the usual way to locate things like external assemblers?
> > > Presumably we could use the same mechanism for wasm-opt?
> > It checks the COMPILER_PATH environment variable and -B command-line flags,
> > which I'm not sure we should use here, but it looks like it does fall back
> > to checking PATH at the end.
> >
> > So, what would you think of just checking PATH for wasm-opt?
> I suspect we'll end up with -B flags if/when people start building
> interesting or nontrivial toolchains with clang (or we try to make emscripten
> more standardish), but I'm fine with leaving that out for now. Checking PATH
> for wasm-opt seems fine to me to locate the binary. Did you have that in mind
> as also the way to determine whether or not to run wasm-opt (i.e. run if it's
> there, don't if it's not)? That seems slightly error-prone in the sense that
> there would be a silent behavior change if something went wrong (e.g.
> wasm-opt goes missing) but in a world where most clang users are using
> wasm-opt then using wasm-opt by default seems reasonable; so that seems fine
> as a way to start out.
>
> I do think we will eventually want some way to modify the behavior of
> wasm-opt though. For that matter wasm-opt might at some point become able to
> optimize object files (allowing faster links at the cost of less
> LTO-optimized binaries; we'd run a reduced set of passes post-link or none at
> all). In that case there'd also have to be further changes if we want builtin
> support for that.
Yes, we'd just run wasm-opt if it's in the PATH. See the now updated patch. And
yeah, this means if your wasm-opt disappears, you silently won't get as much
optimization, which is a little unfortunate, but it is the most convenient for
the common use case.
And yeah, we can always add more options in the future :-).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70500/new/
https://reviews.llvm.org/D70500
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits