123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- ## Copyright (C) 2012-2015 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 cat $(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:%.lo=.libs/%.o) \
- `echo $(libatomic_la_LIBADD) | \
- sed 's,\([^/ ]*\)\.l\([ao]\),.libs/\1.\2,g'` \
- > $@ || (rm -f $@ ; exit 1)
- endif
- else
- libatomic_version_script =
- libatomic_version_dep =
- endif
- libatomic_version_info = -version-info $(libtool_VERSION)
- libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) $(lt_host_flags)
- libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c init.c \
- fenv.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))
- M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo
- 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_ARM_LINUX
- IFUNC_OPTIONS = -march=armv7-a -DHAVE_KERNEL64
- libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS)))
- libatomic_la_LIBADD += $(addsuffix _8_2_.lo,$(SIZEOBJS))
- endif
- if ARCH_I386
- IFUNC_OPTIONS = -march=i586
- libatomic_la_LIBADD += $(addsuffix _8_1_.lo,$(SIZEOBJS))
- endif
- if ARCH_X86_64
- IFUNC_OPTIONS = -mcx16
- libatomic_la_LIBADD += $(addsuffix _16_1_.lo,$(SIZEOBJS))
- endif
- endif
- libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES)
- libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD)
|