Re: Using inline variables (C++17) in Gecko

2019-03-20 Thread Marco Castelluccio
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

2019-03-20 Thread Mike Hommey
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

2019-02-23 Thread Emilio Cobos Álvarez
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