mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-02 08:13:58 +08:00
35b05a02de
The recent move of libgfortran object files to subdirs and the resulting breakage of libgfortran.so symbol exports demonstrated how fragile deriving object and archive names from their libtool counterparts in the Makefiles is. Therefore, this patch moves that step into make_sunver.pl, considerably simplifying the Makefile rules to create the version scripts. Bootstrapped without regressions on i386-pc-solaris2.11 and sparc-sun-solaris2.11, verifying that the version scripts are identical except for the input filenames. 2024-05-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> contrib: * make_sunver.pl: Use File::Basename; Skip -lLIB args. Convert libtool object/archive names to underlying objects/archives. libatomic: * Makefile.am [LIBAT_BUILD_VERSIONED_SHLIB_SUN] (libatomic.map-sun): Pass $(libatomic_la_OBJECTS), $(libatomic_la_LIBADD) to make_sunver.pl unmodified. * Makefile.in: Regenerate. libffi: * Makefile.am [LIBFFI_BUILD_VERSIONED_SHLIB_SUN] (libffi.map-sun): Pass $(libffi_la_OBJECTS), $(libffi_la_LIBADD) to make_sunver.pl unmodified. * Makefile.in: Regenerate. libgfortran: * Makefile.am [LIBGFOR_USE_SYMVER_SUN} (gfortran.ver-sun): Pass $(libgfortran_la_OBJECTS), $(libgfortran_la_LIBADD) to make_sunver.pl unmodified. * Makefile.in: Regenerate. libgomp: * Makefile.am [LIBGOMP_BUILD_VERSIONED_SHLIB_SUN] (libgomp.ver-sun): Pass $(libgomp_la_OBJECTS), $(libgomp_la_LIBADD) to make_sunver.pl unmodified. * Makefile.in: Regenerate. libitm: * Makefile.am [LIBITM_BUILD_VERSIONED_SHLIB_SUN] (libitm.map-sun): Pass $(libitm_la_OBJECTS), $(libitm_la_LIBADD) to make_sunver.pl unmodified. * Makefile.in: Regenerate. libquadmath: * Makefile.am [LIBQUAD_USE_SYMVER_SUN] (quadmath.map-sun): Pass $(libquadmath_la_OBJECTS), $(libquadmath_la_LIBADD) to make_sunver.pl unmodified. * Makefile.in: Regenerate. libssp: * Makefile.am [LIBSSP_USE_SYMVER_SUN] (ssp.map-sun): Pass $(libssp_la_OBJECTS), $(libssp_la_LIBADD) to make_sunver.pl unmodified. * Makefile.in: Regenerate. libstdc++-v3: * src/Makefile.am [ENABLE_SYMVERS_SUN] (libstdc++-symbols.ver-sun): Pass $(libstdc___la_OBJECTS), $(libstdc___la_LIBADD) to make_sunver.pl unmodified. * src/Makefile.in: Regenerate.
169 lines
6.0 KiB
Makefile
169 lines
6.0 KiB
Makefile
## Copyright (C) 2012-2024 Free Software Foundation, Inc.
|
|
## Contributed by Richard Henderson <rth@redhat.com>.
|
|
##
|
|
## This file is part of the GNU Atomic Library (libatomic).
|
|
##
|
|
## Libatomic is free software; you can redistribute it and/or modify it
|
|
## under the terms of the GNU General Public License as published by
|
|
## the Free Software Foundation; either version 3 of the License, or
|
|
## (at your option) any later version.
|
|
##
|
|
## Libatomic is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
## WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
## more details.
|
|
##
|
|
## Under Section 7 of GPL version 3, you are granted additional
|
|
## permissions described in the GCC Runtime Library Exception, version
|
|
## 3.1, as published by the Free Software Foundation.
|
|
##
|
|
## You should have received a copy of the GNU General Public License and
|
|
## a copy of the GCC Runtime Library Exception along with this program;
|
|
## see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
## <http://www.gnu.org/licenses/>.
|
|
|
|
ACLOCAL_AMFLAGS = -I .. -I ../config
|
|
SUBDIRS = testsuite
|
|
|
|
## May be used by toolexeclibdir.
|
|
gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER)
|
|
|
|
config_path= @config_path@
|
|
search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) \
|
|
$(top_srcdir) $(top_builddir)
|
|
|
|
vpath % $(strip $(search_path))
|
|
|
|
DEFAULT_INCLUDES = $(addprefix -I, $(search_path))
|
|
AM_CFLAGS = $(XCFLAGS)
|
|
AM_CCASFLAGS = $(XCFLAGS)
|
|
AM_LDFLAGS = $(XLDFLAGS) $(SECTION_LDFLAGS) $(OPT_LDFLAGS)
|
|
|
|
toolexeclib_LTLIBRARIES = libatomic.la
|
|
noinst_LTLIBRARIES = libatomic_convenience.la
|
|
|
|
if LIBAT_BUILD_VERSIONED_SHLIB
|
|
if LIBAT_BUILD_VERSIONED_SHLIB_GNU
|
|
libatomic_version_script = -Wl,--version-script,$(top_srcdir)/libatomic.map
|
|
libatomic_version_dep = $(top_srcdir)/libatomic.map
|
|
endif
|
|
if LIBAT_BUILD_VERSIONED_SHLIB_SUN
|
|
libatomic_version_script = -Wl,-M,libatomic.map-sun
|
|
libatomic_version_dep = libatomic.map-sun
|
|
libatomic.map-sun : $(top_srcdir)/libatomic.map \
|
|
$(top_srcdir)/../contrib/make_sunver.pl \
|
|
$(libatomic_la_OBJECTS) $(libatomic_la_LIBADD)
|
|
perl $(top_srcdir)/../contrib/make_sunver.pl \
|
|
$(top_srcdir)/libatomic.map \
|
|
$(libatomic_la_OBJECTS) $(libatomic_la_LIBADD) \
|
|
> $@ || (rm -f $@ ; exit 1)
|
|
endif
|
|
else
|
|
libatomic_version_script =
|
|
libatomic_version_dep =
|
|
endif
|
|
libatomic_version_info = -version-info $(libtool_VERSION)
|
|
if ENABLE_DARWIN_AT_RPATH
|
|
libatomic_darwin_rpath = -Wc,-nodefaultrpaths
|
|
libatomic_darwin_rpath += -Wl,-rpath,@loader_path
|
|
endif
|
|
|
|
libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \
|
|
$(lt_host_flags) $(libatomic_darwin_rpath)
|
|
libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c init.c \
|
|
fenv.c fence.c flag.c
|
|
|
|
SIZEOBJS = load store cas exch fadd fsub fand fior fxor fnand tas
|
|
SIZES = @SIZES@
|
|
|
|
EXTRA_libatomic_la_SOURCES = $(addsuffix _n.c,$(SIZEOBJS))
|
|
libatomic_la_DEPENDENCIES = $(libatomic_la_LIBADD) $(libatomic_version_dep)
|
|
|
|
## And now our custom target patterns that allow us not to have tons of
|
|
## extra source files hanging about. Unfortunately, the complex relation
|
|
## between source and object filenames doesn't allow us to add an explicit
|
|
## dependency here. Fortunately that doesn't matter since auto-generated
|
|
## dependencies do the job just as well:
|
|
-include $(wildcard $(DEPDIR)/*.Ppo)
|
|
|
|
## Naming pattern: base_n_i_.lo
|
|
##
|
|
## N size of data
|
|
## I IFUNC alternative, index beginning at 1.
|
|
##
|
|
## The trailing _ in the output object file name is required to differentiate
|
|
## these objects from those which should be compiled normally. We can only
|
|
## have one stem in the implicit rule.
|
|
|
|
empty =
|
|
space = $(empty) $(empty)
|
|
PAT_SPLIT = $(subst _,$(space),$(*F))
|
|
PAT_BASE = $(word 1,$(PAT_SPLIT))
|
|
PAT_N = $(word 2,$(PAT_SPLIT))
|
|
PAT_S = $(word 3,$(PAT_SPLIT))
|
|
IFUNC_DEF = -DIFUNC_ALT=$(PAT_S)
|
|
IFUNC_OPT = $(word $(PAT_S),$(IFUNC_OPTIONS))
|
|
|
|
@AMDEP_TRUE@M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo
|
|
@AMDEP_FALSE@M_DEPS =
|
|
|
|
M_SIZE = -DN=$(PAT_N)
|
|
M_IFUNC = $(if $(PAT_S),$(IFUNC_DEF) $(IFUNC_OPT))
|
|
M_FILE = $(PAT_BASE)_n.c
|
|
|
|
# The lack of explicit dependency on the source file means that VPATH cannot
|
|
# work properly. Instead, perform this operation by hand. First, collect a
|
|
# list of all .c files in the search path.
|
|
all_c_files := $(foreach dir,$(search_path),$(wildcard $(dir)/*.c))
|
|
|
|
# Then sort through them to find the one we want, and select the first.
|
|
M_SRC = $(firstword $(filter %/$(M_FILE), $(all_c_files)))
|
|
|
|
%_.lo: Makefile
|
|
$(LTCOMPILE) $(M_DEPS) $(M_SIZE) $(M_IFUNC) -c -o $@ $(M_SRC)
|
|
|
|
## Include all of the sizes in the "normal" set of compilation flags.
|
|
libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix _$(s)_.lo,$(SIZEOBJS)))
|
|
|
|
## On a target-specific basis, include alternates to be selected by IFUNC.
|
|
if HAVE_IFUNC
|
|
if ARCH_AARCH64_LINUX
|
|
IFUNC_OPTIONS = -march=armv8-a+lse
|
|
libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS)))
|
|
|
|
endif
|
|
if ARCH_ARM_LINUX
|
|
IFUNC_OPTIONS = -march=armv7-a+fp -DHAVE_KERNEL64
|
|
libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS)))
|
|
libatomic_la_LIBADD += $(addsuffix _8_2_.lo,$(SIZEOBJS))
|
|
libatomic_la_LIBADD += tas_1_2_.lo
|
|
endif
|
|
if ARCH_I386
|
|
IFUNC_OPTIONS = -march=i586
|
|
libatomic_la_LIBADD += $(addsuffix _8_1_.lo,$(SIZEOBJS))
|
|
endif
|
|
if ARCH_X86_64
|
|
IFUNC_OPTIONS = -mcx16 -mcx16
|
|
libatomic_la_LIBADD += $(addsuffix _16_1_.lo,$(SIZEOBJS)) \
|
|
$(addsuffix _16_2_.lo,$(SIZEOBJS))
|
|
endif
|
|
endif
|
|
|
|
if ARCH_AARCH64_LINUX
|
|
libatomic_la_SOURCES += atomic_16.S
|
|
endif
|
|
|
|
libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES)
|
|
libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD)
|
|
|
|
# Amend the automake generated all-multi rule to guarantee that all-multi
|
|
# is not run in parallel with the %_.lo rules which generate $(DEPDIR)/*.Ppo
|
|
# makefile fragments to avoid broken *.Ppo getting included into the Makefile
|
|
# when it is reloaded during the build of all-multi.
|
|
all-multi: $(libatomic_la_LIBADD)
|
|
|
|
# target overrides
|
|
-include $(tmake_file)
|
|
|
|
include $(top_srcdir)/../multilib.am
|