Re: Using inline variables (C++17) in Gecko
The code coverage build is using GCC 6, if you do a try build don't forget to include that too (you'll need to pass the "--full" argument if you are using mach try fuzzy). The last time I tried, switching to GCC 7 caused a lot of timeouts (https://bugzilla.mozilla.org/show_bug.cgi?id=1410217#c5), but I didn't investigate more. - Marco. Il 20/03/19 10:57, Mike Hommey ha scritto: > Sorry for the late answer. Thanks for prodding me on irc. > > On Sat, Feb 23, 2019 at 06:36:39PM -0800, Emilio Cobos Álvarez wrote: >> Hey, >> >> I have a use-case for inline variables, and it's not 100% clear to me >> how up-to-date is [1], so asking this mailing-list directly. >> >> Looks like they're supported from clang 3.9 [2] and gcc 7 [3]. >> >> We're requiring clang 4.0+ to build already, and IIUC we don't build >> with MSVC anymore. But looks like we still support gcc 6 (which I guess >> means I can't use them right now). >> >> Is that right? If so, how far are we from requiring gcc 7 to build? > According to [1], the only main distro that would have a hard time > _building_ Firefox with such a requirement and that is not EOL is Debian > 9. > > Now, two things that do not appear yet on that table, because I haven't > added them, is rustc and nasm. > > As only the ESR version really has any sort of impact on Debian stable, > and the next ESR is, afaik, going to be 68, the requirements for rustc > and nasm for that version are going to be, respectively, (probably) 1.33 > and 2.13. Neither of those is available in Debian 9, so Debian will have > to backport those anyways. In the process of backporting rustc, they'll > have to backport a recent llvm too (probably 7, maybe 8), which will > mechanically bring a newer version of clang. So, with my Debian hat on, > even if a backport of a more recent version of GCC is not made for ESR68 > (there's precedent on using a "gcc-mozilla" package to build Firefox, so > that's also a possibility), there's going to be a recent enough version > of clang to build Firefox (and even then, Debian 9 has clang-4 too). > > So... with both my Debian and Mozilla hats on, I think we can reasonably > bump the requirement to GCC 7. > > However, there have been hurdles in the past with GCC 7 on Mozilla CI, > but IIRC that was related to trying to _ship_ those builds. We still do > have builds using GCC for various reasons, but we don't ship them, so > that should be fine. We _do_ have jobs that use a GCC plugin that may > not be ready to be updated to GCC 7, though. > > So, I'd say, change all occurrences of linux64-gcc-6 with linux64-gcc-7 > under taskcluster/ci, change the minimum GCC version supported in > build/moz.configure/toolchain.configure, and do a try build including > all the build types you changed the toolchain dependencies of, and see > how it goes. And file bugs if things don't go well :). > > Cheers, > > Mike > > 1. > https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Linux_compatibility_matrix > ___ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform
Re: Using inline variables (C++17) in Gecko
Sorry for the late answer. Thanks for prodding me on irc. On Sat, Feb 23, 2019 at 06:36:39PM -0800, Emilio Cobos Álvarez wrote: > Hey, > > I have a use-case for inline variables, and it's not 100% clear to me > how up-to-date is [1], so asking this mailing-list directly. > > Looks like they're supported from clang 3.9 [2] and gcc 7 [3]. > > We're requiring clang 4.0+ to build already, and IIUC we don't build > with MSVC anymore. But looks like we still support gcc 6 (which I guess > means I can't use them right now). > > Is that right? If so, how far are we from requiring gcc 7 to build? According to [1], the only main distro that would have a hard time _building_ Firefox with such a requirement and that is not EOL is Debian 9. Now, two things that do not appear yet on that table, because I haven't added them, is rustc and nasm. As only the ESR version really has any sort of impact on Debian stable, and the next ESR is, afaik, going to be 68, the requirements for rustc and nasm for that version are going to be, respectively, (probably) 1.33 and 2.13. Neither of those is available in Debian 9, so Debian will have to backport those anyways. In the process of backporting rustc, they'll have to backport a recent llvm too (probably 7, maybe 8), which will mechanically bring a newer version of clang. So, with my Debian hat on, even if a backport of a more recent version of GCC is not made for ESR68 (there's precedent on using a "gcc-mozilla" package to build Firefox, so that's also a possibility), there's going to be a recent enough version of clang to build Firefox (and even then, Debian 9 has clang-4 too). So... with both my Debian and Mozilla hats on, I think we can reasonably bump the requirement to GCC 7. However, there have been hurdles in the past with GCC 7 on Mozilla CI, but IIRC that was related to trying to _ship_ those builds. We still do have builds using GCC for various reasons, but we don't ship them, so that should be fine. We _do_ have jobs that use a GCC plugin that may not be ready to be updated to GCC 7, though. So, I'd say, change all occurrences of linux64-gcc-6 with linux64-gcc-7 under taskcluster/ci, change the minimum GCC version supported in build/moz.configure/toolchain.configure, and do a try build including all the build types you changed the toolchain dependencies of, and see how it goes. And file bugs if things don't go well :). Cheers, Mike 1. https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Linux_compatibility_matrix ___ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform
Using inline variables (C++17) in Gecko
Hey, I have a use-case for inline variables, and it's not 100% clear to me how up-to-date is [1], so asking this mailing-list directly. Looks like they're supported from clang 3.9 [2] and gcc 7 [3]. We're requiring clang 4.0+ to build already, and IIUC we don't build with MSVC anymore. But looks like we still support gcc 6 (which I guess means I can't use them right now). Is that right? If so, how far are we from requiring gcc 7 to build? In case you're curious, my use case is generating idiomatic bindings for Rust associated constants (and bitflags in particular)[4]. Ideally, you should be able to translate the following Rust code: struct Bitflags { bits: u8, } impl Bitflags { const FOO: Bitflags = Bitflags { bits: 0 }; } Into the following C++: struct Bitflags { uint8_t bits; constexpr static const Bitflags FOO = {0}; }; But that doesn't work, since the `Bitflags` type is not complete by the time you declare FOO. Inline variables allow to solve this without sacrificing performance or making code less idiomatic. -- Emilio [1]: https://developer.mozilla.org/en-US/docs/Mozilla/Using_CXX_in_Mozilla_code [2]: https://clang.llvm.org/cxx_status.html [3]: https://gcc.gnu.org/projects/cxx-status.html [4]: https://github.com/eqrion/cbindgen/pull/293 ___ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform