From ffd4582b8643da0a25612f8242b305a0ebbdf456 Mon Sep 17 00:00:00 2001 From: Rupert Shuttleworth Date: Fri, 14 May 2021 03:02:34 -0400 Subject: [PATCH] Add cc_prebuilt_library helpers for use by the llvm_prebuilt_library_static converter. Test: bazel build //prebuilts/clang/host/linux-x86:prebuilt_libFuzzer Test: bazel build //prebuilts/clang/host/linux-x86:prebuilt_libomp Test: bazel build //prebuilts/clang/host/linux-x86:prebuilt_libunwind Test: bazel build //prebuilts/clang/host/linux-x86:prebuilt_libunwind-exported Change-Id: I9343e19a149b62785e8ee3096254776c19675032 --- bazel/properties.go | 26 +++---- bp2build/cc_library_conversion_test.go | 6 +- bp2build/cc_library_static_conversion_test.go | 12 +-- cc/bp2build.go | 73 ++++++++++++++++++- 4 files changed, 93 insertions(+), 24 deletions(-) diff --git a/bazel/properties.go b/bazel/properties.go index b9d6ead59..1ff4cd3ba 100644 --- a/bazel/properties.go +++ b/bazel/properties.go @@ -307,19 +307,19 @@ var ( } PlatformTargetMap = map[string]string{ - TARGET_ANDROID_ARM: "//build/bazel/platforms:android_arm", - TARGET_ANDROID_ARM64: "//build/bazel/platforms:android_arm64", - TARGET_ANDROID_X86: "//build/bazel/platforms:android_x86", - TARGET_ANDROID_X86_64: "//build/bazel/platforms:android_x86_64", - TARGET_DARWIN_X86_64: "//build/bazel/platforms:darwin_x86_64", - TARGET_FUCHSIA_ARM64: "//build/bazel/platforms:fuchsia_arm64", - TARGET_FUCHSIA_X86_64: "//build/bazel/platforms:fuchsia_x86_64", - TARGET_LINUX_X86: "//build/bazel/platforms:linux_glibc_x86", - TARGET_LINUX_x86_64: "//build/bazel/platforms:linux_glibc_x86_64", - TARGET_LINUX_BIONIC_ARM64: "//build/bazel/platforms:linux_bionic_arm64", - TARGET_LINUX_BIONIC_X86_64: "//build/bazel/platforms:linux_bionic_x86_64", - TARGET_WINDOWS_X86: "//build/bazel/platforms:windows_x86", - TARGET_WINDOWS_X86_64: "//build/bazel/platforms:windows_x86_64", + TARGET_ANDROID_ARM: "//build/bazel/platforms/os_arch:android_arm", + TARGET_ANDROID_ARM64: "//build/bazel/platforms/os_arch:android_arm64", + TARGET_ANDROID_X86: "//build/bazel/platforms/os_arch:android_x86", + TARGET_ANDROID_X86_64: "//build/bazel/platforms/os_arch:android_x86_64", + TARGET_DARWIN_X86_64: "//build/bazel/platforms/os_arch:darwin_x86_64", + TARGET_FUCHSIA_ARM64: "//build/bazel/platforms/os_arch:fuchsia_arm64", + TARGET_FUCHSIA_X86_64: "//build/bazel/platforms/os_arch:fuchsia_x86_64", + TARGET_LINUX_X86: "//build/bazel/platforms/os_arch:linux_glibc_x86", + TARGET_LINUX_x86_64: "//build/bazel/platforms/os_arch:linux_glibc_x86_64", + TARGET_LINUX_BIONIC_ARM64: "//build/bazel/platforms/os_arch:linux_bionic_arm64", + TARGET_LINUX_BIONIC_X86_64: "//build/bazel/platforms/os_arch:linux_bionic_x86_64", + TARGET_WINDOWS_X86: "//build/bazel/platforms/os_arch:windows_x86", + TARGET_WINDOWS_X86_64: "//build/bazel/platforms/os_arch:windows_x86_64", CONDITIONS_DEFAULT: ConditionsDefaultSelectKey, // The default condition of an os select map. } diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go index 49f1f42ba..b87d71330 100644 --- a/bp2build/cc_library_conversion_test.go +++ b/bp2build/cc_library_conversion_test.go @@ -497,7 +497,7 @@ cc_library_static { name: "android_dep_for_shared" } "//build/bazel/platforms/os:android": ["-DANDROID_SHARED"], "//conditions:default": [], }) + select({ - "//build/bazel/platforms:android_arm": ["-DANDROID_ARM_SHARED"], + "//build/bazel/platforms/os_arch:android_arm": ["-DANDROID_ARM_SHARED"], "//conditions:default": [], }), shared_srcs = ["sharedonly.cpp"] + select({ @@ -844,8 +844,8 @@ func TestCcLibraryLabelAttributeGetTargetProperties(t *testing.T) { ], srcs = ["a.cpp"], version_script = select({ - "//build/bazel/platforms:android_arm": "android_arm.map", - "//build/bazel/platforms:linux_bionic_arm64": "linux_bionic_arm64.map", + "//build/bazel/platforms/os_arch:android_arm": "android_arm.map", + "//build/bazel/platforms/os_arch:linux_bionic_arm64": "linux_bionic_arm64.map", "//conditions:default": None, }), )`}, diff --git a/bp2build/cc_library_static_conversion_test.go b/bp2build/cc_library_static_conversion_test.go index 770925466..90146bb89 100644 --- a/bp2build/cc_library_static_conversion_test.go +++ b/bp2build/cc_library_static_conversion_test.go @@ -1282,14 +1282,14 @@ cc_library_static { "//build/bazel/platforms/os:android": ["android_src.c"], "//conditions:default": [], }) + select({ - "//build/bazel/platforms:android_arm": ["android_arm_src.c"], - "//build/bazel/platforms:android_arm64": ["android_arm64_src.c"], - "//build/bazel/platforms:android_x86": ["android_x86_src.c"], - "//build/bazel/platforms:android_x86_64": ["android_x86_64_src.c"], + "//build/bazel/platforms/os_arch:android_arm": ["android_arm_src.c"], + "//build/bazel/platforms/os_arch:android_arm64": ["android_arm64_src.c"], + "//build/bazel/platforms/os_arch:android_x86": ["android_x86_src.c"], + "//build/bazel/platforms/os_arch:android_x86_64": ["android_x86_64_src.c"], "//conditions:default": [], }) + select({ - "//build/bazel/platforms:linux_bionic_arm64": ["linux_bionic_arm64_src.c"], - "//build/bazel/platforms:linux_bionic_x86_64": ["linux_bionic_x86_64_src.c"], + "//build/bazel/platforms/os_arch:linux_bionic_arm64": ["linux_bionic_arm64_src.c"], + "//build/bazel/platforms/os_arch:linux_bionic_x86_64": ["linux_bionic_x86_64_src.c"], "//conditions:default": [], }), )`}, diff --git a/cc/bp2build.go b/cc/bp2build.go index 5d024f865..f911c4246 100644 --- a/cc/bp2build.go +++ b/cc/bp2build.go @@ -266,6 +266,66 @@ func bp2buildParseStaticOrSharedProps(ctx android.TopDownMutatorContext, module return attrs } +// Convenience struct to hold all attributes parsed from prebuilt properties. +type prebuiltAttributes struct { + Src bazel.LabelAttribute +} + +func Bp2BuildParsePrebuiltLibraryProps(ctx android.TopDownMutatorContext, module *Module) prebuiltAttributes { + prebuiltLibraryLinker := module.linker.(*prebuiltLibraryLinker) + prebuiltLinker := prebuiltLibraryLinker.prebuiltLinker + + var srcLabelAttribute bazel.LabelAttribute + + if len(prebuiltLinker.properties.Srcs) > 1 { + ctx.ModuleErrorf("Bp2BuildParsePrebuiltLibraryProps: Expected at most once source file\n") + } + + if len(prebuiltLinker.properties.Srcs) == 1 { + srcLabelAttribute.Value = android.BazelLabelForModuleSrcSingle(ctx, prebuiltLinker.properties.Srcs[0]) + for arch, props := range module.GetArchProperties(ctx, &prebuiltLinkerProperties{}) { + if prebuiltLinkerProperties, ok := props.(*prebuiltLinkerProperties); ok { + if len(prebuiltLinkerProperties.Srcs) > 1 { + ctx.ModuleErrorf("Bp2BuildParsePrebuiltLibraryProps: Expected at most once source file for arch %s\n", arch.Name) + } + if len(prebuiltLinkerProperties.Srcs) == 1 { + srcLabelAttribute.SetValueForArch(arch.Name, android.BazelLabelForModuleSrcSingle(ctx, prebuiltLinkerProperties.Srcs[0])) + } + } + } + } + + for os, targetProperties := range module.GetTargetProperties(ctx, &prebuiltLinkerProperties{}) { + if prebuiltLinkerProperties, ok := targetProperties.Properties.(*prebuiltLinkerProperties); ok { + if len(prebuiltLinkerProperties.Srcs) > 1 { + ctx.ModuleErrorf("Bp2BuildParsePrebuiltLibraryProps: Expected at most once source file for os %s\n", os.Name) + + } + + if len(prebuiltLinkerProperties.Srcs) == 1 { + srcLabelAttribute.SetOsValueForTarget(os.Name, android.BazelLabelForModuleSrcSingle(ctx, prebuiltLinkerProperties.Srcs[0])) + } + } + for arch, archProperties := range targetProperties.ArchProperties { + if prebuiltLinkerProperties, ok := archProperties.(*prebuiltLinkerProperties); ok { + if len(prebuiltLinkerProperties.Srcs) > 1 { + ctx.ModuleErrorf("Bp2BuildParsePrebuiltLibraryProps: Expected at most once source file for os_arch %s_%s\n", os.Name, arch.Name) + + } + + if len(prebuiltLinkerProperties.Srcs) == 1 { + srcLabelAttribute.SetOsArchValueForTarget(os.Name, arch.Name, android.BazelLabelForModuleSrcSingle(ctx, prebuiltLinkerProperties.Srcs[0])) + } + } + + } + } + + return prebuiltAttributes{ + Src: srcLabelAttribute, + } +} + // Convenience struct to hold all attributes parsed from compiler properties. type compilerAttributes struct { // Options for all languages @@ -633,11 +693,20 @@ func bp2BuildMakePathsRelativeToModule(ctx android.BazelConversionPathContext, p return relativePaths } -// bp2BuildParseExportedIncludes creates a string list attribute contains the -// exported included directories of a module. func bp2BuildParseExportedIncludes(ctx android.TopDownMutatorContext, module *Module) bazel.StringListAttribute { libraryDecorator := module.linker.(*libraryDecorator) + return bp2BuildParseExportedIncludesHelper(ctx, module, libraryDecorator) +} +func Bp2BuildParseExportedIncludesForPrebuiltLibrary(ctx android.TopDownMutatorContext, module *Module) bazel.StringListAttribute { + prebuiltLibraryLinker := module.linker.(*prebuiltLibraryLinker) + libraryDecorator := prebuiltLibraryLinker.libraryDecorator + return bp2BuildParseExportedIncludesHelper(ctx, module, libraryDecorator) +} + +// bp2BuildParseExportedIncludes creates a string list attribute contains the +// exported included directories of a module. +func bp2BuildParseExportedIncludesHelper(ctx android.TopDownMutatorContext, module *Module, libraryDecorator *libraryDecorator) bazel.StringListAttribute { // Export_system_include_dirs and export_include_dirs are already module dir // relative, so they don't need to be relativized like include_dirs, which // are root-relative.