diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2019-09-02 10:20:24 +0200 |
---|---|---|
committer | Michael Stahl <Michael.Stahl@cib.de> | 2019-09-03 10:41:20 +0200 |
commit | ebc7912377d048fa3c183661899f02664b641485 (patch) | |
tree | 881e81c1e0bc0ad52127f84c42d62bba29a41005 /solenv | |
parent | 68fee5424f9c149aaabc44952b9a699367a66adf (diff) |
Add -latomic to the end of Linux C++ linker command lines
b11763dbaa0c7f427ea47abe9b98995cb49a8595 "link with -latomic on mips(el),
armel, powerpc, m68k" had added -latomic to the linker command lines of just
some Linux platforms (which apparently happened to actually require it). But
there were three issues with that:
* The -latomic came too early on the command line, so that it wasn't used to
satisfy dependencies of .o files that came later. See the discussion at
<https://gerrit.libreoffice.org/#/c/78319/> "set -Wl,--no-as-needed for
-latomic".
* There is presumably no need to include -latomic on C linker command lines.
* <https://gcc.gnu.org/onlinedocs/gcc-7.3.0/libstdc++/manual/manual/using.html
#manual.intro.using.flags> (matching our Linux libstdc++ 7.3.0 baseline as
per README.md) states: "Linking to libatomic is required for some uses of
ISO C++11 <atomic>." So we should better include -latomic on every Linux C++
linker command line that uses libstdc++. (This patch assumes that we always
use libstdc++ on Linux.)
Ideally we could rely on -latomic always being available with our baseline
libstdc++ 7.3.0, but when using Red Hat Developer Toolset 7 that appears not to
be the case, as reported by a Jenkins build for an older version of this change
(see below), so use ATOMIC_LIB from the preceding commit
<https://gerrit.libreoffice.org/#/c/78336/> "add -latomic configure check...".
<https://ci.libreoffice.org/job/gerrit_linux_gcc_release/40298/console>:
> [build LNK] Executable/unoapploader
> /opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/ld: cannot find -latomic
> collect2: error: ld returned 1 exit status
> /home/tdf/lode/jenkins/workspace/lo_gerrit/Config/linux_gcc_release_64/solenv/gbuild/LinkTarget.mk:636: recipe for target '/home/tdf/lode/jenkins/workspace/lo_gerrit/Config/linux_gcc_release_64/workdir/LinkTarget/Executable/idxdict' failed
This patch adds -latomic only on Linux. Similar changes can be made for other
platforms if need be.
Change-Id: I75df5410677f4c31c796d7ba85532bcdb47eb111
Reviewed-on: https://gerrit.libreoffice.org/78380
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit 32a96e44b4c073c7c61c94a7f0fe6108dde663bc)
Reviewed-on: https://gerrit.libreoffice.org/78413
Tested-by: Rene Engelhard <rene@debian.org>
Reviewed-by: Michael Stahl <Michael.Stahl@cib.de>
Diffstat (limited to 'solenv')
-rw-r--r-- | solenv/gbuild/LinkTarget.mk | 2 | ||||
-rw-r--r-- | solenv/gbuild/platform/LINUX_ARM_GCC.mk | 2 | ||||
-rw-r--r-- | solenv/gbuild/platform/LINUX_GODSON_GCC.mk | 2 | ||||
-rw-r--r-- | solenv/gbuild/platform/LINUX_M68K_GCC.mk | 2 | ||||
-rw-r--r-- | solenv/gbuild/platform/LINUX_POWERPC_GCC.mk | 2 | ||||
-rw-r--r-- | solenv/gbuild/platform/linux.mk | 4 | ||||
-rw-r--r-- | solenv/gbuild/platform/unxgcc.mk | 2 |
7 files changed, 8 insertions, 8 deletions
diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk index e1c55969a257..476ee429da33 100644 --- a/solenv/gbuild/LinkTarget.mk +++ b/solenv/gbuild/LinkTarget.mk @@ -775,6 +775,7 @@ $(call gb_LinkTarget_get_target,$(1)) : T_LDFLAGS := $$(gb_LinkTarget_LDFLAGS) $ $(call gb_LinkTarget_get_target,$(1)) : LINKED_LIBS := $(call gb_LinkTarget_get_target,$(1)) : LINKED_STATIC_LIBS := $(call gb_LinkTarget_get_target,$(1)) : T_LIBS := +$(call gb_LinkTarget_get_target,$(1)) : T_STDLIBS_CXX := $(gb_STDLIBS_CXX) $(call gb_LinkTarget_get_target,$(1)) : TARGETTYPE := $(call gb_LinkTarget_get_target,$(1)) : LIBRARY_X64 := $(call gb_LinkTarget_get_target,$(1)) : PCH_NAME := @@ -911,6 +912,7 @@ endef # call gb_LinkTarget_disable_standard_system_libs,linktarget define gb_LinkTarget_disable_standard_system_libs $(call gb_LinkTarget_get_target,$(1)) : T_LIBS := $$(filter-out $$(gb_STDLIBS),$$(T_LIBS)) +$(call gb_LinkTarget_get_target,$(1)) : T_STDLIBS_CXX := endef diff --git a/solenv/gbuild/platform/LINUX_ARM_GCC.mk b/solenv/gbuild/platform/LINUX_ARM_GCC.mk index e52cf2bb8950..cccf5772b3b4 100644 --- a/solenv/gbuild/platform/LINUX_ARM_GCC.mk +++ b/solenv/gbuild/platform/LINUX_ARM_GCC.mk @@ -13,6 +13,4 @@ gb_COMPILEROPTFLAGS := -Os include $(GBUILDDIR)/platform/linux.mk -gb_LinkTarget_LDFLAGS += -latomic - # vim: set noet sw=4: diff --git a/solenv/gbuild/platform/LINUX_GODSON_GCC.mk b/solenv/gbuild/platform/LINUX_GODSON_GCC.mk index f16f98530e2b..976aaedf97fe 100644 --- a/solenv/gbuild/platform/LINUX_GODSON_GCC.mk +++ b/solenv/gbuild/platform/LINUX_GODSON_GCC.mk @@ -13,6 +13,4 @@ gb_COMPILEROPTFLAGS := -Os include $(GBUILDDIR)/platform/linux.mk -gb_LinkTarget_LDFLAGS += -latomic - # vim: set noet sw=4: diff --git a/solenv/gbuild/platform/LINUX_M68K_GCC.mk b/solenv/gbuild/platform/LINUX_M68K_GCC.mk index 942696f80231..9e007101d8ac 100644 --- a/solenv/gbuild/platform/LINUX_M68K_GCC.mk +++ b/solenv/gbuild/platform/LINUX_M68K_GCC.mk @@ -12,6 +12,4 @@ gb_COMPILEROPTFLAGS := -Os include $(GBUILDDIR)/platform/linux.mk -gb_LinkTarget_LDFLAGS += -latomic - # vim: set noet sw=4: diff --git a/solenv/gbuild/platform/LINUX_POWERPC_GCC.mk b/solenv/gbuild/platform/LINUX_POWERPC_GCC.mk index 48fa395cfada..1880b3bad1e4 100644 --- a/solenv/gbuild/platform/LINUX_POWERPC_GCC.mk +++ b/solenv/gbuild/platform/LINUX_POWERPC_GCC.mk @@ -12,6 +12,4 @@ gb_CPUDEFS += -DPPC include $(GBUILDDIR)/platform/linux.mk -gb_LinkTarget_LDFLAGS += -latomic - # vim: set noet sw=4: diff --git a/solenv/gbuild/platform/linux.mk b/solenv/gbuild/platform/linux.mk index 77d4dbe679e8..ece7a88bd71f 100644 --- a/solenv/gbuild/platform/linux.mk +++ b/solenv/gbuild/platform/linux.mk @@ -21,4 +21,8 @@ ifeq ($(DISABLE_DYNLOADING),TRUE) gb_STDLIBS := -ldl endif +ifneq ($(ATOMIC_LIB),) +gb_STDLIBS_CXX := $(ATOMIC_LIB) +endif + # vim: set noet sw=4 ts=4: diff --git a/solenv/gbuild/platform/unxgcc.mk b/solenv/gbuild/platform/unxgcc.mk index 1d6b38cdf8ce..df5eb7ca94c6 100644 --- a/solenv/gbuild/platform/unxgcc.mk +++ b/solenv/gbuild/platform/unxgcc.mk @@ -136,11 +136,13 @@ $(call gb_Helper_abbreviate_dirs,\ $(patsubst lib%.a,-l%,$(patsubst lib%.so,-l%,$(patsubst %.$(gb_Library_UDK_MAJORVER),%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib)))))) \ $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) \ $(T_LIBS) \ + $(if $(CXXOBJECTS)$(GENCXXOBJECTS)$(EXTRAOBJECTLISTS)$(filter-out XTRUE,X$(ENABLE_RUNTIME_OPTIMIZATIONS)),$(T_STDLIBS_CXX)) \ -Wl$(COMMA)--end-group \ , \ -Wl$(COMMA)--start-group \ $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) \ $(T_LIBS) \ + $(if $(CXXOBJECTS)$(GENCXXOBJECTS)$(EXTRAOBJECTLISTS)$(filter-out XTRUE,X$(ENABLE_RUNTIME_OPTIMIZATIONS)),$(T_STDLIBS_CXX)) \ -Wl$(COMMA)--end-group \ -Wl$(COMMA)--no-as-needed \ $(patsubst lib%.a,-l%,$(patsubst lib%.so,-l%,$(patsubst %.$(gb_Library_UDK_MAJORVER),%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib)))))) \ |