]> git.ipfire.org Git - thirdparty/gcc.git/blame - libatomic/Makefile.am
[strub] improve handling of indirected volatile parms [PR112938]
[thirdparty/gcc.git] / libatomic / Makefile.am
CommitLineData
a945c346 1## Copyright (C) 2012-2024 Free Software Foundation, Inc.
48310492
RH
2## Contributed by Richard Henderson <rth@redhat.com>.
3##
4## This file is part of the GNU Atomic Library (libatomic).
5##
6## Libatomic is free software; you can redistribute it and/or modify it
7## under the terms of the GNU General Public License as published by
8## the Free Software Foundation; either version 3 of the License, or
9## (at your option) any later version.
10##
11## Libatomic is distributed in the hope that it will be useful, but WITHOUT ANY
12## WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13## FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14## more details.
15##
16## Under Section 7 of GPL version 3, you are granted additional
17## permissions described in the GCC Runtime Library Exception, version
18## 3.1, as published by the Free Software Foundation.
19##
20## You should have received a copy of the GNU General Public License and
21## a copy of the GCC Runtime Library Exception along with this program;
22## see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23## <http://www.gnu.org/licenses/>.
24
25ACLOCAL_AMFLAGS = -I .. -I ../config
26SUBDIRS = testsuite
27
28## May be used by toolexeclibdir.
3c36aa6b 29gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER)
48310492
RH
30
31config_path= @config_path@
32search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) \
33 $(top_srcdir) $(top_builddir)
34
35vpath % $(strip $(search_path))
36
37DEFAULT_INCLUDES = $(addprefix -I, $(search_path))
38AM_CFLAGS = $(XCFLAGS)
39AM_CCASFLAGS = $(XCFLAGS)
40AM_LDFLAGS = $(XLDFLAGS) $(SECTION_LDFLAGS) $(OPT_LDFLAGS)
41
42toolexeclib_LTLIBRARIES = libatomic.la
36749a1f 43noinst_LTLIBRARIES = libatomic_convenience.la
48310492
RH
44
45if LIBAT_BUILD_VERSIONED_SHLIB
46if LIBAT_BUILD_VERSIONED_SHLIB_GNU
47libatomic_version_script = -Wl,--version-script,$(top_srcdir)/libatomic.map
48libatomic_version_dep = $(top_srcdir)/libatomic.map
49endif
50if LIBAT_BUILD_VERSIONED_SHLIB_SUN
51libatomic_version_script = -Wl,-M,libatomic.map-sun
52libatomic_version_dep = libatomic.map-sun
53libatomic.map-sun : $(top_srcdir)/libatomic.map \
54 $(top_srcdir)/../contrib/make_sunver.pl \
55 $(libatomic_la_OBJECTS) $(libatomic_la_LIBADD)
56 perl $(top_srcdir)/../contrib/make_sunver.pl \
57 $(top_srcdir)/libatomic.map \
58 $(libatomic_la_OBJECTS:%.lo=.libs/%.o) \
59 `echo $(libatomic_la_LIBADD) | \
527eeee5 60 sed 's,\([^/ ]*\)\.l\([ao]\),.libs/\1.\2,g'` \
48310492
RH
61 > $@ || (rm -f $@ ; exit 1)
62endif
63else
64libatomic_version_script =
65libatomic_version_dep =
66endif
67libatomic_version_info = -version-info $(libtool_VERSION)
6a6d3817
IS
68if ENABLE_DARWIN_AT_RPATH
69libatomic_darwin_rpath = -Wc,-nodefaultrpaths
70libatomic_darwin_rpath += -Wl,-rpath,@loader_path
71endif
48310492 72
6a6d3817
IS
73libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \
74 $(lt_host_flags) $(libatomic_darwin_rpath)
267bac10 75libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c init.c \
c29c36ad 76 fenv.c fence.c flag.c
48310492
RH
77
78SIZEOBJS = load store cas exch fadd fsub fand fior fxor fnand tas
79SIZES = @SIZES@
80
81EXTRA_libatomic_la_SOURCES = $(addsuffix _n.c,$(SIZEOBJS))
82libatomic_la_DEPENDENCIES = $(libatomic_la_LIBADD) $(libatomic_version_dep)
83
84## And now our custom target patterns that allow us not to have tons of
85## extra source files hanging about. Unfortunately, the complex relation
86## between source and object filenames doesn't allow us to add an explicit
87## dependency here. Fortunately that doesn't matter since auto-generated
88## dependencies do the job just as well:
89-include $(wildcard $(DEPDIR)/*.Ppo)
90
91## Naming pattern: base_n_i_.lo
92##
93## N size of data
94## I IFUNC alternative, index beginning at 1.
95##
96## The trailing _ in the output object file name is required to differentiate
97## these objects from those which should be compiled normally. We can only
98## have one stem in the implicit rule.
99
100empty =
101space = $(empty) $(empty)
102PAT_SPLIT = $(subst _,$(space),$(*F))
103PAT_BASE = $(word 1,$(PAT_SPLIT))
104PAT_N = $(word 2,$(PAT_SPLIT))
105PAT_S = $(word 3,$(PAT_SPLIT))
106IFUNC_DEF = -DIFUNC_ALT=$(PAT_S)
107IFUNC_OPT = $(word $(PAT_S),$(IFUNC_OPTIONS))
108
d6f420d9 109@AMDEP_TRUE@M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo
128ff73d 110@AMDEP_FALSE@M_DEPS =
d6f420d9 111
48310492
RH
112M_SIZE = -DN=$(PAT_N)
113M_IFUNC = $(if $(PAT_S),$(IFUNC_DEF) $(IFUNC_OPT))
114M_FILE = $(PAT_BASE)_n.c
115
116# The lack of explicit dependency on the source file means that VPATH cannot
117# work properly. Instead, perform this operation by hand. First, collect a
118# list of all .c files in the search path.
119all_c_files := $(foreach dir,$(search_path),$(wildcard $(dir)/*.c))
120
121# Then sort through them to find the one we want, and select the first.
122M_SRC = $(firstword $(filter %/$(M_FILE), $(all_c_files)))
123
124%_.lo: Makefile
125 $(LTCOMPILE) $(M_DEPS) $(M_SIZE) $(M_IFUNC) -c -o $@ $(M_SRC)
126
127## Include all of the sizes in the "normal" set of compilation flags.
128libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix _$(s)_.lo,$(SIZEOBJS)))
129
130## On a target-specific basis, include alternates to be selected by IFUNC.
131if HAVE_IFUNC
141abc6f 132if ARCH_AARCH64_LINUX
9d0e85af 133IFUNC_OPTIONS = -march=armv8-a+lse
141abc6f 134libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS)))
d1288d85 135
141abc6f 136endif
48310492 137if ARCH_ARM_LINUX
e64944ac 138IFUNC_OPTIONS = -march=armv7-a+fp -DHAVE_KERNEL64
48310492
RH
139libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS)))
140libatomic_la_LIBADD += $(addsuffix _8_2_.lo,$(SIZEOBJS))
ea767576 141libatomic_la_LIBADD += tas_1_2_.lo
48310492
RH
142endif
143if ARCH_I386
144IFUNC_OPTIONS = -march=i586
145libatomic_la_LIBADD += $(addsuffix _8_1_.lo,$(SIZEOBJS))
146endif
147if ARCH_X86_64
1d47c051
JJ
148IFUNC_OPTIONS = -mcx16 -mcx16
149libatomic_la_LIBADD += $(addsuffix _16_1_.lo,$(SIZEOBJS)) \
150 $(addsuffix _16_2_.lo,$(SIZEOBJS))
48310492
RH
151endif
152endif
36749a1f 153
27b6d081
WD
154if ARCH_AARCH64_LINUX
155libatomic_la_SOURCES += atomic_16.S
156endif
157
36749a1f
ILT
158libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES)
159libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD)
7c961392 160
00938214 161# Amend the automake generated all-multi rule to guarantee that all-multi
7c961392
SN
162# is not run in parallel with the %_.lo rules which generate $(DEPDIR)/*.Ppo
163# makefile fragments to avoid broken *.Ppo getting included into the Makefile
164# when it is reloaded during the build of all-multi.
165all-multi: $(libatomic_la_LIBADD)
22e05272 166
47ddb895 167# target overrides
0164e598 168-include $(tmake_file)
47ddb895 169
22e05272 170include $(top_srcdir)/../multilib.am