Files
android_external_libcxx/Android.bp
Cole Faust f45e673a55 Add targets of symlinks to genrule's sources
A change is being made to sbox so that symlinks aren't resolved
before being copied into the sandbox. This requires that the targets
of the symlinks are also added to the sandbox.

Bug: 307824623
Test: m libc_musl_sysroot_libc++_headers with aosp/2850015
Change-Id: Idc46c38a2c92826b52d82add8221c69c2f1394fe
2023-11-29 13:43:02 -08:00

322 lines
9.2 KiB
Plaintext

//
// Copyright (C) 2014 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// NOTE: This project is out of date. See http://b/175635923 for details. Until
// that is resolved it is not possible for us to update or expand access to
// std::filesystem.
package {
default_applicable_licenses: ["external_libcxx_license"],
}
// Added automatically by a large-scale-change that took the approach of
// 'apply every license found to every target'. While this makes sure we respect
// every license restriction, it may not be entirely correct.
//
// e.g. GPL in an MIT project might only apply to the contrib/ directory.
//
// Please consider splitting the single license below into multiple licenses,
// taking care not to lose any license_kind information, and overriding the
// default license using the 'licenses: [...]' property on targets as needed.
//
// For unused files, consider creating a 'fileGroup' with "//visibility:private"
// to attach the license to, and including a comment whether the files may be
// used in the current project.
// See: http://go/android-license-faq
license {
name: "external_libcxx_license",
visibility: [":__subpackages__"],
license_kinds: [
"SPDX-license-identifier-Apache-2.0",
"SPDX-license-identifier-BSD",
"SPDX-license-identifier-MIT",
"SPDX-license-identifier-NCSA",
],
license_text: [
"LICENSE.TXT",
],
}
cc_defaults {
name: "libc++ defaults",
host_supported: true,
local_include_dirs: ["include"],
export_include_dirs: ["include"],
cflags: ["-Wall", "-Werror", "-Wno-unused-parameter"],
cppflags: [
"-std=c++14",
"-fexceptions",
"-DLIBCXX_BUILDING_LIBCXXABI",
"-D_LIBCPP_BUILDING_LIBRARY",
],
rtti: true,
stl: "none",
target: {
linux_bionic: {
enabled: true,
},
windows: {
enabled: true,
cflags: [
"-D_LIBCPP_HAS_THREAD_API_WIN32",
"-D_LIBCXXABI_BUILDING_LIBRARY",
"-D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS",
"-D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS",
"-UWIN32_LEAN_AND_MEAN",
],
},
},
}
// host + device static lib
cc_library_static {
name: "libc++_static",
defaults: ["libc++ defaults"],
vendor_available: true,
product_available: true,
ramdisk_available: true,
vendor_ramdisk_available: true,
recovery_available: true,
apex_available: [
"//apex_available:platform",
"//apex_available:anyapex",
],
// being part of updatable apexes, this should work on older releases
min_sdk_version: "apex_inherit",
// sdk_version normally isn't needed as only the platform variant
// is used, except on riscv64 which doesn't have an NDK libc++ and
// reuses this module for sdk variants.
sdk_version: "current",
native_bridge_supported: true,
srcs: [
"src/algorithm.cpp",
"src/any.cpp",
"src/bind.cpp",
"src/charconv.cpp",
"src/chrono.cpp",
"src/condition_variable.cpp",
"src/debug.cpp",
"src/exception.cpp",
"src/future.cpp",
"src/hash.cpp",
"src/ios.cpp",
"src/iostream.cpp",
"src/locale.cpp",
"src/memory.cpp",
"src/mutex.cpp",
"src/new.cpp",
"src/optional.cpp",
"src/random.cpp",
"src/regex.cpp",
"src/shared_mutex.cpp",
"src/stdexcept.cpp",
"src/string.cpp",
"src/strstream.cpp",
"src/system_error.cpp",
"src/thread.cpp",
"src/typeinfo.cpp",
"src/utility.cpp",
"src/valarray.cpp",
"src/variant.cpp",
"src/vector.cpp",
],
whole_static_libs: [
"libc++abi",
],
target: {
windows: {
srcs: [
"src/support/win32/*.cpp",
]
},
},
}
// host + device dynamic lib
cc_library_shared {
name: "libc++",
host_supported: true,
vendor_available: true,
product_available: true,
native_bridge_supported: true,
vndk: {
enabled: true,
support_system_process: true,
},
ramdisk_available: true,
vendor_ramdisk_available: true,
recovery_available: true,
apex_available: [
"//apex_available:platform",
"//apex_available:anyapex",
],
// being part of updatable apexes, this should work on older releases
min_sdk_version: "apex_inherit",
// sdk_version normally isn't needed as only the platform variant
// is used, except on riscv64 which doesn't have an NDK libc++ and
// reuses this module for sdk variants.
sdk_version: "current",
whole_static_libs: ["libc++_static"],
stl: "none",
afdo: true,
target: {
darwin: {
// TODO: LLD does not implement force_symbols_weak_list or
// force_symbols_not_weak_list. Opt out and keep using ld64.
use_clang_lld: false,
unexported_symbols_list: "lib/libc++unexp.exp",
force_symbols_not_weak_list: "lib/notweak.exp",
force_symbols_weak_list: "lib/weak.exp",
ldflags: [
"-Wl,-undefined,dynamic_lookup",
],
},
linux_bionic: {
enabled: true,
},
},
}
cc_library_static {
name: "libc++experimental",
defaults: ["libc++ defaults"],
srcs: [
"src/experimental/memory_resource.cpp",
],
}
// Not available to vendor modules until libc++ is updated and this library is
// merged into libc++ proper.
// Follow http://b/175635923 for progress.
cc_library_static {
name: "libc++fs",
ramdisk_available: true,
recovery_available: true,
apex_available: [
"//apex_available:platform",
"com.android.art",
"com.android.art.debug",
"com.android.btservices",
],
// being part of updatable apexes, this should work on older releases
min_sdk_version: "apex_inherit",
defaults: ["libc++ defaults"],
srcs: [
"src/filesystem/directory_iterator.cpp",
"src/filesystem/operations.cpp",
],
multilib: {
lib32: {
// off_t usage is constrained to within the libc++ source (not the
// headers), so we can build the filesystem library with a 64-bit
// off_t on LP32 to get large file support without needing all users
// of the library to match.
cflags: ["-D_FILE_OFFSET_BITS=64"],
},
},
target: {
windows: {
enabled: false,
},
},
}
// This target is used to extract the build commands for a test executable.
// See run_tests.py.
cc_binary {
name: "libcxx_test_template",
srcs: [
"libcxx_test_template.cpp",
],
cppflags: [
"-fsized-deallocation",
"-fexceptions",
"-Wno-format-zero-length",
"-Wno-implicit-fallthrough",
"-Wno-non-virtual-dtor",
"-Wno-return-stack-address",
"-Wno-unused-local-typedef",
"-UNDEBUG",
// Optimization is causing relocation for nothrow new to be thrown away.
// http://llvm.org/bugs/show_bug.cgi?id=21421
"-O0",
],
static_libs: [
"libc++experimental",
"libc++fs",
],
rtti: true,
local_include_dirs: [
"test/support",
],
multilib: {
lib32: {
suffix: "32",
},
lib64: {
suffix: "64",
},
},
compile_multilib: "both",
host_supported: true,
target: {
linux: {
ldflags: [
// This makes the tests run a little faster.
"-Wl,--strip-all",
],
},
},
gnu_extensions: false,
cpp_std: "c++17",
}
// Export libc++ headers for inclusion in the musl sysroot.
genrule {
name: "libc_musl_sysroot_libc++_headers",
visibility: ["//external/musl"],
srcs: [
"LICENSE.TXT",
"NOTICE",
"include/**/*",
":libcxxabi_headers",
],
out: ["libc_musl_sysroot_libc++_headers.zip"],
tools: [
"soong_zip",
"zip2zip",
],
cmd: "LIBCXX_DIR=$$(dirname $(location NOTICE)) && " +
"$(location soong_zip) -o $(genDir)/sysroot.zip -symlinks=false" +
// NOTICE
" -j -f $(location NOTICE) " +
// headers
" -P include/c++ " +
" -C $${LIBCXX_DIR}/include " +
" -D $${LIBCXX_DIR}/include " +
" && " +
"$(location zip2zip) -i $(genDir)/sysroot.zip -o $(out) " +
" -x include/c++/CMakeLists.txt" +
" -x include/c++/module.modulemap " +
" include/**/*:include " +
" NOTICE:NOTICE.libc++",
}