[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Building Emacs on MacOS with clang+LTO fails
From: |
Paul Eggert |
Subject: |
Re: Building Emacs on MacOS with clang+LTO fails |
Date: |
Sat, 4 May 2019 13:21:09 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 |
dhruva wrote:
I am trying to build emacs using clang 8 (from home-brew) with link time
optimization enabled.
As INSTALL says, link time optimization seems to make Emacs slower and/or
crashier even when Emacs builds. Plus as you've discovered, Emacs tends not to
build. So I don't recommend LTO unless your job is to fix LTO bugs.
Emacs configured as:
LD=lld CC=clang CFLAGS="-flto" ../../git/emacs/configure --with-mailutils
--with-ns
I don't think LD matters.
I suggest using the --enable-link-time-optimization flag of 'configure' instead.
For what it's worth, I just now tried building Emacs master on Fedora 30 as
follows:
./configure --enable-link-time-optimization CC=clang
and found a recently-introduced bug with fingerprinting that is a different bug
from your problem. I installed the attached patch to work around it. As this
patch suggests, LTO is not often tested with Emacs.
CCLD make-fingerprint
ld: reference to bitcode symbol '_rpl_getopt' which LTO has not compiled in
'_main' from /var/folders/5c/5w9bqxts6gl2pgfgdpzq94n0nhqj5f/T/cc-ebc71c.o
for architecture x86_64
clang-8: error: linker command failed with exit code 1 (use -v to see
invocation)
If make-fingerprint links without LTO and fails to link with LTO, it's most
likely a bug in the way Emacs is using the linker (or a bug in the compiler or
linker), which surely would need to be investigated further on your platform.
- while (0 <= (c = getopt (argc, argv, "rh")))
+ while (0 <= (c = getopt_long (argc, argv, "rh", NULL, NULL)))
This doesn't look right, for a couple of reasons. First, getopt_long doesn't
document what it does wit a null 4th arg. More importantly, why is this change
needed, and not similar changes in other getopt calls? It'd be better to debug
the actual linking problem than to try to paper over it.
0001-Port-new-fingerprinting-scheme-to-clang-LTO.patch
Description: Text Data