Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73bcafcb authored by Spandan Das's avatar Spandan Das
Browse files

Add a property in ndk_library for header contributions

The new property will be used to determine the header file contributions of
ndk_library(s) to the Public API surface. This should be a no-op for
regular Soong builds.

This will be used by a future bp2build converter to populate
the BUILD files for Multi-tree `cc_api_contribution` targets

(Also noticed that sdk_test.go was never added to testSrcs, which this
CL should fix)

Test: go test ./cc
Test: TH

Change-Id: Ieea093e4aac68e341c6414b6cafe02c441643cdf
parent f9f9ed7c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -99,10 +99,12 @@ bootstrap_go_package {
        "library_headers_test.go",
        "library_stub_test.go",
        "library_test.go",
        "ndk_test.go",
        "object_test.go",
        "prebuilt_test.go",
        "proto_test.go",
        "sanitize_test.go",
        "sdk_test.go",
        "test_data_test.go",
        "tidy_test.go",
        "vendor_public_library_test.go",
+4 −1
Original line number Diff line number Diff line
@@ -2350,7 +2350,10 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {

		lib = GetReplaceModuleName(lib, GetSnapshot(c, &snapshotInfo, actx).HeaderLibs)

		if c.IsStubs() {
		if c.isNDKStubLibrary() {
			// ndk_headers do not have any variations
			actx.AddFarVariationDependencies([]blueprint.Variation{}, depTag, lib)
		} else if c.IsStubs() {
			actx.AddFarVariationDependencies(append(ctx.Target().Variations(), c.ImageVariation()),
				depTag, lib)
		} else {
+14 −6
Original line number Diff line number Diff line
@@ -85,9 +85,11 @@ var (
// Example:
//
// ndk_library {
//
//	name: "libfoo",
//	symbol_file: "libfoo.map.txt",
//	first_version: "9",
//
// }
type libraryProperties struct {
	// Relative path to the symbol map.
@@ -109,6 +111,9 @@ type libraryProperties struct {
	// where it is enabled pending a fix for http://b/190554910 (no debug info
	// for asm implemented symbols).
	Allow_untyped_symbols *bool

	// Headers presented by this library to the Public API Surface
	Export_header_libs []string
}

type stubDecorator struct {
@@ -483,8 +488,11 @@ func (c *stubDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) O
	return objs
}

// Add a dependency on the header modules of this ndk_library
func (linker *stubDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
	return Deps{}
	return Deps{
		HeaderLibs: linker.properties.Export_header_libs,
	}
}

func (linker *stubDecorator) Name(name string) string {

cc/ndk_test.go

0 → 100644
+56 −0
Original line number Diff line number Diff line
// Copyright 2022 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 (
	"testing"

	"github.com/google/blueprint"

	"android/soong/android"
)

func TestNdkHeaderDependency(t *testing.T) {
	isDep := func(ctx *android.TestResult, from, toExpected android.Module) bool {
		foundDep := false
		ctx.VisitDirectDeps(from, func(toActual blueprint.Module) {
			if toExpected.Name() == toActual.Name() {
				foundDep = true
			}
		})
		return foundDep
	}
	bp := `
	ndk_library {
		name: "libfoo",
		first_version: "29",
		symbol_file: "libfoo.map.txt",
		export_header_libs: ["libfoo_headers"],
	}
	ndk_headers {
		name: "libfoo_headers",
		srcs: ["foo.h"],
		license: "NOTICE",
	}
	//This module is needed since Soong creates a dep edge on source
	cc_library {
		name: "libfoo",
	}
	`
	ctx := prepareForCcTest.RunTestWithBp(t, bp)
	libfoo := ctx.ModuleForTests("libfoo.ndk", "android_arm64_armv8-a_sdk_shared")
	libfoo_headers := ctx.ModuleForTests("libfoo_headers", "")
	android.AssertBoolEquals(t, "Could not find headers of ndk_library", true, isDep(ctx, libfoo.Module(), libfoo_headers.Module()))
}
+1 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) {
	ctx.RegisterModuleType("ndk_prebuilt_static_stl", NdkPrebuiltStaticStlFactory)
	ctx.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory)
	ctx.RegisterModuleType("ndk_library", NdkLibraryFactory)
	ctx.RegisterModuleType("ndk_headers", ndkHeadersFactory)
}

func GatherRequiredDepsForTest(oses ...android.OsType) string {