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#
35libm_machine_dirs = {
36		      'aarch64' : 'aarch64',
37		      'arm' : 'arm',
38		      'i386' : 'i386',
39		      'i486' : 'i386',
40		      'i586' : 'i386',
41		      'i686' : 'i386',
42		      'nds32' : 'nds32',
43		      'riscv' : 'riscv',
44		      'riscv64' : 'riscv',
45		      'spu' : 'spu',
46		      'xtensa': 'xtensa',
47		    }
48
49libdirs = ['math', 'common', 'complex']
50
51libnames = libdirs
52
53need_generic_fenv = true
54
55if libm_machine_dirs.has_key(host_cpu)
56  libm_machine_dir = join_paths('machine', libm_machine_dirs[host_cpu])
57  libdirs = [libm_machine_dir] + libdirs
58  libnames = ['machine'] + libnames
59  if run_command('test', '-f', join_paths(libm_machine_dir, 'fegetenv.c')).returncode() == 0
60    need_generic_fenv = false
61  endif
62else
63  warning('No libm machine directory for cpu ' + host_cpu)
64endif
65
66if need_generic_fenv
67  libdirs = ['fenv'] + libdirs
68  libnames = ['fenv'] + libnames
69endif
70
71math_inc = [include_directories('common'), inc]
72
73foreach libdir : libdirs
74  subdir(libdir)
75endforeach
76
77foreach target : targets
78  value = get_variable('target_' + target)
79  libobjs = []
80
81  foreach libname : libnames
82    libobjs += get_variable('lib_' + libname + target).extract_all_objects(recursive:true)
83  endforeach
84
85  instdir = join_paths(get_option('libdir'), value[0])
86
87  if target == ''
88    libm_name = 'm'
89  else
90    libm_name = join_paths(target, 'libm')
91  endif
92
93  set_variable('lib_m' + target,
94	       static_library(libm_name,
95			      install : true,
96			      install_dir : instdir,
97			      pic: false,
98			      objects : libobjs))
99endforeach
100
101if enable_tests
102  subdir('test')
103endif
104
105