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

Commit 02e8a0db authored by Spandan Das's avatar Spandan Das Committed by Gerrit Code Review
Browse files

Merge "Deprecate api bp2build of ndk_library and ndk_headers"

parents 780ea1f8 230c312f
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -72,7 +72,6 @@ bootstrap_go_package {
        "license_conversion_test.go",
        "license_kind_conversion_test.go",
        "linker_config_conversion_test.go",
        "ndk_headers_conversion_test.go",
        "package_conversion_test.go",
        "performance_test.go",
        "prebuilt_etc_conversion_test.go",
+0 −164
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 bp2build

import (
	"fmt"
	"testing"

	"android/soong/cc"
)

func TestNdkHeaderFilepaths(t *testing.T) {
	bpTemplate := `
	ndk_headers {
		name: "foo",
		srcs: %v,
		exclude_srcs: %v,
	}
	`
	testCases := []struct {
		desc         string
		srcs         string
		excludeSrcs  string
		expectedHdrs string
	}{
		{
			desc:         "Single header file",
			srcs:         `["foo.h"]`,
			excludeSrcs:  `[]`,
			expectedHdrs: `["foo.h"]`,
		},
		{
			desc:        "Multiple header files",
			srcs:        `["foo.h", "foo_other.h"]`,
			excludeSrcs: `[]`,
			expectedHdrs: `[
        "foo.h",
        "foo_other.h",
    ]`,
		},
		{
			desc:         "Multiple header files with excludes",
			srcs:         `["foo.h", "foo_other.h"]`,
			excludeSrcs:  `["foo_other.h"]`,
			expectedHdrs: `["foo.h"]`,
		},
		{
			desc:        "Multiple header files via Soong-supported globs",
			srcs:        `["*.h"]`,
			excludeSrcs: `[]`,
			expectedHdrs: `[
        "foo.h",
        "foo_other.h",
    ]`,
		},
	}
	for _, testCase := range testCases {
		fs := map[string]string{
			"foo.h":       "",
			"foo_other.h": "",
		}
		expectedApiContributionTargetName := "foo.contribution"
		expectedBazelTarget := MakeBazelTargetNoRestrictions(
			"cc_api_headers",
			expectedApiContributionTargetName,
			AttrNameToString{
				"hdrs": testCase.expectedHdrs,
			},
		)
		RunApiBp2BuildTestCase(t, cc.RegisterNdkModuleTypes, Bp2buildTestCase{
			Description:          testCase.desc,
			Blueprint:            fmt.Sprintf(bpTemplate, testCase.srcs, testCase.excludeSrcs),
			ExpectedBazelTargets: []string{expectedBazelTarget},
			Filesystem:           fs,
		})
	}
}

func TestNdkHeaderIncludeDir(t *testing.T) {
	bpTemplate := `
	ndk_headers {
		name: "foo",
		from: %v,
		to: "this/value/is/ignored",
	}
	`
	testCases := []struct {
		desc               string
		from               string
		expectedIncludeDir string
	}{
		{
			desc:               "Empty `from` value",
			from:               `""`,
			expectedIncludeDir: `""`,
		},
		{
			desc:               "Non-Empty `from` value",
			from:               `"include"`,
			expectedIncludeDir: `"include"`,
		},
	}
	for _, testCase := range testCases {
		expectedApiContributionTargetName := "foo.contribution"
		expectedBazelTarget := MakeBazelTargetNoRestrictions(
			"cc_api_headers",
			expectedApiContributionTargetName,
			AttrNameToString{
				"include_dir": testCase.expectedIncludeDir,
			},
		)
		RunApiBp2BuildTestCase(t, cc.RegisterNdkModuleTypes, Bp2buildTestCase{
			Description:          testCase.desc,
			Blueprint:            fmt.Sprintf(bpTemplate, testCase.from),
			ExpectedBazelTargets: []string{expectedBazelTarget},
		})
	}
}

func TestVersionedNdkHeaderFilepaths(t *testing.T) {
	bp := `
	versioned_ndk_headers {
		name: "common_libc",
		from: "include"
	}
	`
	fs := map[string]string{
		"include/math.h":    "",
		"include/stdio.h":   "",
		"include/arm/arm.h": "",
		"include/x86/x86.h": "",
	}
	expectedApiContributionTargetName := "common_libc.contribution"
	expectedBazelTarget := MakeBazelTargetNoRestrictions(
		"cc_api_headers",
		expectedApiContributionTargetName,
		AttrNameToString{
			"include_dir": `"include"`,
			"hdrs": `[
        "include/math.h",
        "include/stdio.h",
        "include/arm/arm.h",
        "include/x86/x86.h",
    ]`,
		},
	)
	RunApiBp2BuildTestCase(t, cc.RegisterNdkModuleTypes, Bp2buildTestCase{
		Blueprint:            bp,
		Filesystem:           fs,
		ExpectedBazelTargets: []string{expectedBazelTarget},
	})
}
+0 −77
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 bp2build

import (
	"testing"

	"android/soong/cc"
)

func TestNdkLibraryContributionSymbolFile(t *testing.T) {
	bp := `
	ndk_library {
		name: "libfoo",
		symbol_file: "libfoo.map.txt",
	}
	`
	expectedBazelTarget := MakeBazelTargetNoRestrictions(
		"cc_api_contribution",
		"libfoo.ndk.contribution",
		AttrNameToString{
			"api":                    `"libfoo.map.txt"`,
			"api_surfaces":           `["publicapi"]`,
			"library_name":           `"libfoo"`,
			"target_compatible_with": `["//build/bazel/platforms/os:android"]`,
		},
	)
	RunApiBp2BuildTestCase(t, cc.RegisterNdkModuleTypes, Bp2buildTestCase{
		Blueprint:            bp,
		ExpectedBazelTargets: []string{expectedBazelTarget},
	})
}

func TestNdkLibraryContributionHeaders(t *testing.T) {
	bp := `
	ndk_library {
		name: "libfoo",
		symbol_file: "libfoo.map.txt",
		export_header_libs: ["libfoo_headers"],
	}
	`
	fs := map[string]string{
		"header_directory/Android.bp": `
		ndk_headers {
			name: "libfoo_headers",
		}
		`,
	}
	expectedBazelTarget := MakeBazelTargetNoRestrictions(
		"cc_api_contribution",
		"libfoo.ndk.contribution",
		AttrNameToString{
			"api":                    `"libfoo.map.txt"`,
			"api_surfaces":           `["publicapi"]`,
			"library_name":           `"libfoo"`,
			"hdrs":                   `["//header_directory:libfoo_headers.contribution"]`,
			"target_compatible_with": `["//build/bazel/platforms/os:android"]`,
		},
	)
	RunApiBp2BuildTestCase(t, cc.RegisterNdkModuleTypes, Bp2buildTestCase{
		Blueprint:            bp,
		Filesystem:           fs,
		ExpectedBazelTargets: []string{expectedBazelTarget},
	})
}
+0 −2
Original line number Diff line number Diff line
@@ -4100,8 +4100,6 @@ func (c *Module) ConvertWithApiBp2build(ctx android.TopDownMutatorContext) {
		// Aggressively generate api targets for all header modules
		// This is necessary since the header module does not know if it is a dep of API surface stub library
		apiLibraryHeadersBp2Build(ctx, c)
	case ndkLibrary:
		ndkLibraryBp2build(ctx, c)
	}
}

+0 −46
Original line number Diff line number Diff line
@@ -19,10 +19,8 @@ import (
	"path/filepath"

	"github.com/google/blueprint"
	"github.com/google/blueprint/proptools"

	"android/soong/android"
	"android/soong/bazel"
)

var (
@@ -81,7 +79,6 @@ type headerProperties struct {

type headerModule struct {
	android.ModuleBase
	android.BazelModuleBase

	properties headerProperties

@@ -147,39 +144,6 @@ func (m *headerModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	}
}

// TODO(b/243196151): Populate `system` and `arch` metadata
type bazelCcApiHeadersAttributes struct {
	Hdrs        bazel.LabelListAttribute
	Include_dir *string
}

func createCcApiHeadersTarget(ctx android.TopDownMutatorContext, includes []string, excludes []string, include_dir *string) {
	props := bazel.BazelTargetModuleProperties{
		Rule_class:        "cc_api_headers",
		Bzl_load_location: "//build/bazel/rules/apis:cc_api_contribution.bzl",
	}
	attrs := &bazelCcApiHeadersAttributes{
		Hdrs: bazel.MakeLabelListAttribute(
			android.BazelLabelForModuleSrcExcludes(
				ctx,
				includes,
				excludes,
			),
		),
		Include_dir: include_dir,
	}
	ctx.CreateBazelTargetModule(props, android.CommonAttributes{
		Name: android.ApiContributionTargetName(ctx.ModuleName()),
	}, attrs)
}

var _ android.ApiProvider = (*headerModule)(nil)

func (h *headerModule) ConvertWithApiBp2build(ctx android.TopDownMutatorContext) {
	// Generate `cc_api_headers` target for Multi-tree API export
	createCcApiHeadersTarget(ctx, h.properties.Srcs, h.properties.Exclude_srcs, h.properties.From)
}

// ndk_headers installs the sets of ndk headers defined in the srcs property
// to the sysroot base + "usr/include" + to directory + directory component.
// ndk_headers requires the license file to be specified. Example:
@@ -226,7 +190,6 @@ type versionedHeaderProperties struct {
// Note that this is really only built to handle bionic/libc/include.
type versionedHeaderModule struct {
	android.ModuleBase
	android.BazelModuleBase

	properties versionedHeaderProperties

@@ -264,15 +227,6 @@ func (m *versionedHeaderModule) GenerateAndroidBuildActions(ctx android.ModuleCo
	processHeadersWithVersioner(ctx, fromSrcPath, toOutputPath, srcFiles, installPaths)
}

var _ android.ApiProvider = (*versionedHeaderModule)(nil)

func (h *versionedHeaderModule) ConvertWithApiBp2build(ctx android.TopDownMutatorContext) {
	// Glob all .h files under `From`
	includePattern := headerGlobPattern(proptools.String(h.properties.From))
	// Generate `cc_api_headers` target for Multi-tree API export
	createCcApiHeadersTarget(ctx, []string{includePattern}, []string{}, h.properties.From)
}

func processHeadersWithVersioner(ctx android.ModuleContext, srcDir, outDir android.Path,
	srcFiles android.Paths, installPaths []android.WritablePath) android.Path {
	// The versioner depends on a dependencies directory to simplify determining include paths
Loading