• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1package {
2    default_applicable_licenses: ["external_arm-optimized-routines_license"],
3}
4
5// Added automatically by a large-scale-change
6// See: http://go/android-license-faq
7license {
8    name: "external_arm-optimized-routines_license",
9    visibility: [":__subpackages__"],
10    license_kinds: [
11        "SPDX-license-identifier-MIT",
12    ],
13    license_text: [
14        "LICENSE",
15    ],
16}
17
18cc_defaults {
19    name: "arm-optimized-routines-defaults",
20    host_supported: true,
21    cflags: [
22        "-Werror",
23        "-Wno-unused-parameter",
24        "-O2",
25        "-ffp-contract=fast",
26        "-fno-math-errno",
27
28        // bionic configuration.
29
30        // We're actually implementing bionic here, so we don't want <math.h>
31        // to try to be helpful by renaming long double routines.
32        "-D__BIONIC_LP32_USE_LONG_DOUBLE",
33        "-DFLT_EVAL_METHOD=0",
34
35        // arm-optimized-routines configuration.
36
37        // BSD libm doesn't set errno, and bionic was based on the BSDs.
38        // https://github.com/ARM-software/optimized-routines/issues/16#issuecomment-572009659
39        "-DWANT_ERRNO=0",
40        // TODO: we may want the vector code in future, but it's not ready yet.
41        "-DWANT_VMATH=0",
42    ],
43    local_include_dirs: ["math/include"],
44    arch: {
45        arm64: {
46            oryon: {
47                cflags: [
48                    "-Xclang -target-feature",
49                    "-Xclang +ldp-aligned-only",
50                ],
51            },
52        },
53    },
54}
55
56cc_defaults {
57    name: "libarm-optimized-routines-defaults",
58    defaults: ["arm-optimized-routines-defaults"],
59    ramdisk_available: true,
60    vendor_ramdisk_available: true,
61    recovery_available: true,
62    native_bridge_supported: true,
63    apex_available: [
64        "//apex_available:platform",
65        "com.android.runtime",
66    ],
67
68    stl: "none",
69    target: {
70        bionic: {
71            static: {
72                system_shared_libs: [],
73            },
74            header_libs: ["libc_headers"],
75        },
76    },
77}
78
79cc_library_static {
80    name: "libarm-optimized-routines-math",
81    defaults: ["libarm-optimized-routines-defaults"],
82    exclude_srcs: [
83        // Provided by:
84        // bionic/libm/upstream-freebsd/lib/msun/src/s_erf.c
85        // bionic/libm/upstream-freebsd/lib/msun/src/s_erff.c
86        "math/erf.c",
87        "math/erf_data.c",
88        "math/erff.c",
89        "math/erff_data.c",
90    ],
91    srcs: [
92        "math/*.c",
93    ],
94
95    // arch-specific settings
96    arch: {
97        arm64: {
98            cflags: [
99                "-DHAVE_FAST_FMA=1",
100            ],
101        },
102    },
103
104    target: {
105        darwin: {
106            enabled: false,
107        },
108        linux_bionic: {
109            enabled: true,
110        },
111    },
112}
113
114cc_library_static {
115    name: "libarm-optimized-routines-string",
116    defaults: ["libarm-optimized-routines-defaults"],
117
118    arch: {
119        arm64: {
120            srcs: [
121                "string/aarch64/memchr-mte.S",
122                "string/aarch64/memchr-sve.S",
123                "string/aarch64/memchr.S",
124                "string/aarch64/memcmp-sve.S",
125                "string/aarch64/memcmp.S",
126                "string/aarch64/memcpy-advsimd.S",
127                "string/aarch64/memcpy-sve.S",
128                "string/aarch64/memcpy.S",
129                "string/aarch64/memrchr.S",
130                "string/aarch64/memset.S",
131                "string/aarch64/stpcpy-sve.S",
132                "string/aarch64/stpcpy.S",
133                "string/aarch64/strchrnul-mte.S",
134                "string/aarch64/strchrnul-sve.S",
135                "string/aarch64/strchrnul.S",
136                "string/aarch64/strchr-mte.S",
137                "string/aarch64/strchr-sve.S",
138                "string/aarch64/strchr.S",
139                "string/aarch64/strcmp-sve.S",
140                "string/aarch64/strcmp.S",
141                "string/aarch64/strcpy-sve.S",
142                "string/aarch64/strcpy.S",
143                "string/aarch64/strlen-mte.S",
144                "string/aarch64/strlen-sve.S",
145                "string/aarch64/strlen.S",
146                "string/aarch64/strncmp-sve.S",
147                "string/aarch64/strncmp.S",
148                "string/aarch64/strnlen-sve.S",
149                "string/aarch64/strnlen.S",
150                "string/aarch64/strrchr-mte.S",
151                "string/aarch64/strrchr-sve.S",
152                "string/aarch64/strrchr.S",
153            ],
154            asflags: [
155                "-march=armv8-a+sve",
156            ]
157        },
158    },
159}
160
161// Memory intrinsics for bare-metal Rust binaries.
162cc_library_static {
163    name: "libarm-optimized-routines-mem",
164    nocrt: true,
165    system_shared_libs: [],
166    stl: "none",
167    sanitize: {
168        hwaddress: false,
169    },
170    arch: {
171        arm64: {
172            srcs: [
173                "string/aarch64/memchr.S",
174                "string/aarch64/memcmp.S",
175                "string/aarch64/memcpy.S",
176                "string/aarch64/memrchr.S",
177                "string/aarch64/memset.S",
178                "string/aarch64/stpcpy.S",
179                "string/aarch64/strchr.S",
180                "string/aarch64/strchrnul.S",
181                "string/aarch64/strcmp.S",
182                "string/aarch64/strcpy.S",
183                "string/aarch64/strlen.S",
184                "string/aarch64/strncmp.S",
185                "string/aarch64/strnlen.S",
186                "string/aarch64/strrchr.S",
187            ],
188            asflags: [
189                "-D__memchr_aarch64=memchr",
190                "-D__memcmp_aarch64=memcmp",
191                "-D__memcpy_aarch64=memcpy",
192                "-D__memmove_aarch64=memmove",
193                "-D__memrchr_aarch64=memrchr",
194                "-D__memset_aarch64=memset",
195                "-D__stpcpy_aarch64=stpcpy",
196                "-D__strchr_aarch64=strchr",
197                "-D__strchrnul_aarch64=strchrnul",
198                "-D__strcmp_aarch64=strcmp",
199                "-D__strcpy_aarch64=strcpy",
200                "-D__strlen_aarch64=strlen",
201                "-D__strncmp_aarch64=strncmp",
202                "-D__strnlen_aarch64=strnlen",
203                "-D__strrchr_aarch64=strrchr",
204            ],
205        },
206    },
207    visibility: ["//bionic/libc"],
208}
209
210// adb shell "/data/nativetest64/mathtest/mathtest /data/nativetest64/mathtest/test/testcases/directed/*"
211// adb shell "/data/nativetest/mathtest/mathtest /data/nativetest/mathtest/test/testcases/directed/*"
212cc_test {
213    name: "mathtest",
214    defaults: ["arm-optimized-routines-defaults"],
215    gtest: false,
216    cflags: ["-Wno-missing-braces"],
217    srcs: ["math/test/mathtest.c"],
218    data: ["math/test/testcases/directed/*.tst"],
219    target: {
220        darwin: {
221            enabled: false,
222        },
223        linux_bionic: {
224            enabled: true,
225        },
226    },
227}
228
229cc_test {
230    name: "ulp",
231    defaults: ["arm-optimized-routines-defaults"],
232    gtest: false,
233
234    // https://github.com/ARM-software/optimized-routines/issues/53
235    local_include_dirs: ["math/"],
236
237    srcs: ["math/test/ulp.c"],
238    data: ["math/test/runulp.sh"],
239}
240
241sh_test {
242    name: "arm-optimized-routines-tests",
243    src: "run-arm-optimized-routines-tests-on-android.sh",
244    filename: "run-arm-optimized-routines-tests-on-android.sh",
245    test_suites: ["general-tests"],
246    host_supported: true,
247    device_supported: false,
248    require_root: true,
249    target_required: [
250        "mathtest",
251        "ulp",
252    ],
253}
254