diff --git a/cc/Android.bp b/cc/Android.bp index cc4d9bc45..c32cca8b8 100644 --- a/cc/Android.bp +++ b/cc/Android.bp @@ -93,6 +93,7 @@ bootstrap_go_package { "prebuilt_test.go", "proto_test.go", "test_data_test.go", + "vendor_public_library_test.go", "vendor_snapshot_test.go", ], pluginFor: ["soong_build"], diff --git a/cc/cc_test.go b/cc/cc_test.go index c56643b23..3d2160f2e 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -3236,72 +3236,6 @@ func TestCompilerFlags(t *testing.T) { } } -func TestVendorPublicLibraries(t *testing.T) { - ctx := testCc(t, ` - cc_library_headers { - name: "libvendorpublic_headers", - export_include_dirs: ["my_include"], - } - vendor_public_library { - name: "libvendorpublic", - symbol_file: "", - export_public_headers: ["libvendorpublic_headers"], - } - cc_library { - name: "libvendorpublic", - srcs: ["foo.c"], - vendor: true, - no_libcrt: true, - nocrt: true, - } - - cc_library { - name: "libsystem", - shared_libs: ["libvendorpublic"], - vendor: false, - srcs: ["foo.c"], - no_libcrt: true, - nocrt: true, - } - cc_library { - name: "libvendor", - shared_libs: ["libvendorpublic"], - vendor: true, - srcs: ["foo.c"], - no_libcrt: true, - nocrt: true, - } - `) - - coreVariant := "android_arm64_armv8-a_shared" - vendorVariant := "android_vendor.29_arm64_armv8-a_shared" - - // test if header search paths are correctly added - // _static variant is used since _shared reuses *.o from the static variant - cc := ctx.ModuleForTests("libsystem", strings.Replace(coreVariant, "_shared", "_static", 1)).Rule("cc") - cflags := cc.Args["cFlags"] - if !strings.Contains(cflags, "-Imy_include") { - t.Errorf("cflags for libsystem must contain -Imy_include, but was %#v.", cflags) - } - - // test if libsystem is linked to the stub - ld := ctx.ModuleForTests("libsystem", coreVariant).Rule("ld") - libflags := ld.Args["libFlags"] - stubPaths := getOutputPaths(ctx, coreVariant, []string{"libvendorpublic" + vendorPublicLibrarySuffix}) - if !strings.Contains(libflags, stubPaths[0].String()) { - t.Errorf("libflags for libsystem must contain %#v, but was %#v", stubPaths[0], libflags) - } - - // test if libvendor is linked to the real shared lib - ld = ctx.ModuleForTests("libvendor", vendorVariant).Rule("ld") - libflags = ld.Args["libFlags"] - stubPaths = getOutputPaths(ctx, vendorVariant, []string{"libvendorpublic"}) - if !strings.Contains(libflags, stubPaths[0].String()) { - t.Errorf("libflags for libvendor must contain %#v, but was %#v", stubPaths[0], libflags) - } - -} - func TestRecovery(t *testing.T) { ctx := testCc(t, ` cc_library_shared { diff --git a/cc/vendor_public_library_test.go b/cc/vendor_public_library_test.go new file mode 100644 index 000000000..ee9dc0079 --- /dev/null +++ b/cc/vendor_public_library_test.go @@ -0,0 +1,86 @@ +// 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 cc + +import ( + "strings" + "testing" +) + +func TestVendorPublicLibraries(t *testing.T) { + ctx := testCc(t, ` + cc_library_headers { + name: "libvendorpublic_headers", + export_include_dirs: ["my_include"], + } + vendor_public_library { + name: "libvendorpublic", + symbol_file: "", + export_public_headers: ["libvendorpublic_headers"], + } + cc_library { + name: "libvendorpublic", + srcs: ["foo.c"], + vendor: true, + no_libcrt: true, + nocrt: true, + } + + cc_library { + name: "libsystem", + shared_libs: ["libvendorpublic"], + vendor: false, + srcs: ["foo.c"], + no_libcrt: true, + nocrt: true, + } + cc_library { + name: "libvendor", + shared_libs: ["libvendorpublic"], + vendor: true, + srcs: ["foo.c"], + no_libcrt: true, + nocrt: true, + } + `) + + coreVariant := "android_arm64_armv8-a_shared" + vendorVariant := "android_vendor.29_arm64_armv8-a_shared" + + // test if header search paths are correctly added + // _static variant is used since _shared reuses *.o from the static variant + cc := ctx.ModuleForTests("libsystem", strings.Replace(coreVariant, "_shared", "_static", 1)).Rule("cc") + cflags := cc.Args["cFlags"] + if !strings.Contains(cflags, "-Imy_include") { + t.Errorf("cflags for libsystem must contain -Imy_include, but was %#v.", cflags) + } + + // test if libsystem is linked to the stub + ld := ctx.ModuleForTests("libsystem", coreVariant).Rule("ld") + libflags := ld.Args["libFlags"] + stubPaths := getOutputPaths(ctx, coreVariant, []string{"libvendorpublic" + vendorPublicLibrarySuffix}) + if !strings.Contains(libflags, stubPaths[0].String()) { + t.Errorf("libflags for libsystem must contain %#v, but was %#v", stubPaths[0], libflags) + } + + // test if libvendor is linked to the real shared lib + ld = ctx.ModuleForTests("libvendor", vendorVariant).Rule("ld") + libflags = ld.Args["libFlags"] + stubPaths = getOutputPaths(ctx, vendorVariant, []string{"libvendorpublic"}) + if !strings.Contains(libflags, stubPaths[0].String()) { + t.Errorf("libflags for libvendor must contain %#v, but was %#v", stubPaths[0], libflags) + } + +}