diff options
Diffstat (limited to 'libatomic/Makefile.am')
-rw-r--r-- | libatomic/Makefile.am | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am new file mode 100644 index 00000000000..e08db5638fd --- /dev/null +++ b/libatomic/Makefile.am @@ -0,0 +1,136 @@ +## Copyright (C) 2012 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 + +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,/\([^/.]*\)\.la,/.libs/\1.a,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) +libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c init.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 |