• 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}
45
46cc_defaults {
47    name: "libarm-optimized-routines-defaults",
48    defaults: ["arm-optimized-routines-defaults"],
49    ramdisk_available: true,
50    vendor_ramdisk_available: true,
51    recovery_available: true,
52    native_bridge_supported: true,
53    apex_available: [
54        "//apex_available:platform",
55        "com.android.runtime",
56    ],
57
58    stl: "none",
59    target: {
60        bionic: {
61            static: {
62                system_shared_libs: [],
63            },
64            header_libs: ["libc_headers"],
65        },
66    },
67}
68
69cc_library_static {
70    name: "libarm-optimized-routines-math",
71    defaults: ["libarm-optimized-routines-defaults"],
72    exclude_srcs: [
73        // Provided by:
74        // bionic/libm/upstream-freebsd/lib/msun/src/s_erf.c
75        // bionic/libm/upstream-freebsd/lib/msun/src/s_erff.c
76        "math/erf.c",
77        "math/erf_data.c",
78        "math/erff.c",
79        "math/erff_data.c",
80    ],
81    srcs: [
82        "math/*.c",
83    ],
84
85    // arch-specific settings
86    arch: {
87        arm64: {
88            cflags: [
89                "-DHAVE_FAST_FMA=1",
90            ],
91        },
92    },
93
94    target: {
95        darwin: {
96            enabled: false,
97        },
98        linux_bionic: {
99            enabled: true,
100        },
101    },
102}
103
104cc_library_static {
105    name: "libarm-optimized-routines-string",
106    defaults: ["libarm-optimized-routines-defaults"],
107
108    arch: {
109        arm64: {
110            srcs: [
111                "string/aarch64/memchr-mte.S",
112                "string/aarch64/memchr-sve.S",
113                "string/aarch64/memchr.S",
114                "string/aarch64/memcmp-sve.S",
115                "string/aarch64/memcmp.S",
116                "string/aarch64/memcpy-advsimd.S",
117                "string/aarch64/memcpy-sve.S",
118                "string/aarch64/memcpy.S",
119                "string/aarch64/memrchr.S",
120                "string/aarch64/memset.S",
121                "string/aarch64/stpcpy-sve.S",
122                "string/aarch64/stpcpy.S",
123                "string/aarch64/strchrnul-mte.S",
124                "string/aarch64/strchrnul-sve.S",
125                "string/aarch64/strchrnul.S",
126                "string/aarch64/strchr-mte.S",
127                "string/aarch64/strchr-sve.S",
128                "string/aarch64/strchr.S",
129                "string/aarch64/strcmp-sve.S",
130                "string/aarch64/strcmp.S",
131                "string/aarch64/strcpy-sve.S",
132                "string/aarch64/strcpy.S",
133                "string/aarch64/strlen-mte.S",
134                "string/aarch64/strlen-sve.S",
135                "string/aarch64/strlen.S",
136                "string/aarch64/strncmp-sve.S",
137                "string/aarch64/strncmp.S",
138                "string/aarch64/strnlen-sve.S",
139                "string/aarch64/strnlen.S",
140                "string/aarch64/strrchr-mte.S",
141                "string/aarch64/strrchr-sve.S",
142                "string/aarch64/strrchr.S",
143            ],
144            asflags: [
145                "-march=armv8-a+sve",
146                "-D__memset_aarch64=memset",
147                "-D__memrchr_aarch64=memrchr",
148            ]
149        },
150    },
151}
152
153// Memory intrinsics for bare-metal Rust binaries.
154cc_library_static {
155    name: "libarm-optimized-routines-mem",
156    nocrt: true,
157    system_shared_libs: [],
158    stl: "none",
159    sanitize: {
160        hwaddress: false,
161    },
162    arch: {
163        arm64: {
164            srcs: [
165                "string/aarch64/memchr.S",
166                "string/aarch64/memcmp.S",
167                "string/aarch64/memcpy.S",
168                "string/aarch64/memrchr.S",
169                "string/aarch64/memset.S",
170                "string/aarch64/stpcpy.S",
171                "string/aarch64/strchr.S",
172                "string/aarch64/strchrnul.S",
173                "string/aarch64/strcmp.S",
174                "string/aarch64/strcpy.S",
175                "string/aarch64/strlen.S",
176                "string/aarch64/strncmp.S",
177                "string/aarch64/strnlen.S",
178                "string/aarch64/strrchr.S",
179            ],
180            asflags: [
181                "-D__memchr_aarch64=memchr",
182                "-D__memcmp_aarch64=memcmp",
183                "-D__memcpy_aarch64=memcpy",
184                "-D__memmove_aarch64=memmove",
185                "-D__memrchr_aarch64=memrchr",
186                "-D__memset_aarch64=memset",
187                "-D__stpcpy_aarch64=stpcpy",
188                "-D__strchr_aarch64=strchr",
189                "-D__strchrnul_aarch64=strchrnul",
190                "-D__strcmp_aarch64=strcmp",
191                "-D__strcpy_aarch64=strcpy",
192                "-D__strlen_aarch64=strlen",
193                "-D__strncmp_aarch64=strncmp",
194                "-D__strnlen_aarch64=strnlen",
195                "-D__strrchr_aarch64=strrchr",
196            ],
197        },
198    },
199    visibility: ["//bionic/libc"],
200}
201
202// adb shell "/data/nativetest64/mathtest/mathtest /data/nativetest64/mathtest/test/testcases/directed/*"
203// adb shell "/data/nativetest/mathtest/mathtest /data/nativetest/mathtest/test/testcases/directed/*"
204cc_test {
205    name: "mathtest",
206    defaults: ["arm-optimized-routines-defaults"],
207    gtest: false,
208    cflags: ["-Wno-missing-braces"],
209    srcs: ["math/test/mathtest.c"],
210    data: ["math/test/testcases/directed/*.tst"],
211    target: {
212        darwin: {
213            enabled: false,
214        },
215        linux_bionic: {
216            enabled: true,
217        },
218    },
219}
220
221cc_test {
222    name: "ulp",
223    defaults: ["arm-optimized-routines-defaults"],
224    gtest: false,
225
226    // https://github.com/ARM-software/optimized-routines/issues/53
227    local_include_dirs: ["math/"],
228
229    srcs: ["math/test/ulp.c"],
230    data: ["math/test/runulp.sh"],
231}
232
233sh_test {
234    name: "arm-optimized-routines-tests",
235    src: "run-arm-optimized-routines-tests-on-android.sh",
236    filename: "run-arm-optimized-routines-tests-on-android.sh",
237    test_suites: ["general-tests"],
238    host_supported: true,
239    device_supported: false,
240    require_root: true,
241    target_required: [
242        "mathtest",
243        "ulp",
244    ],
245}
246