2021-03-24 15:04:33 +01:00
|
|
|
// Copyright 2021 Google Inc. All rights reserved.
|
|
|
|
//
|
|
|
|
// 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.
|
|
|
|
|
|
|
|
package bp2build
|
|
|
|
|
|
|
|
import (
|
2021-09-17 13:38:09 +02:00
|
|
|
"fmt"
|
2021-08-23 18:10:00 +02:00
|
|
|
"testing"
|
|
|
|
|
2021-03-24 15:04:33 +01:00
|
|
|
"android/soong/android"
|
|
|
|
"android/soong/cc"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
// See cc/testing.go for more context
|
|
|
|
soongCcLibraryPreamble = `
|
|
|
|
cc_defaults {
|
2021-09-10 16:06:32 +02:00
|
|
|
name: "linux_bionic_supported",
|
2021-03-24 15:04:33 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
toolchain_library {
|
2021-09-10 16:06:32 +02:00
|
|
|
name: "libclang_rt.builtins-x86_64-android",
|
|
|
|
defaults: ["linux_bionic_supported"],
|
|
|
|
vendor_available: true,
|
|
|
|
vendor_ramdisk_available: true,
|
|
|
|
product_available: true,
|
|
|
|
recovery_available: true,
|
|
|
|
native_bridge_supported: true,
|
|
|
|
src: "",
|
2021-03-24 15:04:33 +01:00
|
|
|
}`
|
2021-09-28 15:19:17 +02:00
|
|
|
|
|
|
|
soongCcProtoLibraries = `
|
|
|
|
cc_library {
|
|
|
|
name: "libprotobuf-cpp-lite",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "libprotobuf-cpp-full",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}`
|
|
|
|
|
|
|
|
soongCcProtoPreamble = soongCcLibraryPreamble + soongCcProtoLibraries
|
2021-03-24 15:04:33 +01:00
|
|
|
)
|
|
|
|
|
2021-05-21 09:37:00 +02:00
|
|
|
func runCcLibraryTestCase(t *testing.T, tc bp2buildTestCase) {
|
2021-05-25 16:39:35 +02:00
|
|
|
t.Helper()
|
2021-05-21 09:37:00 +02:00
|
|
|
runBp2BuildTestCase(t, registerCcLibraryModuleTypes, tc)
|
|
|
|
}
|
|
|
|
|
|
|
|
func registerCcLibraryModuleTypes(ctx android.RegistrationContext) {
|
|
|
|
cc.RegisterCCBuildComponents(ctx)
|
2021-06-02 13:10:02 +02:00
|
|
|
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
|
2021-05-21 09:37:00 +02:00
|
|
|
ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory)
|
2021-06-11 00:20:06 +02:00
|
|
|
ctx.RegisterModuleType("cc_prebuilt_library_static", cc.PrebuiltStaticLibraryFactory)
|
2021-05-21 09:37:00 +02:00
|
|
|
ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
|
|
|
|
ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibrarySimple(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library - simple example",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-05-21 09:37:00 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"android.cpp": "",
|
2021-07-16 22:33:47 +02:00
|
|
|
"bionic.cpp": "",
|
2021-05-21 09:37:00 +02:00
|
|
|
"darwin.cpp": "",
|
|
|
|
// Refer to cc.headerExts for the supported header extensions in Soong.
|
|
|
|
"header.h": "",
|
|
|
|
"header.hh": "",
|
|
|
|
"header.hpp": "",
|
|
|
|
"header.hxx": "",
|
|
|
|
"header.h++": "",
|
|
|
|
"header.inl": "",
|
|
|
|
"header.inc": "",
|
|
|
|
"header.ipp": "",
|
|
|
|
"header.h.generic": "",
|
|
|
|
"impl.cpp": "",
|
|
|
|
"linux.cpp": "",
|
|
|
|
"x86.cpp": "",
|
|
|
|
"x86_64.cpp": "",
|
|
|
|
"foo-dir/a.h": "",
|
|
|
|
},
|
2021-11-08 18:56:31 +01:00
|
|
|
blueprint: soongCcLibraryPreamble +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_headers", "some-headers") + `
|
2021-03-24 15:04:33 +01:00
|
|
|
cc_library {
|
|
|
|
name: "foo-lib",
|
|
|
|
srcs: ["impl.cpp"],
|
|
|
|
cflags: ["-Wall"],
|
|
|
|
header_libs: ["some-headers"],
|
|
|
|
export_include_dirs: ["foo-dir"],
|
|
|
|
ldflags: ["-Wl,--exclude-libs=bar.a"],
|
|
|
|
arch: {
|
|
|
|
x86: {
|
|
|
|
ldflags: ["-Wl,--exclude-libs=baz.a"],
|
|
|
|
srcs: ["x86.cpp"],
|
|
|
|
},
|
|
|
|
x86_64: {
|
|
|
|
ldflags: ["-Wl,--exclude-libs=qux.a"],
|
|
|
|
srcs: ["x86_64.cpp"],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
target: {
|
|
|
|
android: {
|
|
|
|
srcs: ["android.cpp"],
|
|
|
|
},
|
|
|
|
linux_glibc: {
|
|
|
|
srcs: ["linux.cpp"],
|
|
|
|
},
|
|
|
|
darwin: {
|
|
|
|
srcs: ["darwin.cpp"],
|
|
|
|
},
|
2021-07-16 22:33:47 +02:00
|
|
|
bionic: {
|
|
|
|
srcs: ["bionic.cpp"]
|
|
|
|
},
|
2021-03-24 15:04:33 +01:00
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-03-24 15:04:33 +01:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
|
|
|
|
"copts": `["-Wall"]`,
|
|
|
|
"export_includes": `["foo-dir"]`,
|
|
|
|
"implementation_deps": `[":some-headers"]`,
|
|
|
|
"linkopts": `["-Wl,--exclude-libs=bar.a"] + select({
|
2021-04-13 09:14:55 +02:00
|
|
|
"//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=baz.a"],
|
|
|
|
"//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=qux.a"],
|
|
|
|
"//conditions:default": [],
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"srcs": `["impl.cpp"] + select({
|
2021-04-08 16:40:57 +02:00
|
|
|
"//build/bazel/platforms/arch:x86": ["x86.cpp"],
|
|
|
|
"//build/bazel/platforms/arch:x86_64": ["x86_64.cpp"],
|
2021-03-24 15:04:33 +01:00
|
|
|
"//conditions:default": [],
|
|
|
|
}) + select({
|
2021-10-01 20:45:30 +02:00
|
|
|
"//build/bazel/platforms/os:android": [
|
|
|
|
"bionic.cpp",
|
2021-10-11 21:41:03 +02:00
|
|
|
"android.cpp",
|
2021-10-01 20:45:30 +02:00
|
|
|
],
|
2021-04-08 16:40:57 +02:00
|
|
|
"//build/bazel/platforms/os:darwin": ["darwin.cpp"],
|
|
|
|
"//build/bazel/platforms/os:linux": ["linux.cpp"],
|
2021-10-01 20:45:30 +02:00
|
|
|
"//build/bazel/platforms/os:linux_bionic": ["bionic.cpp"],
|
2021-07-16 22:33:47 +02:00
|
|
|
"//conditions:default": [],
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}),
|
2021-11-08 18:56:31 +01:00
|
|
|
})
|
2021-05-21 09:37:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibraryTrimmedLdAndroid(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library - trimmed example of //bionic/linker:ld-android",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-05-21 09:37:00 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"ld-android.cpp": "",
|
|
|
|
"linked_list.h": "",
|
|
|
|
"linker.h": "",
|
|
|
|
"linker_block_allocator.h": "",
|
|
|
|
"linker_cfi.h": "",
|
2021-03-24 15:04:33 +01:00
|
|
|
},
|
2021-11-01 20:32:43 +01:00
|
|
|
blueprint: soongCcLibraryPreamble +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_headers", "libc_headers") + `
|
2021-03-24 15:04:33 +01:00
|
|
|
cc_library {
|
|
|
|
name: "fake-ld-android",
|
|
|
|
srcs: ["ld_android.cpp"],
|
|
|
|
cflags: [
|
|
|
|
"-Wall",
|
|
|
|
"-Wextra",
|
|
|
|
"-Wunused",
|
|
|
|
"-Werror",
|
|
|
|
],
|
|
|
|
header_libs: ["libc_headers"],
|
|
|
|
ldflags: [
|
|
|
|
"-Wl,--exclude-libs=libgcc.a",
|
|
|
|
"-Wl,--exclude-libs=libgcc_stripped.a",
|
|
|
|
"-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
|
|
|
|
"-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
|
|
|
|
"-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
|
|
|
|
"-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
|
|
|
|
],
|
|
|
|
arch: {
|
|
|
|
x86: {
|
|
|
|
ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
|
|
|
|
},
|
|
|
|
x86_64: {
|
|
|
|
ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
|
|
|
|
},
|
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-03-24 15:04:33 +01:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("fake-ld-android", attrNameToString{
|
|
|
|
"srcs": `["ld_android.cpp"]`,
|
|
|
|
"copts": `[
|
2021-03-24 15:04:33 +01:00
|
|
|
"-Wall",
|
|
|
|
"-Wextra",
|
|
|
|
"-Wunused",
|
|
|
|
"-Werror",
|
2021-11-08 18:56:31 +01:00
|
|
|
]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"implementation_deps": `[":libc_headers"]`,
|
|
|
|
"linkopts": `[
|
2021-03-24 15:04:33 +01:00
|
|
|
"-Wl,--exclude-libs=libgcc.a",
|
|
|
|
"-Wl,--exclude-libs=libgcc_stripped.a",
|
|
|
|
"-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
|
|
|
|
"-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
|
|
|
|
"-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
|
|
|
|
"-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
|
|
|
|
] + select({
|
2021-04-08 16:40:57 +02:00
|
|
|
"//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=libgcc_eh.a"],
|
|
|
|
"//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=libgcc_eh.a"],
|
2021-03-24 15:04:33 +01:00
|
|
|
"//conditions:default": [],
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}),
|
2021-05-21 09:37:00 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibraryExcludeSrcs(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library exclude_srcs - trimmed example of //external/arm-optimized-routines:libarm-optimized-routines-math",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
|
|
|
dir: "external",
|
2021-05-21 09:37:00 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"external/math/cosf.c": "",
|
|
|
|
"external/math/erf.c": "",
|
|
|
|
"external/math/erf_data.c": "",
|
|
|
|
"external/math/erff.c": "",
|
|
|
|
"external/math/erff_data.c": "",
|
|
|
|
"external/Android.bp": `
|
2021-04-27 11:47:02 +02:00
|
|
|
cc_library {
|
|
|
|
name: "fake-libarm-optimized-routines-math",
|
|
|
|
exclude_srcs: [
|
|
|
|
// Provided by:
|
|
|
|
// bionic/libm/upstream-freebsd/lib/msun/src/s_erf.c
|
|
|
|
// bionic/libm/upstream-freebsd/lib/msun/src/s_erff.c
|
|
|
|
"math/erf.c",
|
|
|
|
"math/erf_data.c",
|
|
|
|
"math/erff.c",
|
|
|
|
"math/erff_data.c",
|
|
|
|
],
|
|
|
|
srcs: [
|
|
|
|
"math/*.c",
|
|
|
|
],
|
|
|
|
// arch-specific settings
|
|
|
|
arch: {
|
|
|
|
arm64: {
|
|
|
|
cflags: [
|
|
|
|
"-DHAVE_FAST_FMA=1",
|
|
|
|
],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
bazel_module: { bp2build_available: true },
|
|
|
|
}
|
|
|
|
`,
|
2021-05-21 09:37:00 +02:00
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("fake-libarm-optimized-routines-math", attrNameToString{
|
|
|
|
"copts": `select({
|
2021-04-27 11:47:02 +02:00
|
|
|
"//build/bazel/platforms/arch:arm64": ["-DHAVE_FAST_FMA=1"],
|
|
|
|
"//conditions:default": [],
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"local_includes": `["."]`,
|
|
|
|
"srcs_c": `["math/cosf.c"]`,
|
|
|
|
}),
|
2021-05-21 09:37:00 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibrarySharedStaticProps(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library shared/static props",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-05-21 09:37:00 +02:00
|
|
|
filesystem: map[string]string{
|
2021-09-10 16:06:32 +02:00
|
|
|
"both.cpp": "",
|
|
|
|
"sharedonly.cpp": "",
|
|
|
|
"staticonly.cpp": "",
|
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble + `
|
2021-04-29 10:15:13 +02:00
|
|
|
cc_library {
|
|
|
|
name: "a",
|
2021-05-06 22:23:19 +02:00
|
|
|
srcs: ["both.cpp"],
|
|
|
|
cflags: ["bothflag"],
|
|
|
|
shared_libs: ["shared_dep_for_both"],
|
|
|
|
static_libs: ["static_dep_for_both"],
|
|
|
|
whole_static_libs: ["whole_static_lib_for_both"],
|
|
|
|
static: {
|
|
|
|
srcs: ["staticonly.cpp"],
|
|
|
|
cflags: ["staticflag"],
|
|
|
|
shared_libs: ["shared_dep_for_static"],
|
|
|
|
static_libs: ["static_dep_for_static"],
|
|
|
|
whole_static_libs: ["whole_static_lib_for_static"],
|
|
|
|
},
|
|
|
|
shared: {
|
|
|
|
srcs: ["sharedonly.cpp"],
|
|
|
|
cflags: ["sharedflag"],
|
|
|
|
shared_libs: ["shared_dep_for_shared"],
|
|
|
|
static_libs: ["static_dep_for_shared"],
|
|
|
|
whole_static_libs: ["whole_static_lib_for_shared"],
|
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-04-29 10:15:13 +02:00
|
|
|
}
|
|
|
|
|
2021-09-10 16:06:32 +02:00
|
|
|
cc_library_static {
|
|
|
|
name: "static_dep_for_shared",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
2021-05-06 22:23:19 +02:00
|
|
|
|
2021-09-10 16:06:32 +02:00
|
|
|
cc_library_static {
|
|
|
|
name: "static_dep_for_static",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
2021-05-06 22:23:19 +02:00
|
|
|
|
2021-09-10 16:06:32 +02:00
|
|
|
cc_library_static {
|
|
|
|
name: "static_dep_for_both",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
2021-05-06 22:23:19 +02:00
|
|
|
|
2021-09-10 16:06:32 +02:00
|
|
|
cc_library_static {
|
|
|
|
name: "whole_static_lib_for_shared",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
2021-05-06 22:23:19 +02:00
|
|
|
|
2021-09-10 16:06:32 +02:00
|
|
|
cc_library_static {
|
|
|
|
name: "whole_static_lib_for_static",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
2021-05-06 22:23:19 +02:00
|
|
|
|
2021-09-10 16:06:32 +02:00
|
|
|
cc_library_static {
|
|
|
|
name: "whole_static_lib_for_both",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
2021-05-06 22:23:19 +02:00
|
|
|
|
2021-09-10 16:06:32 +02:00
|
|
|
cc_library {
|
|
|
|
name: "shared_dep_for_shared",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
2021-05-06 22:23:19 +02:00
|
|
|
|
2021-09-10 16:06:32 +02:00
|
|
|
cc_library {
|
|
|
|
name: "shared_dep_for_static",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
2021-05-06 22:23:19 +02:00
|
|
|
|
2021-09-10 16:06:32 +02:00
|
|
|
cc_library {
|
|
|
|
name: "shared_dep_for_both",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
2021-04-29 10:15:13 +02:00
|
|
|
`,
|
2021-11-08 18:56:31 +01:00
|
|
|
expectedBazelTargets: []string{
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
|
|
|
|
"copts": `[
|
|
|
|
"bothflag",
|
|
|
|
"staticflag",
|
|
|
|
]`,
|
|
|
|
"implementation_deps": `[
|
|
|
|
":static_dep_for_both",
|
|
|
|
":static_dep_for_static",
|
|
|
|
]`,
|
|
|
|
"implementation_dynamic_deps": `[
|
|
|
|
":shared_dep_for_both",
|
|
|
|
":shared_dep_for_static",
|
|
|
|
]`,
|
|
|
|
"srcs": `[
|
|
|
|
"both.cpp",
|
|
|
|
"staticonly.cpp",
|
|
|
|
]`,
|
|
|
|
"whole_archive_deps": `[
|
|
|
|
":whole_static_lib_for_both",
|
|
|
|
":whole_static_lib_for_static",
|
|
|
|
]`}),
|
|
|
|
makeBazelTarget("cc_library_shared", "a", attrNameToString{
|
|
|
|
"copts": `[
|
|
|
|
"bothflag",
|
|
|
|
"sharedflag",
|
|
|
|
]`,
|
|
|
|
"implementation_deps": `[
|
|
|
|
":static_dep_for_both",
|
|
|
|
":static_dep_for_shared",
|
|
|
|
]`,
|
|
|
|
"implementation_dynamic_deps": `[
|
|
|
|
":shared_dep_for_both",
|
|
|
|
":shared_dep_for_shared",
|
|
|
|
]`,
|
|
|
|
"srcs": `[
|
|
|
|
"both.cpp",
|
|
|
|
"sharedonly.cpp",
|
|
|
|
]`,
|
|
|
|
"whole_archive_deps": `[
|
|
|
|
":whole_static_lib_for_both",
|
|
|
|
":whole_static_lib_for_shared",
|
|
|
|
]`,
|
2021-11-08 18:56:31 +01:00
|
|
|
}),
|
|
|
|
},
|
2021-05-21 09:37:00 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-09-22 21:52:58 +02:00
|
|
|
func TestCcLibraryDeps(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library shared/static props",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-22 21:52:58 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"both.cpp": "",
|
|
|
|
"sharedonly.cpp": "",
|
|
|
|
"staticonly.cpp": "",
|
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "a",
|
|
|
|
srcs: ["both.cpp"],
|
|
|
|
cflags: ["bothflag"],
|
|
|
|
shared_libs: ["implementation_shared_dep_for_both", "shared_dep_for_both"],
|
|
|
|
export_shared_lib_headers: ["shared_dep_for_both"],
|
|
|
|
static_libs: ["implementation_static_dep_for_both", "static_dep_for_both"],
|
|
|
|
export_static_lib_headers: ["static_dep_for_both", "whole_static_dep_for_both"],
|
|
|
|
whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_both", "whole_static_dep_for_both"],
|
|
|
|
static: {
|
|
|
|
srcs: ["staticonly.cpp"],
|
|
|
|
cflags: ["staticflag"],
|
|
|
|
shared_libs: ["implementation_shared_dep_for_static", "shared_dep_for_static"],
|
|
|
|
export_shared_lib_headers: ["shared_dep_for_static"],
|
|
|
|
static_libs: ["implementation_static_dep_for_static", "static_dep_for_static"],
|
|
|
|
export_static_lib_headers: ["static_dep_for_static", "whole_static_dep_for_static"],
|
|
|
|
whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_static", "whole_static_dep_for_static"],
|
|
|
|
},
|
|
|
|
shared: {
|
|
|
|
srcs: ["sharedonly.cpp"],
|
|
|
|
cflags: ["sharedflag"],
|
|
|
|
shared_libs: ["implementation_shared_dep_for_shared", "shared_dep_for_shared"],
|
|
|
|
export_shared_lib_headers: ["shared_dep_for_shared"],
|
|
|
|
static_libs: ["implementation_static_dep_for_shared", "static_dep_for_shared"],
|
|
|
|
export_static_lib_headers: ["static_dep_for_shared", "whole_static_dep_for_shared"],
|
|
|
|
whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_shared", "whole_static_dep_for_shared"],
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
|
|
|
}
|
|
|
|
` + simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_shared") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_shared") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_static") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_static") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_both") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_both") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_shared") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_shared") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_static") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_static") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_both") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_both") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_shared") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_shared") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_static") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_static") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_both") +
|
|
|
|
simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_both"),
|
2021-11-08 18:56:31 +01:00
|
|
|
expectedBazelTargets: []string{
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
|
|
|
|
"copts": `[
|
|
|
|
"bothflag",
|
|
|
|
"staticflag",
|
|
|
|
]`,
|
|
|
|
"deps": `[
|
|
|
|
":static_dep_for_both",
|
|
|
|
":static_dep_for_static",
|
|
|
|
]`,
|
|
|
|
"dynamic_deps": `[
|
|
|
|
":shared_dep_for_both",
|
|
|
|
":shared_dep_for_static",
|
|
|
|
]`,
|
|
|
|
"implementation_deps": `[
|
|
|
|
":implementation_static_dep_for_both",
|
|
|
|
":implementation_static_dep_for_static",
|
|
|
|
]`,
|
|
|
|
"implementation_dynamic_deps": `[
|
|
|
|
":implementation_shared_dep_for_both",
|
|
|
|
":implementation_shared_dep_for_static",
|
|
|
|
]`,
|
|
|
|
"srcs": `[
|
|
|
|
"both.cpp",
|
|
|
|
"staticonly.cpp",
|
|
|
|
]`,
|
2021-11-08 18:56:31 +01:00
|
|
|
"whole_archive_deps": `[
|
2021-09-22 21:52:58 +02:00
|
|
|
":not_explicitly_exported_whole_static_dep_for_both",
|
|
|
|
":whole_static_dep_for_both",
|
2021-12-03 23:27:16 +01:00
|
|
|
":not_explicitly_exported_whole_static_dep_for_static",
|
|
|
|
":whole_static_dep_for_static",
|
2021-11-08 18:56:31 +01:00
|
|
|
]`,
|
|
|
|
}),
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_shared", "a", attrNameToString{
|
|
|
|
"copts": `[
|
|
|
|
"bothflag",
|
|
|
|
"sharedflag",
|
|
|
|
]`,
|
|
|
|
"deps": `[
|
|
|
|
":static_dep_for_both",
|
|
|
|
":static_dep_for_shared",
|
|
|
|
]`,
|
|
|
|
"dynamic_deps": `[
|
|
|
|
":shared_dep_for_both",
|
|
|
|
":shared_dep_for_shared",
|
|
|
|
]`,
|
|
|
|
"implementation_deps": `[
|
|
|
|
":implementation_static_dep_for_both",
|
|
|
|
":implementation_static_dep_for_shared",
|
|
|
|
]`,
|
|
|
|
"implementation_dynamic_deps": `[
|
|
|
|
":implementation_shared_dep_for_both",
|
|
|
|
":implementation_shared_dep_for_shared",
|
|
|
|
]`,
|
|
|
|
"srcs": `[
|
|
|
|
"both.cpp",
|
|
|
|
"sharedonly.cpp",
|
|
|
|
]`,
|
|
|
|
"whole_archive_deps": `[
|
|
|
|
":not_explicitly_exported_whole_static_dep_for_both",
|
|
|
|
":whole_static_dep_for_both",
|
|
|
|
":not_explicitly_exported_whole_static_dep_for_shared",
|
|
|
|
":whole_static_dep_for_shared",
|
|
|
|
]`,
|
|
|
|
})},
|
|
|
|
},
|
|
|
|
)
|
2021-09-22 21:52:58 +02:00
|
|
|
}
|
|
|
|
|
2021-06-11 00:20:06 +02:00
|
|
|
func TestCcLibraryWholeStaticLibsAlwaysLink(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
|
|
|
dir: "foo/bar",
|
2021-06-11 00:20:06 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"foo/bar/Android.bp": `
|
|
|
|
cc_library {
|
|
|
|
name: "a",
|
|
|
|
whole_static_libs: ["whole_static_lib_for_both"],
|
|
|
|
static: {
|
|
|
|
whole_static_libs: ["whole_static_lib_for_static"],
|
|
|
|
},
|
|
|
|
shared: {
|
|
|
|
whole_static_libs: ["whole_static_lib_for_shared"],
|
|
|
|
},
|
|
|
|
bazel_module: { bp2build_available: true },
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-06-11 00:20:06 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
cc_prebuilt_library_static { name: "whole_static_lib_for_shared" }
|
|
|
|
|
|
|
|
cc_prebuilt_library_static { name: "whole_static_lib_for_static" }
|
|
|
|
|
|
|
|
cc_prebuilt_library_static { name: "whole_static_lib_for_both" }
|
|
|
|
`,
|
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble,
|
2021-11-08 18:56:31 +01:00
|
|
|
expectedBazelTargets: []string{
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
|
|
|
|
"whole_archive_deps": `[
|
|
|
|
":whole_static_lib_for_both_alwayslink",
|
|
|
|
":whole_static_lib_for_static_alwayslink",
|
|
|
|
]`,
|
|
|
|
}),
|
|
|
|
makeBazelTarget("cc_library_shared", "a", attrNameToString{
|
|
|
|
"whole_archive_deps": `[
|
|
|
|
":whole_static_lib_for_both_alwayslink",
|
|
|
|
":whole_static_lib_for_shared_alwayslink",
|
|
|
|
]`,
|
2021-11-08 18:56:31 +01:00
|
|
|
}),
|
|
|
|
},
|
2021-12-03 23:27:16 +01:00
|
|
|
},
|
|
|
|
)
|
2021-06-11 00:20:06 +02:00
|
|
|
}
|
|
|
|
|
2021-05-26 06:42:42 +02:00
|
|
|
func TestCcLibrarySharedStaticPropsInArch(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library shared/static props in arch",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
|
|
|
dir: "foo/bar",
|
2021-05-26 06:42:42 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"foo/bar/arm.cpp": "",
|
|
|
|
"foo/bar/x86.cpp": "",
|
|
|
|
"foo/bar/sharedonly.cpp": "",
|
|
|
|
"foo/bar/staticonly.cpp": "",
|
|
|
|
"foo/bar/Android.bp": `
|
|
|
|
cc_library {
|
|
|
|
name: "a",
|
|
|
|
arch: {
|
|
|
|
arm: {
|
|
|
|
shared: {
|
|
|
|
srcs: ["arm_shared.cpp"],
|
|
|
|
cflags: ["-DARM_SHARED"],
|
|
|
|
static_libs: ["arm_static_dep_for_shared"],
|
|
|
|
whole_static_libs: ["arm_whole_static_dep_for_shared"],
|
|
|
|
shared_libs: ["arm_shared_dep_for_shared"],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
x86: {
|
|
|
|
static: {
|
|
|
|
srcs: ["x86_static.cpp"],
|
|
|
|
cflags: ["-DX86_STATIC"],
|
|
|
|
static_libs: ["x86_dep_for_static"],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
target: {
|
|
|
|
android: {
|
|
|
|
shared: {
|
|
|
|
srcs: ["android_shared.cpp"],
|
|
|
|
cflags: ["-DANDROID_SHARED"],
|
|
|
|
static_libs: ["android_dep_for_shared"],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
android_arm: {
|
|
|
|
shared: {
|
|
|
|
cflags: ["-DANDROID_ARM_SHARED"],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
srcs: ["both.cpp"],
|
|
|
|
cflags: ["bothflag"],
|
|
|
|
static_libs: ["static_dep_for_both"],
|
|
|
|
static: {
|
|
|
|
srcs: ["staticonly.cpp"],
|
|
|
|
cflags: ["staticflag"],
|
|
|
|
static_libs: ["static_dep_for_static"],
|
|
|
|
},
|
|
|
|
shared: {
|
|
|
|
srcs: ["sharedonly.cpp"],
|
|
|
|
cflags: ["sharedflag"],
|
|
|
|
static_libs: ["static_dep_for_shared"],
|
|
|
|
},
|
|
|
|
bazel_module: { bp2build_available: true },
|
|
|
|
}
|
|
|
|
|
|
|
|
cc_library_static { name: "static_dep_for_shared" }
|
|
|
|
cc_library_static { name: "static_dep_for_static" }
|
|
|
|
cc_library_static { name: "static_dep_for_both" }
|
|
|
|
|
|
|
|
cc_library_static { name: "arm_static_dep_for_shared" }
|
|
|
|
cc_library_static { name: "arm_whole_static_dep_for_shared" }
|
|
|
|
cc_library_static { name: "arm_shared_dep_for_shared" }
|
|
|
|
|
|
|
|
cc_library_static { name: "x86_dep_for_static" }
|
|
|
|
|
|
|
|
cc_library_static { name: "android_dep_for_shared" }
|
|
|
|
`,
|
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble,
|
2021-11-08 18:56:31 +01:00
|
|
|
expectedBazelTargets: []string{
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
|
|
|
|
"copts": `[
|
|
|
|
"bothflag",
|
|
|
|
"staticflag",
|
|
|
|
] + select({
|
|
|
|
"//build/bazel/platforms/arch:x86": ["-DX86_STATIC"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
})`,
|
|
|
|
"implementation_deps": `[
|
|
|
|
":static_dep_for_both",
|
|
|
|
":static_dep_for_static",
|
|
|
|
] + select({
|
|
|
|
"//build/bazel/platforms/arch:x86": [":x86_dep_for_static"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
})`,
|
|
|
|
"local_includes": `["."]`,
|
|
|
|
"srcs": `[
|
|
|
|
"both.cpp",
|
|
|
|
"staticonly.cpp",
|
|
|
|
] + select({
|
|
|
|
"//build/bazel/platforms/arch:x86": ["x86_static.cpp"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
})`,
|
|
|
|
}),
|
|
|
|
makeBazelTarget("cc_library_shared", "a", attrNameToString{
|
|
|
|
"copts": `[
|
|
|
|
"bothflag",
|
|
|
|
"sharedflag",
|
|
|
|
] + select({
|
|
|
|
"//build/bazel/platforms/arch:arm": ["-DARM_SHARED"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
}) + select({
|
|
|
|
"//build/bazel/platforms/os:android": ["-DANDROID_SHARED"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
}) + select({
|
|
|
|
"//build/bazel/platforms/os_arch:android_arm": ["-DANDROID_ARM_SHARED"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
})`,
|
|
|
|
"implementation_deps": `[
|
|
|
|
":static_dep_for_both",
|
|
|
|
":static_dep_for_shared",
|
|
|
|
] + select({
|
|
|
|
"//build/bazel/platforms/arch:arm": [":arm_static_dep_for_shared"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
}) + select({
|
|
|
|
"//build/bazel/platforms/os:android": [":android_dep_for_shared"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
})`,
|
|
|
|
"implementation_dynamic_deps": `select({
|
|
|
|
"//build/bazel/platforms/arch:arm": [":arm_shared_dep_for_shared"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
})`,
|
|
|
|
"local_includes": `["."]`,
|
|
|
|
"srcs": `[
|
|
|
|
"both.cpp",
|
|
|
|
"sharedonly.cpp",
|
|
|
|
] + select({
|
|
|
|
"//build/bazel/platforms/arch:arm": ["arm_shared.cpp"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
}) + select({
|
|
|
|
"//build/bazel/platforms/os:android": ["android_shared.cpp"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
})`,
|
|
|
|
"whole_archive_deps": `select({
|
|
|
|
"//build/bazel/platforms/arch:arm": [":arm_whole_static_dep_for_shared"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
})`,
|
2021-11-08 18:56:31 +01:00
|
|
|
}),
|
|
|
|
},
|
2021-12-03 23:27:16 +01:00
|
|
|
},
|
|
|
|
)
|
2021-05-26 06:42:42 +02:00
|
|
|
}
|
|
|
|
|
2021-06-02 13:10:02 +02:00
|
|
|
func TestCcLibrarySharedStaticPropsWithMixedSources(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library shared/static props with c/cpp/s mixed sources",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
|
|
|
dir: "foo/bar",
|
2021-06-02 13:10:02 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"foo/bar/both_source.cpp": "",
|
|
|
|
"foo/bar/both_source.cc": "",
|
|
|
|
"foo/bar/both_source.c": "",
|
|
|
|
"foo/bar/both_source.s": "",
|
|
|
|
"foo/bar/both_source.S": "",
|
|
|
|
"foo/bar/shared_source.cpp": "",
|
|
|
|
"foo/bar/shared_source.cc": "",
|
|
|
|
"foo/bar/shared_source.c": "",
|
|
|
|
"foo/bar/shared_source.s": "",
|
|
|
|
"foo/bar/shared_source.S": "",
|
|
|
|
"foo/bar/static_source.cpp": "",
|
|
|
|
"foo/bar/static_source.cc": "",
|
|
|
|
"foo/bar/static_source.c": "",
|
|
|
|
"foo/bar/static_source.s": "",
|
|
|
|
"foo/bar/static_source.S": "",
|
|
|
|
"foo/bar/Android.bp": `
|
|
|
|
cc_library {
|
|
|
|
name: "a",
|
|
|
|
srcs: [
|
2021-06-03 19:43:01 +02:00
|
|
|
"both_source.cpp",
|
|
|
|
"both_source.cc",
|
|
|
|
"both_source.c",
|
|
|
|
"both_source.s",
|
|
|
|
"both_source.S",
|
2021-09-20 18:55:02 +02:00
|
|
|
":both_filegroup",
|
2021-06-03 19:43:01 +02:00
|
|
|
],
|
2021-06-02 13:10:02 +02:00
|
|
|
static: {
|
2021-09-10 16:06:32 +02:00
|
|
|
srcs: [
|
|
|
|
"static_source.cpp",
|
|
|
|
"static_source.cc",
|
|
|
|
"static_source.c",
|
|
|
|
"static_source.s",
|
|
|
|
"static_source.S",
|
|
|
|
":static_filegroup",
|
|
|
|
],
|
2021-06-02 13:10:02 +02:00
|
|
|
},
|
|
|
|
shared: {
|
2021-09-10 16:06:32 +02:00
|
|
|
srcs: [
|
|
|
|
"shared_source.cpp",
|
|
|
|
"shared_source.cc",
|
|
|
|
"shared_source.c",
|
|
|
|
"shared_source.s",
|
|
|
|
"shared_source.S",
|
|
|
|
":shared_filegroup",
|
|
|
|
],
|
2021-06-02 13:10:02 +02:00
|
|
|
},
|
|
|
|
bazel_module: { bp2build_available: true },
|
|
|
|
}
|
|
|
|
|
|
|
|
filegroup {
|
|
|
|
name: "both_filegroup",
|
|
|
|
srcs: [
|
|
|
|
// Not relevant, handled by filegroup macro
|
2021-06-03 19:43:01 +02:00
|
|
|
],
|
2021-06-02 13:10:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
filegroup {
|
|
|
|
name: "shared_filegroup",
|
|
|
|
srcs: [
|
|
|
|
// Not relevant, handled by filegroup macro
|
2021-06-03 19:43:01 +02:00
|
|
|
],
|
2021-06-02 13:10:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
filegroup {
|
|
|
|
name: "static_filegroup",
|
|
|
|
srcs: [
|
|
|
|
// Not relevant, handled by filegroup macro
|
2021-06-03 19:43:01 +02:00
|
|
|
],
|
2021-06-02 13:10:02 +02:00
|
|
|
}
|
|
|
|
`,
|
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble,
|
2021-11-08 18:56:31 +01:00
|
|
|
expectedBazelTargets: []string{
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
|
2021-11-08 18:56:31 +01:00
|
|
|
"local_includes": `["."]`,
|
|
|
|
"srcs": `[
|
2021-06-02 13:10:02 +02:00
|
|
|
"both_source.cpp",
|
2021-09-20 18:55:02 +02:00
|
|
|
"both_source.cc",
|
|
|
|
":both_filegroup_cpp_srcs",
|
2021-12-03 23:27:16 +01:00
|
|
|
"static_source.cpp",
|
|
|
|
"static_source.cc",
|
|
|
|
":static_filegroup_cpp_srcs",
|
2021-11-08 18:56:31 +01:00
|
|
|
]`,
|
|
|
|
"srcs_as": `[
|
2021-06-02 13:10:02 +02:00
|
|
|
"both_source.s",
|
|
|
|
"both_source.S",
|
|
|
|
":both_filegroup_as_srcs",
|
2021-12-03 23:27:16 +01:00
|
|
|
"static_source.s",
|
|
|
|
"static_source.S",
|
|
|
|
":static_filegroup_as_srcs",
|
2021-11-08 18:56:31 +01:00
|
|
|
]`,
|
|
|
|
"srcs_c": `[
|
2021-06-02 13:10:02 +02:00
|
|
|
"both_source.c",
|
|
|
|
":both_filegroup_c_srcs",
|
2021-12-03 23:27:16 +01:00
|
|
|
"static_source.c",
|
|
|
|
":static_filegroup_c_srcs",
|
2021-11-08 18:56:31 +01:00
|
|
|
]`,
|
|
|
|
}),
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_shared", "a", attrNameToString{
|
|
|
|
"local_includes": `["."]`,
|
|
|
|
"srcs": `[
|
|
|
|
"both_source.cpp",
|
|
|
|
"both_source.cc",
|
|
|
|
":both_filegroup_cpp_srcs",
|
|
|
|
"shared_source.cpp",
|
|
|
|
"shared_source.cc",
|
|
|
|
":shared_filegroup_cpp_srcs",
|
|
|
|
]`,
|
|
|
|
"srcs_as": `[
|
|
|
|
"both_source.s",
|
|
|
|
"both_source.S",
|
|
|
|
":both_filegroup_as_srcs",
|
|
|
|
"shared_source.s",
|
|
|
|
"shared_source.S",
|
|
|
|
":shared_filegroup_as_srcs",
|
|
|
|
]`,
|
|
|
|
"srcs_c": `[
|
|
|
|
"both_source.c",
|
|
|
|
":both_filegroup_c_srcs",
|
|
|
|
"shared_source.c",
|
|
|
|
":shared_filegroup_c_srcs",
|
|
|
|
]`,
|
|
|
|
})}})
|
2021-06-02 13:10:02 +02:00
|
|
|
}
|
|
|
|
|
2021-05-21 09:37:00 +02:00
|
|
|
func TestCcLibraryNonConfiguredVersionScript(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library non-configured version script",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
|
|
|
dir: "foo/bar",
|
2021-05-21 09:37:00 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"foo/bar/Android.bp": `
|
2021-04-30 15:35:09 +02:00
|
|
|
cc_library {
|
|
|
|
name: "a",
|
|
|
|
srcs: ["a.cpp"],
|
|
|
|
version_script: "v.map",
|
|
|
|
bazel_module: { bp2build_available: true },
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-04-30 15:35:09 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-05-21 09:37:00 +02:00
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
|
|
|
|
"additional_linker_inputs": `["v.map"]`,
|
|
|
|
"linkopts": `["-Wl,--version-script,$(location v.map)"]`,
|
|
|
|
"srcs": `["a.cpp"]`,
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
2021-05-21 09:37:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibraryConfiguredVersionScript(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library configured version script",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
|
|
|
dir: "foo/bar",
|
2021-05-21 09:37:00 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"foo/bar/Android.bp": `
|
2021-09-10 16:06:32 +02:00
|
|
|
cc_library {
|
|
|
|
name: "a",
|
|
|
|
srcs: ["a.cpp"],
|
|
|
|
arch: {
|
|
|
|
arm: {
|
|
|
|
version_script: "arm.map",
|
|
|
|
},
|
|
|
|
arm64: {
|
|
|
|
version_script: "arm64.map",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
bazel_module: { bp2build_available: true },
|
|
|
|
include_build_directory: false,
|
|
|
|
}
|
2021-06-03 19:43:01 +02:00
|
|
|
`,
|
2021-05-21 09:37:00 +02:00
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
|
|
|
|
"additional_linker_inputs": `select({
|
2021-10-04 19:54:37 +02:00
|
|
|
"//build/bazel/platforms/arch:arm": ["arm.map"],
|
|
|
|
"//build/bazel/platforms/arch:arm64": ["arm64.map"],
|
|
|
|
"//conditions:default": [],
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"linkopts": `select({
|
2021-10-04 19:54:37 +02:00
|
|
|
"//build/bazel/platforms/arch:arm": ["-Wl,--version-script,$(location arm.map)"],
|
|
|
|
"//build/bazel/platforms/arch:arm64": ["-Wl,--version-script,$(location arm64.map)"],
|
|
|
|
"//conditions:default": [],
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"srcs": `["a.cpp"]`,
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
2021-05-21 09:37:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibrarySharedLibs(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library shared_libs",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-10 16:06:32 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
2021-05-06 08:40:33 +02:00
|
|
|
cc_library {
|
|
|
|
name: "mylib",
|
2021-09-10 16:06:32 +02:00
|
|
|
bazel_module: { bp2build_available: false },
|
2021-05-06 08:40:33 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "a",
|
|
|
|
shared_libs: ["mylib",],
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-05-06 08:40:33 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
|
|
|
|
"implementation_dynamic_deps": `[":mylib"]`,
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
2021-05-21 09:37:00 +02:00
|
|
|
}
|
|
|
|
|
2021-10-06 16:32:26 +02:00
|
|
|
func TestCcLibraryFeatures(t *testing.T) {
|
2021-12-03 23:27:16 +01:00
|
|
|
expected_targets := []string{}
|
|
|
|
expected_targets = append(expected_targets, makeCcLibraryTargets("a", attrNameToString{
|
|
|
|
"features": `[
|
|
|
|
"disable_pack_relocations",
|
|
|
|
"-no_undefined_symbols",
|
|
|
|
]`,
|
|
|
|
"srcs": `["a.cpp"]`,
|
|
|
|
})...)
|
|
|
|
expected_targets = append(expected_targets, makeCcLibraryTargets("b", attrNameToString{
|
|
|
|
"features": `select({
|
|
|
|
"//build/bazel/platforms/arch:x86_64": [
|
|
|
|
"disable_pack_relocations",
|
|
|
|
"-no_undefined_symbols",
|
|
|
|
],
|
|
|
|
"//conditions:default": [],
|
|
|
|
})`,
|
|
|
|
"srcs": `["b.cpp"]`,
|
|
|
|
})...)
|
|
|
|
expected_targets = append(expected_targets, makeCcLibraryTargets("c", attrNameToString{
|
|
|
|
"features": `select({
|
|
|
|
"//build/bazel/platforms/os:darwin": [
|
|
|
|
"disable_pack_relocations",
|
|
|
|
"-no_undefined_symbols",
|
|
|
|
],
|
|
|
|
"//conditions:default": [],
|
|
|
|
})`,
|
|
|
|
"srcs": `["c.cpp"]`,
|
|
|
|
})...)
|
|
|
|
|
2021-05-21 09:37:00 +02:00
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library pack_relocations test",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-10 16:06:32 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
2021-05-10 05:55:51 +02:00
|
|
|
cc_library {
|
|
|
|
name: "a",
|
|
|
|
srcs: ["a.cpp"],
|
|
|
|
pack_relocations: false,
|
2021-10-06 16:32:26 +02:00
|
|
|
allow_undefined_symbols: true,
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-05-10 05:55:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "b",
|
|
|
|
srcs: ["b.cpp"],
|
|
|
|
arch: {
|
|
|
|
x86_64: {
|
2021-09-10 16:06:32 +02:00
|
|
|
pack_relocations: false,
|
2021-10-06 16:32:26 +02:00
|
|
|
allow_undefined_symbols: true,
|
2021-09-10 16:06:32 +02:00
|
|
|
},
|
2021-05-10 05:55:51 +02:00
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-05-10 05:55:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "c",
|
|
|
|
srcs: ["c.cpp"],
|
|
|
|
target: {
|
|
|
|
darwin: {
|
2021-09-10 16:06:32 +02:00
|
|
|
pack_relocations: false,
|
2021-10-06 16:32:26 +02:00
|
|
|
allow_undefined_symbols: true,
|
2021-09-10 16:06:32 +02:00
|
|
|
},
|
2021-05-10 05:55:51 +02:00
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-05-10 05:55:51 +02:00
|
|
|
}`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: expected_targets,
|
2021-05-21 09:37:00 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibrarySpacesInCopts(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library spaces in copts",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-10 16:06:32 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
2021-05-12 06:33:00 +02:00
|
|
|
cc_library {
|
|
|
|
name: "a",
|
|
|
|
cflags: ["-include header.h",],
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-05-12 06:33:00 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
|
|
|
|
"copts": `[
|
2021-05-12 06:33:00 +02:00
|
|
|
"-include",
|
|
|
|
"header.h",
|
2021-11-08 18:56:31 +01:00
|
|
|
]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
2021-05-21 09:37:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibraryCppFlagsGoesIntoCopts(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library cppflags usage",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-10 16:06:32 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `cc_library {
|
2021-05-12 07:04:58 +02:00
|
|
|
name: "a",
|
|
|
|
srcs: ["a.cpp"],
|
2021-09-10 16:06:32 +02:00
|
|
|
cflags: ["-Wall"],
|
2021-05-12 07:04:58 +02:00
|
|
|
cppflags: [
|
|
|
|
"-fsigned-char",
|
|
|
|
"-pedantic",
|
2021-09-10 16:06:32 +02:00
|
|
|
],
|
2021-05-12 07:04:58 +02:00
|
|
|
arch: {
|
|
|
|
arm64: {
|
|
|
|
cppflags: ["-DARM64=1"],
|
2021-09-10 16:06:32 +02:00
|
|
|
},
|
2021-06-03 19:43:01 +02:00
|
|
|
},
|
2021-05-12 07:04:58 +02:00
|
|
|
target: {
|
|
|
|
android: {
|
|
|
|
cppflags: ["-DANDROID=1"],
|
2021-09-10 16:06:32 +02:00
|
|
|
},
|
2021-06-03 19:43:01 +02:00
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-05-12 07:04:58 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
|
|
|
|
"copts": `["-Wall"]`,
|
|
|
|
"cppflags": `[
|
2021-05-25 18:10:58 +02:00
|
|
|
"-fsigned-char",
|
|
|
|
"-pedantic",
|
2021-05-12 07:04:58 +02:00
|
|
|
] + select({
|
|
|
|
"//build/bazel/platforms/arch:arm64": ["-DARM64=1"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
}) + select({
|
|
|
|
"//build/bazel/platforms/os:android": ["-DANDROID=1"],
|
|
|
|
"//conditions:default": [],
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"srcs": `["a.cpp"]`,
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
2021-03-24 15:04:33 +01:00
|
|
|
}
|
2021-05-27 08:15:54 +02:00
|
|
|
|
2021-06-02 22:02:22 +02:00
|
|
|
func TestCcLibraryExcludeLibs(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
|
|
|
filesystem: map[string]string{},
|
2021-06-02 22:02:22 +02:00
|
|
|
blueprint: soongCcLibraryStaticPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "foo_static",
|
|
|
|
srcs: ["common.c"],
|
|
|
|
whole_static_libs: [
|
|
|
|
"arm_whole_static_lib_excludes",
|
|
|
|
"malloc_not_svelte_whole_static_lib_excludes"
|
|
|
|
],
|
|
|
|
static_libs: [
|
|
|
|
"arm_static_lib_excludes",
|
|
|
|
"malloc_not_svelte_static_lib_excludes"
|
|
|
|
],
|
|
|
|
shared_libs: [
|
|
|
|
"arm_shared_lib_excludes",
|
|
|
|
],
|
|
|
|
arch: {
|
|
|
|
arm: {
|
|
|
|
exclude_shared_libs: [
|
|
|
|
"arm_shared_lib_excludes",
|
|
|
|
],
|
|
|
|
exclude_static_libs: [
|
|
|
|
"arm_static_lib_excludes",
|
|
|
|
"arm_whole_static_lib_excludes",
|
|
|
|
],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
product_variables: {
|
|
|
|
malloc_not_svelte: {
|
|
|
|
shared_libs: ["malloc_not_svelte_shared_lib"],
|
|
|
|
whole_static_libs: ["malloc_not_svelte_whole_static_lib"],
|
|
|
|
exclude_static_libs: [
|
|
|
|
"malloc_not_svelte_static_lib_excludes",
|
|
|
|
"malloc_not_svelte_whole_static_lib_excludes",
|
|
|
|
],
|
|
|
|
},
|
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-06-02 22:02:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "arm_whole_static_lib_excludes",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "malloc_not_svelte_whole_static_lib",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "malloc_not_svelte_whole_static_lib_excludes",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "arm_static_lib_excludes",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "malloc_not_svelte_static_lib_excludes",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "arm_shared_lib_excludes",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "malloc_not_svelte_shared_lib",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("foo_static", attrNameToString{
|
|
|
|
"implementation_deps": `select({
|
2021-06-02 22:02:22 +02:00
|
|
|
"//build/bazel/platforms/arch:arm": [],
|
2021-09-20 21:14:39 +02:00
|
|
|
"//conditions:default": [":arm_static_lib_excludes_bp2build_cc_library_static"],
|
2021-06-02 22:02:22 +02:00
|
|
|
}) + select({
|
|
|
|
"//build/bazel/product_variables:malloc_not_svelte": [],
|
2021-09-20 21:14:39 +02:00
|
|
|
"//conditions:default": [":malloc_not_svelte_static_lib_excludes_bp2build_cc_library_static"],
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"implementation_dynamic_deps": `select({
|
2021-09-22 21:52:58 +02:00
|
|
|
"//build/bazel/platforms/arch:arm": [],
|
|
|
|
"//conditions:default": [":arm_shared_lib_excludes"],
|
|
|
|
}) + select({
|
|
|
|
"//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_shared_lib"],
|
|
|
|
"//conditions:default": [],
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"srcs_c": `["common.c"]`,
|
|
|
|
"whole_archive_deps": `select({
|
2021-06-02 22:02:22 +02:00
|
|
|
"//build/bazel/platforms/arch:arm": [],
|
2021-09-20 21:14:39 +02:00
|
|
|
"//conditions:default": [":arm_whole_static_lib_excludes_bp2build_cc_library_static"],
|
2021-06-02 22:02:22 +02:00
|
|
|
}) + select({
|
2021-09-20 21:14:39 +02:00
|
|
|
"//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_whole_static_lib_bp2build_cc_library_static"],
|
|
|
|
"//conditions:default": [":malloc_not_svelte_whole_static_lib_excludes_bp2build_cc_library_static"],
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
2021-06-02 22:02:22 +02:00
|
|
|
}
|
2021-06-03 19:43:01 +02:00
|
|
|
|
|
|
|
func TestCCLibraryNoCrtTrue(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library - nocrt: true emits attribute",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-06-03 19:43:01 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"impl.cpp": "",
|
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "foo-lib",
|
|
|
|
srcs: ["impl.cpp"],
|
2021-09-17 13:38:09 +02:00
|
|
|
nocrt: true,
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-06-03 19:43:01 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
|
|
|
|
"link_crt": `False`,
|
|
|
|
"srcs": `["impl.cpp"]`,
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
2021-06-03 19:43:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestCCLibraryNoCrtFalse(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library - nocrt: false - does not emit attribute",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-06-03 19:43:01 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"impl.cpp": "",
|
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "foo-lib",
|
|
|
|
srcs: ["impl.cpp"],
|
2021-09-17 13:38:09 +02:00
|
|
|
nocrt: false,
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-06-03 19:43:01 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
|
|
|
|
"srcs": `["impl.cpp"]`,
|
|
|
|
}),
|
2021-11-08 18:56:31 +01:00
|
|
|
})
|
2021-06-03 19:43:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestCCLibraryNoCrtArchVariant(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library - nocrt in select",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-06-03 19:43:01 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"impl.cpp": "",
|
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "foo-lib",
|
|
|
|
srcs: ["impl.cpp"],
|
|
|
|
arch: {
|
|
|
|
arm: {
|
2021-09-17 13:38:09 +02:00
|
|
|
nocrt: true,
|
2021-06-03 19:43:01 +02:00
|
|
|
},
|
|
|
|
x86: {
|
2021-09-17 13:38:09 +02:00
|
|
|
nocrt: false,
|
2021-06-03 19:43:01 +02:00
|
|
|
},
|
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-06-03 19:43:01 +02:00
|
|
|
}
|
2021-09-17 13:38:09 +02:00
|
|
|
`,
|
|
|
|
expectedErr: fmt.Errorf("Android.bp:16:1: module \"foo-lib\": nocrt is not supported for arch variants"),
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCCLibraryNoLibCrtTrue(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-17 13:38:09 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"impl.cpp": "",
|
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "foo-lib",
|
|
|
|
srcs: ["impl.cpp"],
|
|
|
|
no_libcrt: true,
|
|
|
|
include_build_directory: false,
|
|
|
|
}
|
2021-06-03 19:43:01 +02:00
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
|
|
|
|
"srcs": `["impl.cpp"]`,
|
|
|
|
"use_libcrt": `False`,
|
|
|
|
}),
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func makeCcLibraryTargets(name string, attrs attrNameToString) []string {
|
|
|
|
STATIC_ONLY_ATTRS := map[string]bool{}
|
|
|
|
SHARED_ONLY_ATTRS := map[string]bool{
|
|
|
|
"link_crt": true,
|
|
|
|
"additional_linker_inputs": true,
|
|
|
|
"linkopts": true,
|
|
|
|
"strip": true,
|
|
|
|
}
|
|
|
|
sharedAttrs := attrNameToString{}
|
|
|
|
staticAttrs := attrNameToString{}
|
|
|
|
for key, val := range attrs {
|
|
|
|
if _, staticOnly := STATIC_ONLY_ATTRS[key]; !staticOnly {
|
|
|
|
sharedAttrs[key] = val
|
|
|
|
}
|
|
|
|
if _, sharedOnly := SHARED_ONLY_ATTRS[key]; !sharedOnly {
|
|
|
|
staticAttrs[key] = val
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sharedTarget := makeBazelTarget("cc_library_shared", name, sharedAttrs)
|
|
|
|
staticTarget := makeBazelTarget("cc_library_static", name+"_bp2build_cc_library_static", staticAttrs)
|
|
|
|
|
|
|
|
return []string{staticTarget, sharedTarget}
|
2021-06-03 19:43:01 +02:00
|
|
|
}
|
|
|
|
|
2021-09-17 13:38:09 +02:00
|
|
|
func TestCCLibraryNoLibCrtFalse(t *testing.T) {
|
2021-06-03 19:43:01 +02:00
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-06-03 19:43:01 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"impl.cpp": "",
|
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "foo-lib",
|
|
|
|
srcs: ["impl.cpp"],
|
|
|
|
no_libcrt: false,
|
2021-09-17 13:38:09 +02:00
|
|
|
include_build_directory: false,
|
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
|
|
|
|
"srcs": `["impl.cpp"]`,
|
|
|
|
"use_libcrt": `True`,
|
|
|
|
}),
|
|
|
|
})
|
2021-09-17 13:38:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestCCLibraryNoLibCrtArchVariant(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-17 13:38:09 +02:00
|
|
|
filesystem: map[string]string{
|
|
|
|
"impl.cpp": "",
|
|
|
|
},
|
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "foo-lib",
|
|
|
|
srcs: ["impl.cpp"],
|
2021-06-03 19:43:01 +02:00
|
|
|
arch: {
|
|
|
|
arm: {
|
|
|
|
no_libcrt: true,
|
|
|
|
},
|
|
|
|
x86: {
|
|
|
|
no_libcrt: true,
|
|
|
|
},
|
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-06-03 19:43:01 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
|
|
|
|
"srcs": `["impl.cpp"]`,
|
|
|
|
"use_libcrt": `select({
|
2021-06-03 19:43:01 +02:00
|
|
|
"//build/bazel/platforms/arch:arm": False,
|
|
|
|
"//build/bazel/platforms/arch:x86": False,
|
2021-09-17 13:38:09 +02:00
|
|
|
"//conditions:default": None,
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}),
|
|
|
|
})
|
2021-06-03 19:43:01 +02:00
|
|
|
}
|
2021-06-09 09:18:37 +02:00
|
|
|
|
|
|
|
func TestCcLibraryStrip(t *testing.T) {
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedTargets := []string{}
|
|
|
|
expectedTargets = append(expectedTargets, makeCcLibraryTargets("all", attrNameToString{
|
|
|
|
"strip": `{
|
|
|
|
"all": True,
|
|
|
|
}`,
|
|
|
|
})...)
|
|
|
|
expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols", attrNameToString{
|
|
|
|
"strip": `{
|
|
|
|
"keep_symbols": True,
|
|
|
|
}`,
|
|
|
|
})...)
|
|
|
|
expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols_and_debug_frame", attrNameToString{
|
|
|
|
"strip": `{
|
|
|
|
"keep_symbols_and_debug_frame": True,
|
|
|
|
}`,
|
|
|
|
})...)
|
|
|
|
expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols_list", attrNameToString{
|
|
|
|
"strip": `{
|
|
|
|
"keep_symbols_list": ["symbol"],
|
|
|
|
}`,
|
|
|
|
})...)
|
|
|
|
expectedTargets = append(expectedTargets, makeCcLibraryTargets("none", attrNameToString{
|
|
|
|
"strip": `{
|
|
|
|
"none": True,
|
|
|
|
}`,
|
|
|
|
})...)
|
|
|
|
expectedTargets = append(expectedTargets, makeCcLibraryTargets("nothing", attrNameToString{})...)
|
|
|
|
|
2021-06-09 09:18:37 +02:00
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library strip args",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-10 16:06:32 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
2021-06-09 09:18:37 +02:00
|
|
|
cc_library {
|
|
|
|
name: "nothing",
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
2021-06-09 09:18:37 +02:00
|
|
|
}
|
|
|
|
cc_library {
|
|
|
|
name: "keep_symbols",
|
|
|
|
strip: {
|
2021-09-10 16:06:32 +02:00
|
|
|
keep_symbols: true,
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
2021-06-09 09:18:37 +02:00
|
|
|
}
|
|
|
|
cc_library {
|
|
|
|
name: "keep_symbols_and_debug_frame",
|
|
|
|
strip: {
|
2021-09-10 16:06:32 +02:00
|
|
|
keep_symbols_and_debug_frame: true,
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
2021-06-09 09:18:37 +02:00
|
|
|
}
|
|
|
|
cc_library {
|
|
|
|
name: "none",
|
|
|
|
strip: {
|
2021-09-10 16:06:32 +02:00
|
|
|
none: true,
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
2021-06-09 09:18:37 +02:00
|
|
|
}
|
|
|
|
cc_library {
|
|
|
|
name: "keep_symbols_list",
|
|
|
|
strip: {
|
2021-09-10 16:06:32 +02:00
|
|
|
keep_symbols_list: ["symbol"],
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
2021-06-09 09:18:37 +02:00
|
|
|
}
|
|
|
|
cc_library {
|
|
|
|
name: "all",
|
|
|
|
strip: {
|
2021-09-10 16:06:32 +02:00
|
|
|
all: true,
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
2021-06-09 09:18:37 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: expectedTargets,
|
2021-06-09 09:18:37 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibraryStripWithArch(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library strip args",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-10 16:06:32 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
2021-06-09 09:18:37 +02:00
|
|
|
cc_library {
|
|
|
|
name: "multi-arch",
|
|
|
|
target: {
|
|
|
|
darwin: {
|
|
|
|
strip: {
|
|
|
|
keep_symbols_list: ["foo", "bar"]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
arch: {
|
|
|
|
arm: {
|
|
|
|
strip: {
|
|
|
|
keep_symbols_and_debug_frame: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
arm64: {
|
|
|
|
strip: {
|
|
|
|
keep_symbols: true,
|
|
|
|
},
|
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
},
|
|
|
|
include_build_directory: false,
|
2021-06-09 09:18:37 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("multi-arch", attrNameToString{
|
|
|
|
"strip": `{
|
2021-06-09 09:18:37 +02:00
|
|
|
"keep_symbols": select({
|
|
|
|
"//build/bazel/platforms/arch:arm64": True,
|
|
|
|
"//conditions:default": None,
|
|
|
|
}),
|
|
|
|
"keep_symbols_and_debug_frame": select({
|
|
|
|
"//build/bazel/platforms/arch:arm": True,
|
|
|
|
"//conditions:default": None,
|
|
|
|
}),
|
|
|
|
"keep_symbols_list": select({
|
|
|
|
"//build/bazel/platforms/os:darwin": [
|
|
|
|
"foo",
|
|
|
|
"bar",
|
|
|
|
],
|
|
|
|
"//conditions:default": [],
|
|
|
|
}),
|
2021-11-08 18:56:31 +01:00
|
|
|
}`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
2021-06-09 09:18:37 +02:00
|
|
|
}
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
|
|
|
|
func TestCcLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library system_shared_libs empty at root",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "root_empty",
|
2021-09-10 16:06:32 +02:00
|
|
|
system_shared_libs: [],
|
|
|
|
include_build_directory: false,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("root_empty", attrNameToString{
|
|
|
|
"system_dynamic_deps": `[]`,
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library system_shared_libs empty for static variant",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "static_empty",
|
|
|
|
static: {
|
2021-09-10 16:06:32 +02:00
|
|
|
system_shared_libs: [],
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-11-08 18:56:31 +01:00
|
|
|
expectedBazelTargets: []string{
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_static", "static_empty_bp2build_cc_library_static", attrNameToString{
|
|
|
|
"system_dynamic_deps": "[]",
|
2021-11-08 18:56:31 +01:00
|
|
|
}),
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_shared", "static_empty", attrNameToString{}),
|
2021-11-08 18:56:31 +01:00
|
|
|
},
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibrary_SystemSharedLibsSharedEmpty(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library system_shared_libs empty for shared variant",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "shared_empty",
|
|
|
|
shared: {
|
2021-09-10 16:06:32 +02:00
|
|
|
system_shared_libs: [],
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-11-08 18:56:31 +01:00
|
|
|
expectedBazelTargets: []string{
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", attrNameToString{}),
|
|
|
|
makeBazelTarget("cc_library_shared", "shared_empty", attrNameToString{
|
|
|
|
"system_dynamic_deps": "[]",
|
2021-11-08 18:56:31 +01:00
|
|
|
}),
|
|
|
|
},
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibrary_SystemSharedLibsSharedBionicEmpty(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library system_shared_libs empty for shared, bionic variant",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "shared_empty",
|
|
|
|
target: {
|
|
|
|
bionic: {
|
|
|
|
shared: {
|
|
|
|
system_shared_libs: [],
|
|
|
|
}
|
|
|
|
}
|
2021-09-10 16:06:32 +02:00
|
|
|
},
|
|
|
|
include_build_directory: false,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-11-08 18:56:31 +01:00
|
|
|
expectedBazelTargets: []string{
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", attrNameToString{}),
|
|
|
|
makeBazelTarget("cc_library_shared", "shared_empty", attrNameToString{
|
|
|
|
"system_dynamic_deps": "[]",
|
2021-11-08 18:56:31 +01:00
|
|
|
}),
|
|
|
|
},
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
|
|
|
|
// Note that this behavior is technically incorrect (it's a simplification).
|
|
|
|
// The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
|
|
|
|
// only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
|
|
|
|
// b/195791252 tracks the fix.
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library system_shared_libs empty for linux_bionic variant",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "target_linux_bionic_empty",
|
|
|
|
target: {
|
|
|
|
linux_bionic: {
|
|
|
|
system_shared_libs: [],
|
|
|
|
},
|
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("target_linux_bionic_empty", attrNameToString{
|
|
|
|
"system_dynamic_deps": `[]`,
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library system_shared_libs empty for bionic variant",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "target_bionic_empty",
|
|
|
|
target: {
|
|
|
|
bionic: {
|
|
|
|
system_shared_libs: [],
|
|
|
|
},
|
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("target_bionic_empty", attrNameToString{
|
|
|
|
"system_dynamic_deps": `[]`,
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibrary_SystemSharedLibsSharedAndRoot(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library system_shared_libs set for shared and root",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
2021-09-10 16:06:32 +02:00
|
|
|
cc_library {
|
|
|
|
name: "libc",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
|
|
|
cc_library {
|
|
|
|
name: "libm",
|
|
|
|
bazel_module: { bp2build_available: false },
|
|
|
|
}
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
|
|
|
|
cc_library {
|
|
|
|
name: "foo",
|
|
|
|
system_shared_libs: ["libc"],
|
|
|
|
shared: {
|
2021-09-10 16:06:32 +02:00
|
|
|
system_shared_libs: ["libm"],
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
},
|
2021-09-10 16:06:32 +02:00
|
|
|
include_build_directory: false,
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
}
|
|
|
|
`,
|
2021-11-08 18:56:31 +01:00
|
|
|
expectedBazelTargets: []string{
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
|
2021-11-08 18:56:31 +01:00
|
|
|
"system_dynamic_deps": `[":libc"]`,
|
|
|
|
}),
|
2021-12-03 23:27:16 +01:00
|
|
|
makeBazelTarget("cc_library_shared", "foo", attrNameToString{
|
|
|
|
"system_dynamic_deps": `[
|
|
|
|
":libc",
|
|
|
|
":libm",
|
|
|
|
]`,
|
|
|
|
}),
|
2021-11-08 18:56:31 +01:00
|
|
|
},
|
bp2build: handle system_shared_libs
- If no system_shared_libs is specified, bp2build writes no attribute
value. In this case, the bazel library macros determine the correct
default behavior.
- If any system_shared_libs is specified for any variant, then bp2build
writes the value verbatim. This includes if an empty list is specified,
as this should override defaulting behavior.
Note this defaulting behavior is incomplete and will be incorrect in
corner cases. For example, if, in an Android.bp, system_shared_libs is
specified for os.linux_bionic but not for os.android, then the bazel
default for os.android will be incorrect. However, there are no current
modules in AOSP which fit this case.
As a related fix, supports static struct for cc_library_static.
Also, removes some elements from the bp2build denylist.
Test: mixed_droid CI
Change-Id: Iee5feeaaf05e8e7209c7a90c913173832ad7bf91
2021-08-04 03:01:05 +02:00
|
|
|
})
|
|
|
|
}
|
2021-10-01 20:45:30 +02:00
|
|
|
|
|
|
|
func TestCcLibraryOsSelects(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
description: "cc_library - selects for all os targets",
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
|
|
|
filesystem: map[string]string{},
|
2021-10-01 20:45:30 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + `
|
|
|
|
cc_library {
|
|
|
|
name: "foo-lib",
|
|
|
|
srcs: ["base.cpp"],
|
|
|
|
target: {
|
|
|
|
android: {
|
|
|
|
srcs: ["android.cpp"],
|
|
|
|
},
|
|
|
|
linux: {
|
|
|
|
srcs: ["linux.cpp"],
|
|
|
|
},
|
|
|
|
linux_glibc: {
|
|
|
|
srcs: ["linux_glibc.cpp"],
|
|
|
|
},
|
|
|
|
darwin: {
|
|
|
|
srcs: ["darwin.cpp"],
|
|
|
|
},
|
|
|
|
bionic: {
|
|
|
|
srcs: ["bionic.cpp"],
|
|
|
|
},
|
|
|
|
linux_musl: {
|
|
|
|
srcs: ["linux_musl.cpp"],
|
|
|
|
},
|
|
|
|
windows: {
|
|
|
|
srcs: ["windows.cpp"],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
|
|
|
}
|
|
|
|
`,
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
|
|
|
|
"srcs": `["base.cpp"] + select({
|
2021-10-01 20:45:30 +02:00
|
|
|
"//build/bazel/platforms/os:android": [
|
|
|
|
"linux.cpp",
|
2021-10-11 21:40:35 +02:00
|
|
|
"bionic.cpp",
|
2021-10-11 21:41:03 +02:00
|
|
|
"android.cpp",
|
2021-10-01 20:45:30 +02:00
|
|
|
],
|
|
|
|
"//build/bazel/platforms/os:darwin": ["darwin.cpp"],
|
|
|
|
"//build/bazel/platforms/os:linux": [
|
2021-10-11 21:40:35 +02:00
|
|
|
"linux.cpp",
|
2021-10-11 21:41:03 +02:00
|
|
|
"linux_glibc.cpp",
|
2021-10-01 20:45:30 +02:00
|
|
|
],
|
|
|
|
"//build/bazel/platforms/os:linux_bionic": [
|
|
|
|
"linux.cpp",
|
2021-10-11 21:40:35 +02:00
|
|
|
"bionic.cpp",
|
2021-10-01 20:45:30 +02:00
|
|
|
],
|
|
|
|
"//build/bazel/platforms/os:linux_musl": [
|
2021-10-11 21:40:35 +02:00
|
|
|
"linux.cpp",
|
2021-10-11 21:41:03 +02:00
|
|
|
"linux_musl.cpp",
|
2021-10-01 20:45:30 +02:00
|
|
|
],
|
|
|
|
"//build/bazel/platforms/os:windows": ["windows.cpp"],
|
|
|
|
"//conditions:default": [],
|
2021-11-08 18:56:31 +01:00
|
|
|
})`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}),
|
|
|
|
},
|
|
|
|
)
|
2021-10-08 12:41:31 +02:00
|
|
|
}
|
|
|
|
|
2021-10-11 19:44:33 +02:00
|
|
|
func TestCcLibraryCppStdWithGnuExtensions_ConvertsToFeatureAttr(t *testing.T) {
|
2021-10-08 12:41:31 +02:00
|
|
|
type testCase struct {
|
|
|
|
cpp_std string
|
2021-11-29 23:52:41 +01:00
|
|
|
c_std string
|
2021-10-08 12:41:31 +02:00
|
|
|
gnu_extensions string
|
|
|
|
bazel_cpp_std string
|
2021-11-29 23:52:41 +01:00
|
|
|
bazel_c_std string
|
2021-10-08 12:41:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
testCases := []testCase{
|
|
|
|
// Existing usages of cpp_std in AOSP are:
|
|
|
|
// experimental, c++11, c++17, c++2a, c++98, gnu++11, gnu++17
|
|
|
|
//
|
|
|
|
// not set, only emit if gnu_extensions is disabled. the default (gnu+17
|
|
|
|
// is set in the toolchain.)
|
|
|
|
{cpp_std: "", gnu_extensions: "", bazel_cpp_std: ""},
|
2021-11-29 23:52:41 +01:00
|
|
|
{cpp_std: "", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c99"},
|
2021-10-08 12:41:31 +02:00
|
|
|
{cpp_std: "", gnu_extensions: "true", bazel_cpp_std: ""},
|
|
|
|
// experimental defaults to gnu++2a
|
|
|
|
{cpp_std: "experimental", gnu_extensions: "", bazel_cpp_std: "gnu++2a"},
|
2021-11-29 23:52:41 +01:00
|
|
|
{cpp_std: "experimental", gnu_extensions: "false", bazel_cpp_std: "c++2a", bazel_c_std: "c99"},
|
2021-10-08 12:41:31 +02:00
|
|
|
{cpp_std: "experimental", gnu_extensions: "true", bazel_cpp_std: "gnu++2a"},
|
|
|
|
// Explicitly setting a c++ std does not use replace gnu++ std even if
|
|
|
|
// gnu_extensions is true.
|
|
|
|
// "c++11",
|
|
|
|
{cpp_std: "c++11", gnu_extensions: "", bazel_cpp_std: "c++11"},
|
2021-11-29 23:52:41 +01:00
|
|
|
{cpp_std: "c++11", gnu_extensions: "false", bazel_cpp_std: "c++11", bazel_c_std: "c99"},
|
2021-10-08 12:41:31 +02:00
|
|
|
{cpp_std: "c++11", gnu_extensions: "true", bazel_cpp_std: "c++11"},
|
|
|
|
// "c++17",
|
|
|
|
{cpp_std: "c++17", gnu_extensions: "", bazel_cpp_std: "c++17"},
|
2021-11-29 23:52:41 +01:00
|
|
|
{cpp_std: "c++17", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c99"},
|
2021-10-08 12:41:31 +02:00
|
|
|
{cpp_std: "c++17", gnu_extensions: "true", bazel_cpp_std: "c++17"},
|
|
|
|
// "c++2a",
|
|
|
|
{cpp_std: "c++2a", gnu_extensions: "", bazel_cpp_std: "c++2a"},
|
2021-11-29 23:52:41 +01:00
|
|
|
{cpp_std: "c++2a", gnu_extensions: "false", bazel_cpp_std: "c++2a", bazel_c_std: "c99"},
|
2021-10-08 12:41:31 +02:00
|
|
|
{cpp_std: "c++2a", gnu_extensions: "true", bazel_cpp_std: "c++2a"},
|
|
|
|
// "c++98",
|
|
|
|
{cpp_std: "c++98", gnu_extensions: "", bazel_cpp_std: "c++98"},
|
2021-11-29 23:52:41 +01:00
|
|
|
{cpp_std: "c++98", gnu_extensions: "false", bazel_cpp_std: "c++98", bazel_c_std: "c99"},
|
2021-10-08 12:41:31 +02:00
|
|
|
{cpp_std: "c++98", gnu_extensions: "true", bazel_cpp_std: "c++98"},
|
|
|
|
// gnu++ is replaced with c++ if gnu_extensions is explicitly false.
|
|
|
|
// "gnu++11",
|
|
|
|
{cpp_std: "gnu++11", gnu_extensions: "", bazel_cpp_std: "gnu++11"},
|
2021-11-29 23:52:41 +01:00
|
|
|
{cpp_std: "gnu++11", gnu_extensions: "false", bazel_cpp_std: "c++11", bazel_c_std: "c99"},
|
2021-10-08 12:41:31 +02:00
|
|
|
{cpp_std: "gnu++11", gnu_extensions: "true", bazel_cpp_std: "gnu++11"},
|
|
|
|
// "gnu++17",
|
|
|
|
{cpp_std: "gnu++17", gnu_extensions: "", bazel_cpp_std: "gnu++17"},
|
2021-11-29 23:52:41 +01:00
|
|
|
{cpp_std: "gnu++17", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c99"},
|
2021-10-08 12:41:31 +02:00
|
|
|
{cpp_std: "gnu++17", gnu_extensions: "true", bazel_cpp_std: "gnu++17"},
|
2021-11-29 23:52:41 +01:00
|
|
|
|
|
|
|
// some c_std test cases
|
|
|
|
{c_std: "experimental", gnu_extensions: "", bazel_c_std: "gnu11"},
|
|
|
|
{c_std: "experimental", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c11"},
|
|
|
|
{c_std: "experimental", gnu_extensions: "true", bazel_c_std: "gnu11"},
|
|
|
|
{c_std: "gnu11", cpp_std: "gnu++17", gnu_extensions: "", bazel_cpp_std: "gnu++17", bazel_c_std: "gnu11"},
|
|
|
|
{c_std: "gnu11", cpp_std: "gnu++17", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c11"},
|
|
|
|
{c_std: "gnu11", cpp_std: "gnu++17", gnu_extensions: "true", bazel_cpp_std: "gnu++17", bazel_c_std: "gnu11"},
|
2021-10-08 12:41:31 +02:00
|
|
|
}
|
2021-11-29 23:52:41 +01:00
|
|
|
for i, tc := range testCases {
|
|
|
|
name_prefix := fmt.Sprintf("a_%v", i)
|
2021-11-08 18:56:31 +01:00
|
|
|
cppStdProp := ""
|
2021-10-08 12:41:31 +02:00
|
|
|
if tc.cpp_std != "" {
|
2021-11-08 18:56:31 +01:00
|
|
|
cppStdProp = fmt.Sprintf(" cpp_std: \"%s\",", tc.cpp_std)
|
2021-10-08 12:41:31 +02:00
|
|
|
}
|
2021-11-29 23:52:41 +01:00
|
|
|
cStdProp := ""
|
|
|
|
if tc.c_std != "" {
|
|
|
|
cStdProp = fmt.Sprintf(" c_std: \"%s\",", tc.c_std)
|
|
|
|
}
|
2021-11-08 18:56:31 +01:00
|
|
|
gnuExtensionsProp := ""
|
2021-10-08 12:41:31 +02:00
|
|
|
if tc.gnu_extensions != "" {
|
2021-11-08 18:56:31 +01:00
|
|
|
gnuExtensionsProp = fmt.Sprintf(" gnu_extensions: %s,", tc.gnu_extensions)
|
2021-10-08 12:41:31 +02:00
|
|
|
}
|
2021-11-08 18:56:31 +01:00
|
|
|
attrs := attrNameToString{}
|
2021-10-08 12:41:31 +02:00
|
|
|
if tc.bazel_cpp_std != "" {
|
2021-11-08 18:56:31 +01:00
|
|
|
attrs["cpp_std"] = fmt.Sprintf(`"%s"`, tc.bazel_cpp_std)
|
2021-10-08 12:41:31 +02:00
|
|
|
}
|
2021-11-29 23:52:41 +01:00
|
|
|
if tc.bazel_c_std != "" {
|
|
|
|
attrs["c_std"] = fmt.Sprintf(`"%s"`, tc.bazel_c_std)
|
|
|
|
}
|
2021-10-08 12:41:31 +02:00
|
|
|
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
|
|
|
description: fmt.Sprintf(
|
2021-11-01 20:32:43 +01:00
|
|
|
"cc_library with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
|
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-10-08 12:41:31 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
|
|
|
|
cc_library {
|
2021-11-29 23:52:41 +01:00
|
|
|
name: "%s_full",
|
2021-10-08 12:41:31 +02:00
|
|
|
%s // cpp_std: *string
|
2021-11-29 23:52:41 +01:00
|
|
|
%s // c_std: *string
|
2021-10-08 12:41:31 +02:00
|
|
|
%s // gnu_extensions: *bool
|
|
|
|
include_build_directory: false,
|
|
|
|
}
|
2021-11-29 23:52:41 +01:00
|
|
|
`, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
|
2021-12-03 23:27:16 +01:00
|
|
|
expectedBazelTargets: makeCcLibraryTargets(name_prefix+"_full", attrs),
|
2021-10-11 19:44:33 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
runCcLibraryStaticTestCase(t, bp2buildTestCase{
|
|
|
|
description: fmt.Sprintf(
|
2021-11-01 20:32:43 +01:00
|
|
|
"cc_library_static with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
|
|
|
|
moduleTypeUnderTest: "cc_library_static",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
|
2021-10-11 19:44:33 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
|
|
|
|
cc_library_static {
|
2021-11-29 23:52:41 +01:00
|
|
|
name: "%s_static",
|
2021-10-11 19:44:33 +02:00
|
|
|
%s // cpp_std: *string
|
2021-11-29 23:52:41 +01:00
|
|
|
%s // c_std: *string
|
2021-10-11 19:44:33 +02:00
|
|
|
%s // gnu_extensions: *bool
|
|
|
|
include_build_directory: false,
|
|
|
|
}
|
2021-11-29 23:52:41 +01:00
|
|
|
`, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
|
2021-11-08 18:56:31 +01:00
|
|
|
expectedBazelTargets: []string{
|
2021-11-29 23:52:41 +01:00
|
|
|
makeBazelTarget("cc_library_static", name_prefix+"_static", attrs),
|
2021-11-08 18:56:31 +01:00
|
|
|
},
|
2021-10-11 19:44:33 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
runCcLibrarySharedTestCase(t, bp2buildTestCase{
|
|
|
|
description: fmt.Sprintf(
|
2021-11-01 20:32:43 +01:00
|
|
|
"cc_library_shared with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
|
|
|
|
moduleTypeUnderTest: "cc_library_shared",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibrarySharedFactory,
|
2021-10-11 19:44:33 +02:00
|
|
|
blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
|
|
|
|
cc_library_shared {
|
2021-11-29 23:52:41 +01:00
|
|
|
name: "%s_shared",
|
2021-10-11 19:44:33 +02:00
|
|
|
%s // cpp_std: *string
|
2021-11-29 23:52:41 +01:00
|
|
|
%s // c_std: *string
|
2021-10-11 19:44:33 +02:00
|
|
|
%s // gnu_extensions: *bool
|
|
|
|
include_build_directory: false,
|
|
|
|
}
|
2021-11-29 23:52:41 +01:00
|
|
|
`, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
|
2021-11-08 18:56:31 +01:00
|
|
|
expectedBazelTargets: []string{
|
2021-11-29 23:52:41 +01:00
|
|
|
makeBazelTarget("cc_library_shared", name_prefix+"_shared", attrs),
|
2021-11-08 18:56:31 +01:00
|
|
|
},
|
2021-10-08 12:41:31 +02:00
|
|
|
})
|
|
|
|
}
|
2021-10-01 20:45:30 +02:00
|
|
|
}
|
2021-09-28 15:19:17 +02:00
|
|
|
|
|
|
|
func TestCcLibraryProtoSimple(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-28 15:19:17 +02:00
|
|
|
blueprint: soongCcProtoPreamble + `cc_library {
|
|
|
|
name: "foo",
|
|
|
|
srcs: ["foo.proto"],
|
|
|
|
include_build_directory: false,
|
|
|
|
}`,
|
|
|
|
expectedBazelTargets: []string{
|
|
|
|
makeBazelTarget("proto_library", "foo_proto", attrNameToString{
|
|
|
|
"srcs": `["foo.proto"]`,
|
|
|
|
"strip_import_prefix": `""`,
|
|
|
|
}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
|
|
|
|
"deps": `[":foo_proto"]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
|
2021-09-28 15:19:17 +02:00
|
|
|
"implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"deps": `[":libprotobuf-cpp-lite"]`,
|
|
|
|
}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
|
|
|
|
"dynamic_deps": `[":libprotobuf-cpp-lite"]`,
|
2021-09-28 15:19:17 +02:00
|
|
|
}),
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibraryProtoNoCanonicalPathFromRoot(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-28 15:19:17 +02:00
|
|
|
blueprint: soongCcProtoPreamble + `cc_library {
|
|
|
|
name: "foo",
|
|
|
|
srcs: ["foo.proto"],
|
|
|
|
proto: { canonical_path_from_root: false},
|
|
|
|
include_build_directory: false,
|
|
|
|
}`,
|
|
|
|
expectedBazelTargets: []string{
|
|
|
|
makeBazelTarget("proto_library", "foo_proto", attrNameToString{
|
|
|
|
"srcs": `["foo.proto"]`,
|
|
|
|
}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
|
|
|
|
"deps": `[":foo_proto"]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
|
2021-09-28 15:19:17 +02:00
|
|
|
"implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"deps": `[":libprotobuf-cpp-lite"]`,
|
|
|
|
}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
|
|
|
|
"dynamic_deps": `[":libprotobuf-cpp-lite"]`,
|
2021-09-28 15:19:17 +02:00
|
|
|
}),
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibraryProtoExplicitCanonicalPathFromRoot(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-28 15:19:17 +02:00
|
|
|
blueprint: soongCcProtoPreamble + `cc_library {
|
|
|
|
name: "foo",
|
|
|
|
srcs: ["foo.proto"],
|
|
|
|
proto: { canonical_path_from_root: true},
|
|
|
|
include_build_directory: false,
|
|
|
|
}`,
|
|
|
|
expectedBazelTargets: []string{
|
|
|
|
makeBazelTarget("proto_library", "foo_proto", attrNameToString{
|
|
|
|
"srcs": `["foo.proto"]`,
|
|
|
|
"strip_import_prefix": `""`,
|
|
|
|
}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
|
|
|
|
"deps": `[":foo_proto"]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
|
2021-09-28 15:19:17 +02:00
|
|
|
"implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"deps": `[":libprotobuf-cpp-lite"]`,
|
|
|
|
}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
|
|
|
|
"dynamic_deps": `[":libprotobuf-cpp-lite"]`,
|
2021-09-28 15:19:17 +02:00
|
|
|
}),
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibraryProtoFull(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-28 15:19:17 +02:00
|
|
|
blueprint: soongCcProtoPreamble + `cc_library {
|
|
|
|
name: "foo",
|
|
|
|
srcs: ["foo.proto"],
|
|
|
|
proto: {
|
|
|
|
canonical_path_from_root: false,
|
|
|
|
type: "full",
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
|
|
|
}`,
|
|
|
|
expectedBazelTargets: []string{
|
|
|
|
makeBazelTarget("proto_library", "foo_proto", attrNameToString{
|
|
|
|
"srcs": `["foo.proto"]`,
|
|
|
|
}), makeBazelTarget("cc_proto_library", "foo_cc_proto", attrNameToString{
|
|
|
|
"deps": `[":foo_proto"]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
|
2021-09-28 15:19:17 +02:00
|
|
|
"implementation_whole_archive_deps": `[":foo_cc_proto"]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"deps": `[":libprotobuf-cpp-full"]`,
|
|
|
|
}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
|
|
|
|
"dynamic_deps": `[":libprotobuf-cpp-full"]`,
|
2021-09-28 15:19:17 +02:00
|
|
|
}),
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibraryProtoLite(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-28 15:19:17 +02:00
|
|
|
blueprint: soongCcProtoPreamble + `cc_library {
|
|
|
|
name: "foo",
|
|
|
|
srcs: ["foo.proto"],
|
|
|
|
proto: {
|
|
|
|
canonical_path_from_root: false,
|
|
|
|
type: "lite",
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
|
|
|
}`,
|
|
|
|
expectedBazelTargets: []string{
|
|
|
|
makeBazelTarget("proto_library", "foo_proto", attrNameToString{
|
|
|
|
"srcs": `["foo.proto"]`,
|
|
|
|
}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
|
|
|
|
"deps": `[":foo_proto"]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
|
2021-09-28 15:19:17 +02:00
|
|
|
"implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
"deps": `[":libprotobuf-cpp-lite"]`,
|
|
|
|
}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
|
|
|
|
"dynamic_deps": `[":libprotobuf-cpp-lite"]`,
|
2021-09-28 15:19:17 +02:00
|
|
|
}),
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCcLibraryProtoExportHeaders(t *testing.T) {
|
|
|
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
2021-11-01 20:32:43 +01:00
|
|
|
moduleTypeUnderTest: "cc_library",
|
|
|
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
2021-09-28 15:19:17 +02:00
|
|
|
blueprint: soongCcProtoPreamble + `cc_library {
|
|
|
|
name: "foo",
|
|
|
|
srcs: ["foo.proto"],
|
|
|
|
proto: {
|
|
|
|
canonical_path_from_root: false,
|
|
|
|
export_proto_headers: true,
|
|
|
|
},
|
|
|
|
include_build_directory: false,
|
|
|
|
}`,
|
|
|
|
expectedBazelTargets: []string{
|
|
|
|
makeBazelTarget("proto_library", "foo_proto", attrNameToString{
|
|
|
|
"srcs": `["foo.proto"]`,
|
|
|
|
}), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
|
|
|
|
"deps": `[":foo_proto"]`,
|
2021-12-03 23:27:16 +01:00
|
|
|
}), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
|
|
|
|
"deps": `[":libprotobuf-cpp-lite"]`,
|
|
|
|
"whole_archive_deps": `[":foo_cc_proto_lite"]`,
|
|
|
|
}), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
|
|
|
|
"dynamic_deps": `[":libprotobuf-cpp-lite"]`,
|
2021-09-28 15:19:17 +02:00
|
|
|
"whole_archive_deps": `[":foo_cc_proto_lite"]`,
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|