]>
Commit | Line | Data |
---|---|---|
3e6a2e37 | 1 | ## Copyright (C) 2012-2014 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 | ||
25 | ACLOCAL_AMFLAGS = -I .. -I ../config | |
26 | SUBDIRS = testsuite | |
27 | ||
28 | ## May be used by toolexeclibdir. | |
29 | gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) | |
30 | ||
31 | config_path= @config_path@ | |
32 | search_path = $(addprefix $(top_srcdir)/config/, $(config_path)) \ | |
33 | $(top_srcdir) $(top_builddir) | |
34 | ||
35 | vpath % $(strip $(search_path)) | |
36 | ||
37 | DEFAULT_INCLUDES = $(addprefix -I, $(search_path)) | |
38 | AM_CFLAGS = $(XCFLAGS) | |
39 | AM_CCASFLAGS = $(XCFLAGS) | |
40 | AM_LDFLAGS = $(XLDFLAGS) $(SECTION_LDFLAGS) $(OPT_LDFLAGS) | |
41 | ||
42 | toolexeclib_LTLIBRARIES = libatomic.la | |
36749a1f | 43 | noinst_LTLIBRARIES = libatomic_convenience.la |
48310492 RH |
44 | |
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) | \ | |
527eeee5 | 60 | sed 's,\([^/ ]*\)\.l\([ao]\),.libs/\1.\2,g'` \ |
48310492 RH |
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 | ||
69 | libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) | |
267bac10 JM |
70 | libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c init.c \ |
71 | fenv.c | |
48310492 RH |
72 | |
73 | SIZEOBJS = load store cas exch fadd fsub fand fior fxor fnand tas | |
74 | SIZES = @SIZES@ | |
75 | ||
76 | EXTRA_libatomic_la_SOURCES = $(addsuffix _n.c,$(SIZEOBJS)) | |
77 | libatomic_la_DEPENDENCIES = $(libatomic_la_LIBADD) $(libatomic_version_dep) | |
78 | ||
79 | ## And now our custom target patterns that allow us not to have tons of | |
80 | ## extra source files hanging about. Unfortunately, the complex relation | |
81 | ## between source and object filenames doesn't allow us to add an explicit | |
82 | ## dependency here. Fortunately that doesn't matter since auto-generated | |
83 | ## dependencies do the job just as well: | |
84 | -include $(wildcard $(DEPDIR)/*.Ppo) | |
85 | ||
86 | ## Naming pattern: base_n_i_.lo | |
87 | ## | |
88 | ## N size of data | |
89 | ## I IFUNC alternative, index beginning at 1. | |
90 | ## | |
91 | ## The trailing _ in the output object file name is required to differentiate | |
92 | ## these objects from those which should be compiled normally. We can only | |
93 | ## have one stem in the implicit rule. | |
94 | ||
95 | empty = | |
96 | space = $(empty) $(empty) | |
97 | PAT_SPLIT = $(subst _,$(space),$(*F)) | |
98 | PAT_BASE = $(word 1,$(PAT_SPLIT)) | |
99 | PAT_N = $(word 2,$(PAT_SPLIT)) | |
100 | PAT_S = $(word 3,$(PAT_SPLIT)) | |
101 | IFUNC_DEF = -DIFUNC_ALT=$(PAT_S) | |
102 | IFUNC_OPT = $(word $(PAT_S),$(IFUNC_OPTIONS)) | |
103 | ||
104 | M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo | |
105 | M_SIZE = -DN=$(PAT_N) | |
106 | M_IFUNC = $(if $(PAT_S),$(IFUNC_DEF) $(IFUNC_OPT)) | |
107 | M_FILE = $(PAT_BASE)_n.c | |
108 | ||
109 | # The lack of explicit dependency on the source file means that VPATH cannot | |
110 | # work properly. Instead, perform this operation by hand. First, collect a | |
111 | # list of all .c files in the search path. | |
112 | all_c_files := $(foreach dir,$(search_path),$(wildcard $(dir)/*.c)) | |
113 | ||
114 | # Then sort through them to find the one we want, and select the first. | |
115 | M_SRC = $(firstword $(filter %/$(M_FILE), $(all_c_files))) | |
116 | ||
117 | %_.lo: Makefile | |
118 | $(LTCOMPILE) $(M_DEPS) $(M_SIZE) $(M_IFUNC) -c -o $@ $(M_SRC) | |
119 | ||
120 | ## Include all of the sizes in the "normal" set of compilation flags. | |
121 | libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix _$(s)_.lo,$(SIZEOBJS))) | |
122 | ||
123 | ## On a target-specific basis, include alternates to be selected by IFUNC. | |
124 | if HAVE_IFUNC | |
125 | if ARCH_ARM_LINUX | |
126 | IFUNC_OPTIONS = -march=armv7-a -DHAVE_KERNEL64 | |
127 | libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS))) | |
128 | libatomic_la_LIBADD += $(addsuffix _8_2_.lo,$(SIZEOBJS)) | |
129 | endif | |
130 | if ARCH_I386 | |
131 | IFUNC_OPTIONS = -march=i586 | |
132 | libatomic_la_LIBADD += $(addsuffix _8_1_.lo,$(SIZEOBJS)) | |
133 | endif | |
134 | if ARCH_X86_64 | |
135 | IFUNC_OPTIONS = -mcx16 | |
136 | libatomic_la_LIBADD += $(addsuffix _16_1_.lo,$(SIZEOBJS)) | |
137 | endif | |
138 | endif | |
36749a1f ILT |
139 | |
140 | libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES) | |
141 | libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD) |