kisslinux / repo

KISS Linux - Official Repositories
https://kisslinux.github.io
MIT License
403 stars 102 forks source link

Building firefox fails after upgrading to rust 1.45 #207

Closed rachelambda closed 4 years ago

rachelambda commented 4 years ago

When building firefox under rust 1.45 I encounter the error

error: options `-C embed-bitcode=no` and `-C lto` are incompatible

A quick duckduckgo comes up with this reddit thread

If the reddit comment is indeed correct this could be fixed by adding

export CARGO_PROFILE_RELEASE_LTO=true

to the top of the build.

rachelambda commented 4 years ago

I'm attempting to build with the environment variable set at the moment, however getting to the point that fails takes quite a while on my computer. I'll come back and report my results once I'm done.

dylanaraps commented 4 years ago

This is precisely why Rust 1.45.0 is in the testing repository. I'll also do a test build with this environment variable. We will be seeing a new Firefox release over the next few days so this may be fixed upstream regardless. https://bugzilla.mozilla.org/show_bug.cgi?id=1644624#c1

dylanaraps commented 4 years ago

Also: https://bugzilla.mozilla.org/show_bug.cgi?id=1640982

rachelambda commented 4 years ago

Makes sense. My bad. Feel free to close the issue if you think testing issues aren't relevant

dylanaraps commented 4 years ago

This is the fix: https://hg.mozilla.org/mozilla-central/rev/bb79da633a2e (you were right)

I'll do some testing.

dylanaraps commented 4 years ago

Turns out Firefox 79.0 is out today anyway. https://ftp.mozilla.org/pub/firefox/releases/79.0/source/firefox-79.0.source.tar.xz

dylanaraps commented 4 years ago

The fix didn't make it into 79.0...

rachelambda commented 4 years ago

The fix didn't make it into 79.0...

was just about to say this :/

rachelambda commented 4 years ago

the no dbus patch needs to be updated for 79.0 as well

dylanaraps commented 4 years ago

On it.

dylanaraps commented 4 years ago

Here's Firefox 79.0. Not sure if it builds yet. https://github.com/kisslinux/repo/commit/b928599b45a9633e8d87c6e29680316e0ba0d9a4

dylanaraps commented 4 years ago

Build fails for me here:

In file included from /root/.cache/kiss/build-1200/firefox/build/dist/system_wrappers/net/if.h:3,
                 from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/addrs-netlink.c:49,
                 from Unified_c_third_party_nICEr1.c:20:
/usr/include/net/if.h:64:8: error: redefinition of 'struct ifmap'
   64 | struct ifmap {
      |        ^~~~~
In file included from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/stun.h:50,
                 from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/stun_util.h:38,
                 from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/addrs-netlink.c:39,
                 from Unified_c_third_party_nICEr1.c:20:
/usr/include/linux/if.h:192:8: note: originally defined here
  192 | struct ifmap {
      |        ^~~~~
In file included from /root/.cache/kiss/build-1200/firefox/build/dist/system_wrappers/net/if.h:3,
                 from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/addrs-netlink.c:49,
                 from Unified_c_third_party_nICEr1.c:20:
/usr/include/net/if.h:76:8: error: redefinition of 'struct ifreq'
   76 | struct ifreq {
      |        ^~~~~
In file included from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/stun.h:50,
                 from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/stun_util.h:38,
                 from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/addrs-netlink.c:39,
                 from Unified_c_third_party_nICEr1.c:20:
/usr/include/linux/if.h:229:8: note: originally defined here
  229 | struct ifreq {
      |        ^~~~~
In file included from /root/.cache/kiss/build-1200/firefox/build/dist/system_wrappers/net/if.h:3,
                 from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/addrs-netlink.c:49,
                 from Unified_c_third_party_nICEr1.c:20:
/usr/include/net/if.h:116:8: error: redefinition of 'struct ifconf'
  116 | struct ifconf {
      |        ^~~~~~
In file included from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/stun.h:50,
                 from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/stun_util.h:38,
                 from /root/.cache/kiss/build-1200/firefox/media/mtransport/third_party/nICEr/src/stun/addrs-netlink.c:39,
                 from Unified_c_third_party_nICEr1.c:20:
/usr/include/linux/if.h:281:8: note: originally defined here
  281 | struct ifconf  {

It no longer fails due to rust though!

rachelambda commented 4 years ago

My build is still ongoing, guess we'll see if I have the same error. The new error does seem a lot more annoying than a simple rust flag though...

rachelambda commented 4 years ago

Mine fails differently

In file included from /usr/include/asm/div64.h:75,
                 from /usr/include/linux/math64.h:7,
                 from /usr/include/linux/time64.h:5,
                 from /usr/include/linux/restart_block.h:10,
                 from /usr/include/linux/thread_info.h:13,
                 from /usr/include/asm/preempt.h:7,
                 from /usr/include/linux/preempt.h:78,
                 from /usr/include/linux/spinlock.h:51,
                 from /usr/include/linux/percpu_counter.h:10,
                 from /usr/include/net/dst_ops.h:5,
                 from /usr/include/net/dst.h:12,
                 from /usr/include/net/route.h:23,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/third_party/nICEr/src/stun/stun.h:53,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.h:41,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/nricectx.cpp:81:
/usr/include/asm-generic/div64.h:249:3: error: #error do_div() does not yet support the C64
  249 | # error do_div() does not yet support the C64
      |   ^~~~~
In file included from /usr/include/linux/bitops.h:29,
                 from /usr/include/linux/thread_info.h:25,
                 from /usr/include/asm/preempt.h:7,
                 from /usr/include/linux/preempt.h:78,
                 from /usr/include/linux/spinlock.h:51,
                 from /usr/include/linux/percpu_counter.h:10,
                 from /usr/include/net/dst_ops.h:5,
                 from /usr/include/net/dst.h:12,
                 from /usr/include/net/route.h:23,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/third_party/nICEr/src/stun/stun.h:53,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.h:41,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/nricectx.cpp:81:
/usr/include/asm/bitops.h:26:3: error: #error "Unexpected BITS_PER_LONG"
   26 | # error "Unexpected BITS_PER_LONG"
      |   ^~~~~
In file included from /usr/include/linux/thread_info.h:25,
                 from /usr/include/asm/preempt.h:7,
                 from /usr/include/linux/preempt.h:78,
                 from /usr/include/linux/spinlock.h:51,
                 from /usr/include/linux/percpu_counter.h:10,
                 from /usr/include/net/dst_ops.h:5,
                 from /usr/include/net/dst.h:12,
                 from /usr/include/net/route.h:23,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/third_party/nICEr/src/stun/stun.h:53,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.h:41,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/nricectx.cpp:81:
/usr/include/linux/bitops.h:229:2: error: #error BITS_PER_LONG not 32 or 64
  229 | #error BITS_PER_LONG not 32 or 64
      |  ^~~~~
In file included from /usr/include/linux/percpu_counter.h:10,
                 from /usr/include/net/dst_ops.h:5,
                 from /usr/include/net/dst.h:12,
                 from /usr/include/net/route.h:23,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/third_party/nICEr/src/stun/stun.h:53,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.h:41,
                 from /root/.cache/kiss/build-1168/firefox/media/mtransport/nricectx.cpp:81:
/usr/include/linux/spinlock.h:60:10: fatal error: asm/mmiowb.h: No such file or directory
   60 | #include <asm/mmiowb.h>
      |          ^~~~~~~~~~~~~~

Though, I'm on glibc, which might change just about anything/everything

dylanaraps commented 4 years ago

Pushed the latest ESR as well as it too needs testing. I've tracked down the cause of my error and will be adding a patch to fix it shortly.

dylanaraps commented 4 years ago

OK. The ESR works with the latest rust.

dylanaraps commented 4 years ago

This should be all fixed now. Can build both new Firefox releases with the latest rust.

rachelambda commented 4 years ago

I recently tried to build the latest version, however I'm getting a very confusing error

  56946 et.h:175:3: note: in expansion of macro 'NS_INLINE_DECL_THREADSAFE_REFCOU
  56946 NTING'
  56947   175 |   NS_INLINE_DECL_THREADSAFE_REFCOUNTING(TestNat);
  56948       |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  56949 /home/deppy/.cache/kiss/build-19811/firefox/media/mtransport/test_nr_sock
  56949 et.h: In member function 'virtual MozExternalRefCountType mozilla::TestNr
  56949 Socket::AddRef()':
  56950 /home/deppy/.cache/kiss/build-19811/firefox/build/dist/include/nsISupport
  56950 sImpl.h:33:3: error: '_Static_assert' was not declared in this scope; did
  56950  you mean 'static_assert'?
  56951    33 |   static_assert(!mozilla::IsDestructible<X>::value,      \
  56952       |   ^~~~~~~~~~~~~

It complains about _Static_assert not being defined, however static_assert is used. The header that defines static_assert is also included in the file where the macro is defined. Am I missing something here?

Going to try recompiling with

export CFLAGS="$CFLAGS -D_Static_assert=static_assert"
export CXXFLAGS="$CXXFLAGS -D_Static_assert=static_assert"
dylanaraps commented 4 years ago

Do you mean with glibc?

rachelambda commented 4 years ago

Yes, however these assertions should be done by the compiler, no? I didn't think about it being a libc issue. If that's the case then I'll figure it out on my own.