1# Copyright (c) 2011, Linaro Limited
2# All rights reserved.
3#
4# Redistribution and use in source and binary forms, with or without
5# modification, are permitted provided that the following conditions are met:
6#     * Redistributions of source code must retain the above copyright
7#       notice, this list of conditions and the following disclaimer.
8#     * Redistributions in binary form must reproduce the above copyright
9#       notice, this list of conditions and the following disclaimer in the
10#       documentation and/or other materials provided with the distribution.
11#     * Neither the name of the Linaro nor the
12#       names of its contributors may be used to endorse or promote products
13#       derived from this software without specific prior written permission.
14#
15# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
19# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25#
26
27# Top level Makefile for cortex-strings
28
29# Used to record the compiler version in the executables
30COMPILER = $(shell $(CC) --version 2>&1 | head -n1)
31
32# The main library
33lib_LTLIBRARIES = \
34	libcortex-strings.la
35
36## Test suite
37check_PROGRAMS = \
38	tests/test-memchr \
39	tests/test-memcmp \
40	tests/test-memcpy \
41	tests/test-memmove \
42	tests/test-memset \
43	tests/test-strchr \
44	tests/test-strcmp \
45	tests/test-strcpy \
46	tests/test-strlen \
47	tests/test-strncmp \
48	tests/test-strnlen
49
50# Options for the tests
51tests_cflags = -I$(srcdir)/tests $(AM_CFLAGS)
52tests_ldadd = libcortex-strings.la
53tests_test_memchr_LDADD = $(tests_ldadd)
54tests_test_memchr_CFLAGS = $(tests_cflags)
55tests_test_memcmp_LDADD = $(tests_ldadd)
56tests_test_memcmp_CFLAGS = $(tests_cflags)
57tests_test_memcpy_LDADD = $(tests_ldadd)
58tests_test_memcpy_CFLAGS = $(tests_cflags)
59tests_test_memmove_LDADD = $(tests_ldadd)
60tests_test_memmove_CFLAGS = $(tests_cflags)
61tests_test_memset_LDADD = $(tests_ldadd)
62tests_test_memset_CFLAGS = $(tests_cflags)
63tests_test_strchr_LDADD = $(tests_ldadd)
64tests_test_strchr_CFLAGS = $(tests_cflags)
65tests_test_strcmp_LDADD = $(tests_ldadd)
66tests_test_strcmp_CFLAGS = $(tests_cflags)
67tests_test_strcpy_LDADD = $(tests_ldadd)
68tests_test_strcpy_CFLAGS = $(tests_cflags)
69tests_test_strlen_LDADD = $(tests_ldadd)
70tests_test_strlen_CFLAGS = $(tests_cflags)
71tests_test_strncmp_LDADD = $(tests_ldadd)
72tests_test_strncmp_CFLAGS = $(tests_cflags)
73
74TESTS = $(check_PROGRAMS)
75
76## Benchmarks
77noinst_PROGRAMS = \
78	dhry \
79	dhry-native \
80	try-none \
81	try-this \
82	try-plain \
83	try-newlib-c \
84	try-bionic-c \
85	try-glibc-c
86
87# Good 'ol Dhrystone
88dhry_SOURCES = \
89	benchmarks/dhry/dhry_1.c \
90	benchmarks/dhry/dhry_2.c \
91	benchmarks/dhry/dhry.h
92
93dhry_CFLAGS = -Dcompiler="\"$(COMPILER)\"" -Doptions="\"$(CFLAGS)\""
94dhry_LDADD = libcortex-strings.la
95
96dhry_native_SOURCES = $(dhry_SOURCES)
97dhry_native_CFLAGS = $(dhry_CFLAGS)
98
99# Benchmark harness
100noinst_LIBRARIES = \
101	libmulti.a \
102	libbionic-c.a \
103	libglibc-c.a \
104	libnewlib-c.a \
105	libplain.a
106
107libmulti_a_SOURCES = \
108	benchmarks/multi/harness.c
109
110libmulti_a_CFLAGS = -DVERSION=\"$(VERSION)\" $(AM_CFLAGS)
111
112## Other architecture independant implementaions
113libbionic_c_a_SOURCES = \
114	reference/bionic-c/bcopy.c \
115	reference/bionic-c/memchr.c \
116	reference/bionic-c/memcmp.c \
117	reference/bionic-c/memcpy.c \
118	reference/bionic-c/memset.c \
119	reference/bionic-c/strchr.c \
120	reference/bionic-c/strcmp.c \
121	reference/bionic-c/strcpy.c \
122	reference/bionic-c/strlen.c
123
124libglibc_c_a_SOURCES = \
125	reference/glibc-c/memchr.c \
126	reference/glibc-c/memcmp.c \
127	reference/glibc-c/memcpy.c \
128	reference/glibc-c/memset.c \
129	reference/glibc-c/strchr.c \
130	reference/glibc-c/strcmp.c \
131	reference/glibc-c/strcpy.c \
132	reference/glibc-c/strlen.c \
133	reference/glibc-c/wordcopy.c \
134	reference/glibc-c/memcopy.h \
135	reference/glibc-c/pagecopy.h
136
137libnewlib_c_a_SOURCES = \
138	reference/newlib-c/memchr.c \
139	reference/newlib-c/memcmp.c \
140	reference/newlib-c/memcpy.c \
141	reference/newlib-c/memset.c \
142	reference/newlib-c/strchr.c \
143	reference/newlib-c/strcmp.c \
144	reference/newlib-c/strcpy.c \
145	reference/newlib-c/strlen.c \
146	reference/newlib-c/shim.h
147
148libplain_a_SOURCES = \
149	reference/plain/memset.c \
150	reference/plain/memcpy.c \
151	reference/plain/strcmp.c \
152	reference/plain/strcpy.c
153
154try_none_SOURCES =
155try_none_LDADD = libmulti.a -lrt
156try_this_SOURCES =
157try_this_LDADD = libmulti.a libcortex-strings.la -lrt
158try_bionic_c_SOURCES =
159try_bionic_c_LDADD = libmulti.a libbionic-c.a -lrt
160try_glibc_c_SOURCES =
161try_glibc_c_LDADD = libmulti.a libglibc-c.a -lrt
162try_newlib_c_SOURCES =
163try_newlib_c_LDADD = libmulti.a libnewlib-c.a -lrt
164try_plain_SOURCES =
165try_plain_LDADD = libmulti.a libplain.a -lrt
166
167# Architecture specific
168
169if HOST_AARCH32
170
171if WITH_NEON
172# Pull in the NEON specific files
173neon_bionic_a9_sources = \
174	reference/bionic-a9/memcpy.S \
175	reference/bionic-a9/memset.S
176neon_bionic_a15_sources = \
177	reference/bionic-a15/memcpy.S \
178	reference/bionic-a15/memset.S
179fpu_flags = -mfpu=neon
180else
181if WITH_VFP
182fpu_flags = -mfpu=vfp
183else
184fpu_flags = -msoft-float
185endif
186endif
187
188# Benchmarks and example programs
189noinst_PROGRAMS += \
190	try-bionic-a9 \
191	try-bionic-a15 \
192	try-csl \
193	try-glibc \
194	try-newlib \
195	try-newlib-xscale
196
197# Libraries used in the benchmarks and examples
198noinst_LIBRARIES += \
199	libbionic-a9.a \
200	libbionic-a15.a \
201	libcsl.a \
202	libglibc.a \
203	libnewlib.a \
204	libnewlib-xscale.a
205
206# Main library
207libcortex_strings_la_SOURCES = \
208	src/thumb-2/strcpy.c \
209	src/arm/memchr.S \
210	src/arm/strchr.S \
211	src/thumb-2/strlen.S \
212	src/arm/memset.S \
213	src/arm/memcpy.S \
214	src/arm/strcmp.S
215
216# Libraries containing the difference reference versions
217libbionic_a9_a_SOURCES = \
218	$(neon_bionic_a9_sources) \
219	reference/bionic-a9/memcmp.S \
220	reference/bionic-a9/strcmp.S \
221	reference/bionic-a9/strcpy.S \
222	reference/bionic-a9/strlen.c
223
224libbionic_a9_a_CFLAGS = -Wa,-mimplicit-it=thumb
225
226libbionic_a15_a_SOURCES = \
227	$(neon_bionic_a15_sources) \
228	reference/bionic-a15/memcmp.S \
229	reference/bionic-a15/strcmp.S \
230	reference/bionic-a15/strcpy.S \
231	reference/bionic-a15/strlen.c
232
233libbionic_a15_a_CFLAGS = -Wa,-mimplicit-it=thumb
234
235libcsl_a_SOURCES = \
236	reference/csl/memcpy.c \
237	reference/csl/memset.c \
238	reference/csl/arm_asm.h
239
240libglibc_a_SOURCES = \
241	reference/glibc/memcpy.S \
242	reference/glibc/memset.S \
243	reference/glibc/strchr.S \
244	reference/glibc/strlen.S
245
246libnewlib_a_SOURCES = \
247	reference/newlib/memcpy.S \
248	reference/newlib/strcmp.S \
249	reference/newlib/strcpy.c \
250	reference/newlib/strlen.c \
251	reference/newlib/arm_asm.h \
252	reference/newlib/shim.h
253
254libnewlib_xscale_a_SOURCES = \
255	reference/newlib-xscale/memchr.c \
256	reference/newlib-xscale/memcpy.c \
257	reference/newlib-xscale/memset.c \
258	reference/newlib-xscale/strchr.c \
259	reference/newlib-xscale/strcmp.c \
260	reference/newlib-xscale/strcpy.c \
261	reference/newlib-xscale/strlen.c \
262	reference/newlib-xscale/xscale.h
263
264# Flags for the benchmark helpers
265try_bionic_a9_SOURCES =
266try_bionic_a9_LDADD = libmulti.a libbionic-a9.a -lrt
267try_bionic_a15_SOURCES =
268try_bionic_a15_LDADD = libmulti.a libbionic-a15.a -lrt
269try_csl_SOURCES =
270try_csl_LDADD = libmulti.a libcsl.a -lrt
271try_glibc_SOURCES =
272try_glibc_LDADD = libmulti.a libglibc.a -lrt
273try_newlib_SOURCES =
274try_newlib_LDADD = libmulti.a libnewlib.a -lrt
275try_newlib_xscale_SOURCES =
276try_newlib_xscale_LDADD = libmulti.a libnewlib-xscale.a -lrt
277
278AM_CPPFLAGS = $(fpu_flags)
279AM_LDFLAGS = $(fpu_flags)
280
281endif
282
283# aarch64 specific
284if HOST_AARCH64
285
286libcortex_strings_la_SOURCES = \
287	src/aarch64/memchr.S \
288	src/aarch64/memcmp.S \
289	src/aarch64/memcpy.S \
290	src/aarch64/memmove.S \
291	src/aarch64/memset.S \
292	src/aarch64/strchr.S \
293	src/aarch64/strchrnul.S \
294	src/aarch64/strcmp.S \
295	src/aarch64/strcpy.S \
296	src/aarch64/strlen.S \
297	src/aarch64/strncmp.S \
298	src/aarch64/strnlen.S
299
300endif
301
302libcortex_strings_la_LDFLAGS = -version-info 1:0:0
303
304AM_CFLAGS = \
305	-std=gnu99 -Wall \
306	-fno-builtin -fno-stack-protector -U_FORTIFY_SOURCE \
307	$(AM_CPPFLAGS)
308
309if WITH_SUBMACHINE
310AM_CFLAGS += \
311	-mtune=$(submachine)
312endif
313
314EXTRA_DIST = \
315	tests/hp-timing.h \
316	tests/test-string.h \
317	tests/test-skeleton.c \
318	scripts/add-license.sh \
319	scripts/bench.py \
320	scripts/fixup.py \
321	scripts/libplot.py \
322	scripts/plot-align.py \
323	scripts/plot.py \
324	scripts/plot-sizes.py \
325	scripts/plot-top.py \
326	scripts/trim.sh \
327	autogen.sh
328