Daily bump.
[official-gcc.git] / libatomic / Makefile.am
blobd49c44c7d5fbe83061fddd1f8ef4813a39eb1b8b
1 ##  Copyright (C) 2012-2024 Free Software Foundation, Inc.
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.
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.
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.
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/>.
25 ACLOCAL_AMFLAGS = -I .. -I ../config
26 SUBDIRS = testsuite
28 ## May be used by toolexeclibdir.
29 gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER)
31 config_path= @config_path@
32 search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) \
33         $(top_srcdir) $(top_builddir)
35 vpath % $(strip $(search_path))
37 DEFAULT_INCLUDES = $(addprefix -I, $(search_path))
38 AM_CFLAGS = $(XCFLAGS)
39 AM_CCASFLAGS = $(XCFLAGS)
40 AM_LDFLAGS = $(XLDFLAGS) $(SECTION_LDFLAGS) $(OPT_LDFLAGS)
42 toolexeclib_LTLIBRARIES = libatomic.la
43 noinst_LTLIBRARIES = libatomic_convenience.la
45 if LIBAT_BUILD_VERSIONED_SHLIB
46 if LIBAT_BUILD_VERSIONED_SHLIB_GNU
47 libatomic_version_script = -Wl,--version-script,$(top_srcdir)/libatomic.map
48 libatomic_version_dep = $(top_srcdir)/libatomic.map
49 endif
50 if LIBAT_BUILD_VERSIONED_SHLIB_SUN
51 libatomic_version_script = -Wl,-M,libatomic.map-sun
52 libatomic_version_dep = libatomic.map-sun
53 libatomic.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) | \
60             sed 's,\([^/        ]*\)\.l\([ao]\),.libs/\1.\2,g'` \
61          > $@ || (rm -f $@ ; exit 1)
62 endif
63 else
64 libatomic_version_script =
65 libatomic_version_dep =
66 endif
67 libatomic_version_info = -version-info $(libtool_VERSION)
68 if ENABLE_DARWIN_AT_RPATH
69 libatomic_darwin_rpath = -Wc,-nodefaultrpaths
70 libatomic_darwin_rpath += -Wl,-rpath,@loader_path
71 endif
73 libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \
74         $(lt_host_flags) $(libatomic_darwin_rpath)
75 libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c init.c \
76         fenv.c fence.c flag.c
78 SIZEOBJS = load store cas exch fadd fsub fand fior fxor fnand tas
79 SIZES = @SIZES@
81 EXTRA_libatomic_la_SOURCES = $(addsuffix _n.c,$(SIZEOBJS))
82 libatomic_la_DEPENDENCIES = $(libatomic_la_LIBADD) $(libatomic_version_dep)
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)
91 ## Naming pattern: base_n_i_.lo
93 ##      N       size of data
94 ##      I       IFUNC alternative, index beginning at 1.
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.
100 empty           =
101 space           = $(empty) $(empty)
102 PAT_SPLIT       = $(subst _,$(space),$(*F))
103 PAT_BASE        = $(word 1,$(PAT_SPLIT))
104 PAT_N           = $(word 2,$(PAT_SPLIT))
105 PAT_S           = $(word 3,$(PAT_SPLIT))
106 IFUNC_DEF       = -DIFUNC_ALT=$(PAT_S)
107 IFUNC_OPT       = $(word $(PAT_S),$(IFUNC_OPTIONS))
109 @AMDEP_TRUE@M_DEPS              = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo
110 @AMDEP_FALSE@M_DEPS             =
112 M_SIZE          = -DN=$(PAT_N)
113 M_IFUNC         = $(if $(PAT_S),$(IFUNC_DEF) $(IFUNC_OPT))
114 M_FILE          = $(PAT_BASE)_n.c
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.
119 all_c_files     := $(foreach dir,$(search_path),$(wildcard $(dir)/*.c))
121 # Then sort through them to find the one we want, and select the first.
122 M_SRC           = $(firstword $(filter %/$(M_FILE), $(all_c_files)))
124 %_.lo: Makefile
125         $(LTCOMPILE) $(M_DEPS) $(M_SIZE) $(M_IFUNC) -c -o $@ $(M_SRC)
127 ## Include all of the sizes in the "normal" set of compilation flags.
128 libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix _$(s)_.lo,$(SIZEOBJS)))
130 ## On a target-specific basis, include alternates to be selected by IFUNC.
131 if HAVE_IFUNC
132 if ARCH_AARCH64_LINUX
133 if ARCH_AARCH64_HAVE_LSE128
134 AM_CPPFLAGS          = -DHAVE_FEAT_LSE128
135 endif
136 IFUNC_OPTIONS        = -march=armv8-a+lse
137 libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS)))
138 libatomic_la_SOURCES += atomic_16.S
140 endif
141 if ARCH_ARM_LINUX
142 IFUNC_OPTIONS        = -march=armv7-a+fp -DHAVE_KERNEL64
143 libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS)))
144 libatomic_la_LIBADD += $(addsuffix _8_2_.lo,$(SIZEOBJS))
145 libatomic_la_LIBADD += tas_1_2_.lo
146 endif
147 if ARCH_I386
148 IFUNC_OPTIONS        = -march=i586
149 libatomic_la_LIBADD += $(addsuffix _8_1_.lo,$(SIZEOBJS))
150 endif
151 if ARCH_X86_64
152 IFUNC_OPTIONS        = -mcx16 -mcx16
153 libatomic_la_LIBADD += $(addsuffix _16_1_.lo,$(SIZEOBJS)) \
154                        $(addsuffix _16_2_.lo,$(SIZEOBJS))
155 endif
156 endif
158 libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES)
159 libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD)
161 # Amend the automake generated all-multi rule to guarantee that all-multi
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.
165 all-multi: $(libatomic_la_LIBADD)
167 # target overrides
168 -include $(tmake_file)
170 include $(top_srcdir)/../multilib.am