xref: /aosp_15_r20/external/llvm-libc/Android.bp (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1*71db0c75SAndroid Build Coastguard Worker// https://ci.android.com/builds/latest/branches/aosp-build-tools/targets/linux/view/soong_build.html
2*71db0c75SAndroid Build Coastguard Worker
3*71db0c75SAndroid Build Coastguard Workercc_defaults {
4*71db0c75SAndroid Build Coastguard Worker    name: "llvmlibc_defaults",
5*71db0c75SAndroid Build Coastguard Worker    defaults: [
6*71db0c75SAndroid Build Coastguard Worker        // b/379681564: Bionic's dependencies all must support linux-bionic,
7*71db0c75SAndroid Build Coastguard Worker        // which is not an enabled target by default.
8*71db0c75SAndroid Build Coastguard Worker        "linux_bionic_supported",
9*71db0c75SAndroid Build Coastguard Worker    ],
10*71db0c75SAndroid Build Coastguard Worker    cppflags: [
11*71db0c75SAndroid Build Coastguard Worker        // Necessary to build.
12*71db0c75SAndroid Build Coastguard Worker        "-DLIBC_NAMESPACE=llvmlibc",
13*71db0c75SAndroid Build Coastguard Worker    ],
14*71db0c75SAndroid Build Coastguard Worker    arch: {
15*71db0c75SAndroid Build Coastguard Worker        // TODO: https://github.com/llvm/llvm-project/issues/93738
16*71db0c75SAndroid Build Coastguard Worker        // llvm-libc does not (yet) support --target=armv7a-linux -mthumb
17*71db0c75SAndroid Build Coastguard Worker        // Build in ARM mode, but perhaps revisit this in the future.
18*71db0c75SAndroid Build Coastguard Worker        arm: {
19*71db0c75SAndroid Build Coastguard Worker            instruction_set: "arm",
20*71db0c75SAndroid Build Coastguard Worker        },
21*71db0c75SAndroid Build Coastguard Worker    },
22*71db0c75SAndroid Build Coastguard Worker}
23*71db0c75SAndroid Build Coastguard Worker
24*71db0c75SAndroid Build Coastguard Workercc_library_static {
25*71db0c75SAndroid Build Coastguard Worker    name: "llvmlibc",
26*71db0c75SAndroid Build Coastguard Worker    defaults: ["llvmlibc_defaults"],
27*71db0c75SAndroid Build Coastguard Worker    visibility: [
28*71db0c75SAndroid Build Coastguard Worker        "//bionic/libc",
29*71db0c75SAndroid Build Coastguard Worker    ],
30*71db0c75SAndroid Build Coastguard Worker    include_dirs: [
31*71db0c75SAndroid Build Coastguard Worker        "external/llvm-libc",
32*71db0c75SAndroid Build Coastguard Worker    ],
33*71db0c75SAndroid Build Coastguard Worker    srcs: [
34*71db0c75SAndroid Build Coastguard Worker        "src/stdlib/bsearch.cpp",
35*71db0c75SAndroid Build Coastguard Worker        "src/string/memrchr.cpp",
36*71db0c75SAndroid Build Coastguard Worker        "src/string/strlcat.cpp",
37*71db0c75SAndroid Build Coastguard Worker        "src/string/strlcpy.cpp",
38*71db0c75SAndroid Build Coastguard Worker    ],
39*71db0c75SAndroid Build Coastguard Worker    cppflags: [
40*71db0c75SAndroid Build Coastguard Worker        // Necessary for non-namespaced exports.
41*71db0c75SAndroid Build Coastguard Worker        "-DLIBC_COPT_PUBLIC_PACKAGING",
42*71db0c75SAndroid Build Coastguard Worker        // TODO: remove when https://github.com/llvm/llvm-project/pull/116686 is
43*71db0c75SAndroid Build Coastguard Worker        // integrated.
44*71db0c75SAndroid Build Coastguard Worker        "-DLLVM_LIBC_FUNCTION_ATTR=__attribute__((visibility(\"default\")))",
45*71db0c75SAndroid Build Coastguard Worker    ],
46*71db0c75SAndroid Build Coastguard Worker    // No C++ runtime.
47*71db0c75SAndroid Build Coastguard Worker    stl: "none",
48*71db0c75SAndroid Build Coastguard Worker    // No crt_begin and crt_end.
49*71db0c75SAndroid Build Coastguard Worker    nocrt: true,
50*71db0c75SAndroid Build Coastguard Worker    // Needs to be unset from the default value in order to avoid creating a
51*71db0c75SAndroid Build Coastguard Worker    // cyclic dependency between llvm-libc and bionic's libc.
52*71db0c75SAndroid Build Coastguard Worker    system_shared_libs: [],
53*71db0c75SAndroid Build Coastguard Worker
54*71db0c75SAndroid Build Coastguard Worker    // Bionic's libc's dependencies must have these set, or the build will fail
55*71db0c75SAndroid Build Coastguard Worker    // due to missing a "ramdisk", "vendor_ramdisk", and "recovery" variants.
56*71db0c75SAndroid Build Coastguard Worker    native_bridge_supported: true,
57*71db0c75SAndroid Build Coastguard Worker    ramdisk_available: true,
58*71db0c75SAndroid Build Coastguard Worker    recovery_available: true,
59*71db0c75SAndroid Build Coastguard Worker    vendor_ramdisk_available: true,
60*71db0c75SAndroid Build Coastguard Worker
61*71db0c75SAndroid Build Coastguard Worker    // Bionic's dependencies must also set this.
62*71db0c75SAndroid Build Coastguard Worker    apex_available: ["com.android.runtime"],
63*71db0c75SAndroid Build Coastguard Worker
64*71db0c75SAndroid Build Coastguard Worker    // When llvm-libc includes <stdlib.h>, use bionic's headers for these.
65*71db0c75SAndroid Build Coastguard Worker    header_libs: ["libc_headers"],
66*71db0c75SAndroid Build Coastguard Worker
67*71db0c75SAndroid Build Coastguard Worker    // TODO(b/378117947): push these into non-arch-specific `srcs` as llvm-libc
68*71db0c75SAndroid Build Coastguard Worker    // functions are rolled out.
69*71db0c75SAndroid Build Coastguard Worker    arch: {
70*71db0c75SAndroid Build Coastguard Worker        arm64: {
71*71db0c75SAndroid Build Coastguard Worker            // These have optimized baseline and vectorized impls from
72*71db0c75SAndroid Build Coastguard Worker            // arm-optimized-routines, and aren't yet heavily optimized by
73*71db0c75SAndroid Build Coastguard Worker            // llvm-libc.
74*71db0c75SAndroid Build Coastguard Worker            exclude_srcs: [
75*71db0c75SAndroid Build Coastguard Worker                "src/string/memrchr.cpp",
76*71db0c75SAndroid Build Coastguard Worker            ],
77*71db0c75SAndroid Build Coastguard Worker        },
78*71db0c75SAndroid Build Coastguard Worker        x86_64: {
79*71db0c75SAndroid Build Coastguard Worker            srcs: [
80*71db0c75SAndroid Build Coastguard Worker                "src/string/memchr.cpp",
81*71db0c75SAndroid Build Coastguard Worker                "src/string/strchr.cpp",
82*71db0c75SAndroid Build Coastguard Worker                "src/string/strchrnul.cpp",
83*71db0c75SAndroid Build Coastguard Worker                "src/string/strnlen.cpp",
84*71db0c75SAndroid Build Coastguard Worker                "src/string/strrchr.cpp",
85*71db0c75SAndroid Build Coastguard Worker            ],
86*71db0c75SAndroid Build Coastguard Worker        },
87*71db0c75SAndroid Build Coastguard Worker    },
88*71db0c75SAndroid Build Coastguard Worker}
89*71db0c75SAndroid Build Coastguard Worker
90*71db0c75SAndroid Build Coastguard Workercc_test_library {
91*71db0c75SAndroid Build Coastguard Worker    name: "llvmlibc_test_harness",
92*71db0c75SAndroid Build Coastguard Worker    defaults: ["llvmlibc_defaults"],
93*71db0c75SAndroid Build Coastguard Worker    srcs: [
94*71db0c75SAndroid Build Coastguard Worker        "test/UnitTest/LibcTest.cpp",
95*71db0c75SAndroid Build Coastguard Worker        "test/UnitTest/TestLogger.cpp",
96*71db0c75SAndroid Build Coastguard Worker        "test/UnitTest/LibcTestMain.cpp",
97*71db0c75SAndroid Build Coastguard Worker    ],
98*71db0c75SAndroid Build Coastguard Worker}
99*71db0c75SAndroid Build Coastguard Worker
100*71db0c75SAndroid Build Coastguard Workercc_defaults {
101*71db0c75SAndroid Build Coastguard Worker    name: "llvmlibc_test_defaults",
102*71db0c75SAndroid Build Coastguard Worker    defaults: ["llvmlibc_defaults"],
103*71db0c75SAndroid Build Coastguard Worker    static_libs: [
104*71db0c75SAndroid Build Coastguard Worker        "llvmlibc",
105*71db0c75SAndroid Build Coastguard Worker        "llvmlibc_test_harness",
106*71db0c75SAndroid Build Coastguard Worker    ],
107*71db0c75SAndroid Build Coastguard Worker    // Do not try to link against gtest. llvm-libc has its own pseudo-gtest
108*71db0c75SAndroid Build Coastguard Worker    // framework.
109*71db0c75SAndroid Build Coastguard Worker    gtest: false,
110*71db0c75SAndroid Build Coastguard Worker    // Needed to avoid the diagnostic:
111*71db0c75SAndroid Build Coastguard Worker    // WARNING: Please add {test name} to either suite:
112*71db0c75SAndroid Build Coastguard Worker    // ['device-tests', 'general-tests'] for this TEST_MAPPING file to work
113*71db0c75SAndroid Build Coastguard Worker    // with TreeHugger.
114*71db0c75SAndroid Build Coastguard Worker    test_suites: ["device-tests"],
115*71db0c75SAndroid Build Coastguard Worker}
116*71db0c75SAndroid Build Coastguard Worker
117*71db0c75SAndroid Build Coastguard Workercc_test {
118*71db0c75SAndroid Build Coastguard Worker    // TODO: rename test to simply llvmlibc_tests. Needs to go through a post
119*71db0c75SAndroid Build Coastguard Worker    // submit cycle before can be renamed for presubmit.
120*71db0c75SAndroid Build Coastguard Worker    name: "llvmlibc_stdlib_bsearch_test",
121*71db0c75SAndroid Build Coastguard Worker    defaults: ["llvmlibc_test_defaults"],
122*71db0c75SAndroid Build Coastguard Worker    srcs: [
123*71db0c75SAndroid Build Coastguard Worker        "test/src/stdlib/bsearch_test.cpp",
124*71db0c75SAndroid Build Coastguard Worker        "test/src/string/memrchr_test.cpp",
125*71db0c75SAndroid Build Coastguard Worker        "test/src/string/strlcat_test.cpp",
126*71db0c75SAndroid Build Coastguard Worker        "test/src/string/strlcpy_test.cpp",
127*71db0c75SAndroid Build Coastguard Worker    ],
128*71db0c75SAndroid Build Coastguard Worker    arch: {
129*71db0c75SAndroid Build Coastguard Worker        arm64: {
130*71db0c75SAndroid Build Coastguard Worker            // Match exclusions in ':llvmlibc' for arm64.
131*71db0c75SAndroid Build Coastguard Worker            exclude_srcs: [
132*71db0c75SAndroid Build Coastguard Worker                "test/src/string/memrchr_test.cpp",
133*71db0c75SAndroid Build Coastguard Worker            ],
134*71db0c75SAndroid Build Coastguard Worker        },
135*71db0c75SAndroid Build Coastguard Worker        x86_64: {
136*71db0c75SAndroid Build Coastguard Worker            // TODO(b/378117947): push these into non-arch-specific `srcs` as
137*71db0c75SAndroid Build Coastguard Worker            // llvm-libc functions are rolled out.
138*71db0c75SAndroid Build Coastguard Worker            srcs: [
139*71db0c75SAndroid Build Coastguard Worker                "test/src/string/memchr_test.cpp",
140*71db0c75SAndroid Build Coastguard Worker                "test/src/string/strchr_test.cpp",
141*71db0c75SAndroid Build Coastguard Worker                "test/src/string/strchrnul_test.cpp",
142*71db0c75SAndroid Build Coastguard Worker                "test/src/string/strnlen_test.cpp",
143*71db0c75SAndroid Build Coastguard Worker                "test/src/string/strrchr_test.cpp",
144*71db0c75SAndroid Build Coastguard Worker            ],
145*71db0c75SAndroid Build Coastguard Worker        },
146*71db0c75SAndroid Build Coastguard Worker    },
147*71db0c75SAndroid Build Coastguard Worker}
148