Kaydet (Commit) 0533b155 authored tarafından Peter Foley's avatar Peter Foley Kaydeden (comit) Stephan Bergmann

Wrappers for LTO

When building with GCC, the gcc-ar, gcc-ranlib, and gcc-nm wrappers
must be used for the linker to properly resolve symbols from static
libraries containing LTO objects.
Likewise, clang requires the llvm-ar, llvm-ranlib, and llvm-nm
wrappers.

Change-Id: I539017b6da7732f998a49820dc01d0e6b302952a
Reviewed-on: https://gerrit.libreoffice.org/21502Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarStephan Bergmann <sbergman@redhat.com>
üst 19167ea3
...@@ -5163,10 +5163,17 @@ if test "$_os" != "WINNT" -o "$WITH_MINGW" = "yes"; then ...@@ -5163,10 +5163,17 @@ if test "$_os" != "WINNT" -o "$WITH_MINGW" = "yes"; then
# /path/to/compiler/foo-gcc" you need to set the AR etc env vars # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
# explicitly. Or put /path/to/compiler in PATH yourself. # explicitly. Or put /path/to/compiler in PATH yourself.
AC_CHECK_TOOL(AR,ar) # Use wrappers for LTO
AC_CHECK_TOOL(NM,nm) if test "$ENABLE_LTO" == "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
AC_CHECK_TOOL(AR,gcc-ar)
AC_CHECK_TOOL(NM,gcc-nm)
AC_CHECK_TOOL(RANLIB,gcc-ranlib)
else
AC_CHECK_TOOL(AR,ar)
AC_CHECK_TOOL(NM,nm)
AC_CHECK_TOOL(RANLIB,ranlib)
fi
AC_CHECK_TOOL(OBJDUMP,objdump) AC_CHECK_TOOL(OBJDUMP,objdump)
AC_CHECK_TOOL(RANLIB,ranlib)
AC_CHECK_TOOL(READELF,readelf) AC_CHECK_TOOL(READELF,readelf)
AC_CHECK_TOOL(STRIP,strip) AC_CHECK_TOOL(STRIP,strip)
if test "$_os" = "WINNT"; then if test "$_os" = "WINNT"; then
......
...@@ -130,6 +130,7 @@ gb_CFLAGS_COMMON += -std=gnu89 ...@@ -130,6 +130,7 @@ gb_CFLAGS_COMMON += -std=gnu89
ifeq ($(ENABLE_LTO),TRUE) ifeq ($(ENABLE_LTO),TRUE)
ifeq ($(COM_IS_CLANG),TRUE) ifeq ($(COM_IS_CLANG),TRUE)
gb_LTOFLAGS := -flto gb_LTOFLAGS := -flto
gb_LTOPLUGINFLAGS := --plugin LLVMgold.so
else else
gb_LTOFLAGS := -flto=$(PARALLELISM) -fuse-linker-plugin -O2 gb_LTOFLAGS := -flto=$(PARALLELISM) -fuse-linker-plugin -O2
endif endif
......
...@@ -145,7 +145,7 @@ $(call gb_Helper_abbreviate_dirs,\ ...@@ -145,7 +145,7 @@ $(call gb_Helper_abbreviate_dirs,\
$(if $(SOVERSIONSCRIPT),&& ln -sf ../../program/$(notdir $(1)) $(ILIBTARGET))) $(if $(SOVERSIONSCRIPT),&& ln -sf ../../program/$(notdir $(1)) $(ILIBTARGET)))
$(if $(filter Library,$(TARGETTYPE)), $(call gb_Helper_abbreviate_dirs,\ $(if $(filter Library,$(TARGETTYPE)), $(call gb_Helper_abbreviate_dirs,\
$(READELF) -d $(1) | grep SONAME > $(WORKDIR)/LinkTarget/$(2).exports.tmp; \ $(READELF) -d $(1) | grep SONAME > $(WORKDIR)/LinkTarget/$(2).exports.tmp; \
$(NM) --dynamic --extern-only --defined-only --format=posix $(1) \ $(NM) $(gb_LTOPLUGINFLAGS) --dynamic --extern-only --defined-only --format=posix $(1) \
| cut -d' ' -f1-2 \ | cut -d' ' -f1-2 \
>> $(WORKDIR)/LinkTarget/$(2).exports.tmp && \ >> $(WORKDIR)/LinkTarget/$(2).exports.tmp && \
$(call gb_Helper_replace_if_different_and_touch,$(WORKDIR)/LinkTarget/$(2).exports.tmp, \ $(call gb_Helper_replace_if_different_and_touch,$(WORKDIR)/LinkTarget/$(2).exports.tmp, \
...@@ -155,7 +155,7 @@ endef ...@@ -155,7 +155,7 @@ endef
define gb_LinkTarget__command_staticlink define gb_LinkTarget__command_staticlink
$(call gb_Helper_abbreviate_dirs,\ $(call gb_Helper_abbreviate_dirs,\
rm -f $(1) && \ rm -f $(1) && \
$(gb_AR) -rsu $(1) \ $(gb_AR) $(gb_LTOPLUGINFLAGS) -rsu $(1) \
$(if $(LD_PLUGIN),--plugin $(LD_PLUGIN)) \ $(if $(LD_PLUGIN),--plugin $(LD_PLUGIN)) \
$(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment