1#
2# SPDX-License-Identifier: BSD-3-Clause
3#
4# Copyright © 2019 Keith Packard
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9#
10# 1. Redistributions of source code must retain the above copyright
11#    notice, this list of conditions and the following disclaimer.
12#
13# 2. Redistributions in binary form must reproduce the above
14#    copyright notice, this list of conditions and the following
15#    disclaimer in the documentation and/or other materials provided
16#    with the distribution.
17#
18# 3. Neither the name of the copyright holder nor the names of its
19#    contributors may be used to endorse or promote products derived
20#    from this software without specific prior written permission.
21#
22# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
33# OF THE POSSIBILITY OF SUCH DAMAGE.
34#
35
36srcs_machine_common = [
37  'memcpy.S',
38  'memset.S',
39  'setjmp.S',
40]
41
42srcs_machine_64 = [
43  'memchr.c',
44  'memcmp.c',
45  'memmove.c',
46  'strchr.c',
47  'strlen.c'
48]
49
50srcs_machine_32 = [
51  'memchr.S',
52  'memcmp.S',
53  'memmove.S',
54  'strchr.S',
55  'strlen.S',
56]
57
58srcs_machine = srcs_machine_common + srcs_machine_64
59
60subdir('machine')
61
62x86_64_code = '''#ifndef __x86_64
63#error not x86_64
64#endif
65'''
66
67is_x86_64 = cc.compiles(x86_64_code, name : 'x86_64 check')
68
69foreach target : targets
70  value = get_variable('target_' + target)
71  if target.startswith('32') or (target == '' and not is_x86_64)
72    srcs_machine_target = srcs_machine_common + srcs_machine_32
73  else
74    srcs_machine_target = srcs_machine_common + srcs_machine_64
75  endif
76  set_variable('lib_machine' + target,
77	       static_library('machine' + target,
78			      srcs_machine_target,
79			      pic: false,
80			      include_directories: inc,
81			      c_args: value[1] + c_args + arg_fnobuiltin))
82endforeach
83