| # NOTE: THIS FILE IS EXPERIMENTAL FOR THE BAZEL MIGRATION AND NOT USED FOR |
| # YOUR BUILDS CURRENTLY. |
| # |
| # It is not yet the source of truth for your build. If you're looking to modify |
| # the build file, modify the Android.bp file instead. Do *not* modify this file |
| # unless you have coordinated with the team managing the Soong to Bazel |
| # migration. |
| |
| package(default_visibility = ["//visibility:public"]) |
| |
| # Toolchain config |
| filegroup(name = "empty") |
| |
| load(":cc_toolchain_config.bzl", "android_cc_toolchain", "clang_version", "expand_feature_flags") |
| load(":cc_toolchain_constants.bzl", "generated_constants") |
| |
| # Different clang versions are configured here. |
| clang_version( |
| name = "clang", |
| directory = generated_constants.CLANG_DEFAULT_VERSION, |
| includes = [ |
| "lib64/clang/%s/include" % generated_constants.CLANG_DEFAULT_SHORT_VERSION, |
| ], |
| ) |
| |
| _LIBCLANG_RT_PREFIX = "%s/lib64/clang/%s/lib/linux" % ( |
| generated_constants.CLANG_DEFAULT_VERSION, |
| generated_constants.CLANG_DEFAULT_SHORT_VERSION, |
| ) |
| |
| _LIBCLANG_RT_PREBUILT_MAP = { |
| "//build/bazel/platforms/os_arch:android_arm": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-arm-android.a", |
| "//build/bazel/platforms/os_arch:android_arm64": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-aarch64-android.a", |
| "//build/bazel/platforms/os_arch:android_x86": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-i686-android.a", |
| "//build/bazel/platforms/os_arch:android_x86_64": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-x86_64-android.a", |
| "//build/bazel/platforms/os_arch:linux_bionic_x86_64": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-x86_64-android.a", |
| "//build/bazel/platforms/os_arch:linux_glibc_x86": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-i386.a", |
| "//build/bazel/platforms/os_arch:linux_glibc_x86_64": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-x86_64.a", |
| "//conditions:default": None, |
| } |
| |
| # x86_64 toolchain definition. |
| android_cc_toolchain( |
| name = "cc_toolchain_x86_64", |
| target_os = "android", |
| target_arch = "x86_64", |
| clang_version = ":clang", |
| clang_version_directory = generated_constants.CLANG_DEFAULT_VERSION, |
| libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:android_x86_64"], |
| linker_flags = generated_constants.X86_64ToolchainLdflags + generated_constants.X86_64Lldflags, |
| target_flags = [ |
| "--target=x86_64-linux-android10000", |
| ] + generated_constants.X86_64ToolchainCflags + |
| generated_constants.X86_64ArchVariantCflags[""] + |
| expand_feature_flags( |
| generated_constants.X86_64DefaultArchVariantFeatures, |
| generated_constants.X86_64ArchFeatureCflags, |
| ) + generated_constants.X86_64Cflags, |
| toolchain_identifier = "x86_64-toolchain", |
| ) |
| |
| # x86 toolchain definition. |
| android_cc_toolchain( |
| name = "cc_toolchain_x86", |
| target_os = "android", |
| target_arch = "x86", |
| clang_version = ":clang", |
| clang_version_directory = generated_constants.CLANG_DEFAULT_VERSION, |
| libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:android_x86"], |
| linker_flags = generated_constants.X86ToolchainLdflags + generated_constants.X86Lldflags, |
| target_flags = [ |
| "--target=i686-linux-android10000", |
| ] + generated_constants.X86ToolchainCflags + |
| generated_constants.X86ArchVariantCflags[""] + |
| expand_feature_flags( |
| generated_constants.X86_64DefaultArchVariantFeatures, |
| generated_constants.X86ArchFeatureCflags, |
| ) + generated_constants.X86Cflags, |
| toolchain_identifier = "x86-toolchain", |
| ) |
| |
| # arm64 toolchain definition. |
| android_cc_toolchain( |
| name = "cc_toolchain_arm64", |
| target_os = "android", |
| target_arch = "arm64", |
| clang_version = ":clang", |
| clang_version_directory = generated_constants.CLANG_DEFAULT_VERSION, |
| libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:android_arm64"], |
| linker_flags = generated_constants.Arm64Lldflags, |
| target_flags = [ |
| "--target=aarch64-linux-android10000", |
| ] + generated_constants.Arm64ArchVariantCflags["armv8-a"] + |
| generated_constants.Arm64CpuVariantCflags.get( |
| "", |
| default = [], |
| ) + generated_constants.Arm64Cflags, |
| toolchain_identifier = "arm64-toolchain", |
| ) |
| |
| # arm32 toolchain definition. |
| android_cc_toolchain( |
| name = "cc_toolchain_arm", |
| target_os = "android", |
| target_arch = "arm", |
| clang_version = ":clang", |
| clang_version_directory = generated_constants.CLANG_DEFAULT_VERSION, |
| libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:android_arm"], |
| linker_flags = generated_constants.ArmLldflags, |
| target_flags = ["--target=" + generated_constants.ArmClangTriple + "10000"] + |
| generated_constants.ArmToolchainCflags + |
| generated_constants.ArmArchVariantCflags["armv7-a-neon"] + |
| generated_constants.ArmCpuVariantCflags.get("", []) + |
| generated_constants.ArmCflags, |
| toolchain_identifier = "arm-toolchain", |
| ) |
| |
| # Toolchain to compile for the linux host. |
| # TODO(b/186628704): automatically generate from Soong. |
| android_cc_toolchain( |
| name = "cc_toolchain_x86_64_linux_host", |
| target_os = "linux_glibc", |
| target_arch = "x86_64", |
| clang_version = ":clang", |
| clang_version_directory = generated_constants.CLANG_DEFAULT_VERSION, |
| libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:linux_glibc_x86_64"], |
| linker_flags = [ |
| "-m64", |
| "-Wl,-z,noexecstack", |
| "-Wl,-z,relro", |
| "-Wl,-z,now", |
| "-Wl,--no-undefined-version", |
| ], |
| target_flags = [ |
| "-m64", |
| "-fdiagnostics-color", |
| "-Wa,--noexecstack", |
| "-fPIC", |
| "-U_FORTIFY_SOURCE", |
| "-D_FORTIFY_SOURCE=2", |
| "-fstack-protector", |
| # Workaround differences in inttypes.h between host and target. |
| # See bug 12708004. |
| "-D__STDC_FORMAT_MACROS", |
| "-D__STDC_CONSTANT_MACROS", |
| ], |
| toolchain_identifier = "x86_64-toolchain", |
| ) |
| |
| toolchain_type(name = "nocrt_toolchain") |
| |
| ARCHITECTURES = ["x86_64", "x86", "arm", "arm64"] |
| |
| # Device toolchains with crt libraries |
| [ |
| toolchain( |
| name = "cc_toolchain_%s_def" % arch, |
| exec_compatible_with = [ |
| "//build/bazel/platforms/arch:x86_64", |
| "//build/bazel/platforms/os:linux", |
| ], |
| target_compatible_with = [ |
| "//build/bazel/platforms/arch:%s" % arch, |
| "//build/bazel/platforms/os:android", |
| ], |
| toolchain = ":cc_toolchain_%s" % arch, |
| toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", |
| ) for arch in ARCHITECTURES |
| ] |
| |
| # Device toolchains without crt libraries |
| [ |
| toolchain( |
| name = "cc_toolchain_%s_nocrt_def" % arch, |
| exec_compatible_with = [ |
| "//build/bazel/platforms/arch:x86_64", |
| "//build/bazel/platforms/os:linux", |
| ], |
| target_compatible_with = [ |
| "//build/bazel/platforms/arch:%s" % arch, |
| "//build/bazel/platforms/os:android", |
| ], |
| toolchain = ":cc_toolchain_%s_nocrt" % arch, |
| toolchain_type = ":nocrt_toolchain", |
| ) for arch in ARCHITECTURES |
| ] |
| |
| # Host toolchains for linux x86_64 |
| [ |
| toolchain( |
| name = "%s_def" % toolchain_name, |
| exec_compatible_with = [ |
| "//build/bazel/platforms/arch:x86_64", |
| "//build/bazel/platforms/os:linux", |
| ], |
| target_compatible_with = [ |
| "//build/bazel/platforms/arch:x86_64", |
| "//build/bazel/platforms/os:linux", |
| ], |
| # TODO(b/181803350): Fix linux toolchain flag set, as the current flags are for android. |
| toolchain = toolchain_name, |
| toolchain_type = toolchain_type, |
| ) for (toolchain_name, toolchain_type) in |
| [ |
| ("cc_toolchain_x86_64_linux_host", "@bazel_tools//tools/cpp:toolchain_type"), |
| ("cc_toolchain_x86_64_linux_host_nocrt", "nocrt_toolchain"), |
| ] |
| ] |
| |
| cc_import( |
| name = "libclang_rt", |
| static_library = select(_LIBCLANG_RT_PREBUILT_MAP), |
| ) |
| |
| [alias( |
| name = "llvm-%s" % tool, |
| actual = generated_constants.CLANG_DEFAULT_VERSION + "/bin/llvm-%s" % tool, |
| visibility = ["//visibility:public"], |
| ) for tool in [ |
| "ar", |
| "readelf", |
| "objcopy", |
| "strip", |
| ]] |
| |
| # Test tools used by Bazel tests. |
| filegroup( |
| name = "test_tools", |
| srcs = [ |
| generated_constants.CLANG_DEFAULT_VERSION + "/bin/llvm-readelf", |
| generated_constants.CLANG_DEFAULT_VERSION + "/bin/llvm-nm", |
| ], |
| visibility = ["//build/bazel/tests:__subpackages__"], |
| ) |