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

Commit 4c569466 authored by Trevor Radcliffe's avatar Trevor Radcliffe Committed by Gerrit Code Review
Browse files

Merge "Delete SyspropMutator"

parents 607a995f 2db49e32
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -45,7 +45,6 @@ bootstrap_go_package {
        "snapshot_utils.go",
        "stl.go",
        "strip.go",
        "sysprop.go",
        "tidy.go",
        "util.go",
        "vendor_snapshot.go",
+0 −19
Original line number Diff line number Diff line
@@ -51,7 +51,6 @@ func RegisterCCBuildComponents(ctx android.RegistrationContext) {
		ctx.BottomUp("test_per_src", TestPerSrcMutator).Parallel()
		ctx.BottomUp("version", versionMutator).Parallel()
		ctx.BottomUp("begin", BeginMutator).Parallel()
		ctx.BottomUp("sysprop_cc", SyspropMutator).Parallel()
	})

	ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) {
@@ -2392,18 +2391,8 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
		}
	}

	// sysprop_library has to support both C++ and Java. So sysprop_library internally creates one
	// C++ implementation library and one Java implementation library. When a module links against
	// sysprop_library, the C++ implementation library has to be linked. syspropImplLibraries is a
	// map from sysprop_library to implementation library; it will be used in whole_static_libs,
	// static_libs, and shared_libs.
	syspropImplLibraries := syspropImplLibraries(actx.Config())

	for _, lib := range deps.WholeStaticLibs {
		depTag := libraryDependencyTag{Kind: staticLibraryDependency, wholeStatic: true, reexportFlags: true}
		if impl, ok := syspropImplLibraries[lib]; ok {
			lib = impl
		}

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

@@ -2421,10 +2410,6 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
			depTag.excludeInApex = true
		}

		if impl, ok := syspropImplLibraries[lib]; ok {
			lib = impl
		}

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

		actx.AddVariationDependencies([]blueprint.Variation{
@@ -2454,10 +2439,6 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
			depTag.excludeInApex = true
		}

		if impl, ok := syspropImplLibraries[lib]; ok {
			lib = impl
		}

		name, version := StubsLibNameAndVersion(lib)
		sharedLibNames = append(sharedLibNames, name)

cc/sysprop.go

deleted100644 → 0
+0 −69
Original line number Diff line number Diff line
// Copyright (C) 2019 The Android Open Source Project
//
// 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

// This file contains a map to redirect dependencies towards sysprop_library.
// As sysprop_library has to support both Java and C++, sysprop_library internally
// generates cc_library and java_library. For example, the following sysprop_library
//
//     sysprop_library {
//         name: "foo",
//     }
//
// will internally generate with prefix "lib"
//
//     cc_library {
//         name: "libfoo",
//     }
//
// When a cc module links against "foo", build system will redirect the
// dependency to "libfoo". To do that, SyspropMutator gathers all sysprop_library,
// records their cc implementation library names to a map. The map will be used in
// cc.Module.DepsMutator.

import (
	"sync"

	"android/soong/android"
)

type syspropLibraryInterface interface {
	BaseModuleName() string
	CcImplementationModuleName() string
}

var (
	syspropImplLibrariesKey  = android.NewOnceKey("syspropImplLibirares")
	syspropImplLibrariesLock sync.Mutex
)

func syspropImplLibraries(config android.Config) map[string]string {
	return config.Once(syspropImplLibrariesKey, func() interface{} {
		return make(map[string]string)
	}).(map[string]string)
}

// gather list of sysprop libraries
func SyspropMutator(mctx android.BottomUpMutatorContext) {
	if m, ok := mctx.Module().(syspropLibraryInterface); ok {
		syspropImplLibraries := syspropImplLibraries(mctx.Config())
		syspropImplLibrariesLock.Lock()
		defer syspropImplLibrariesLock.Unlock()

		// BaseModuleName is the name of sysprop_library
		// CcImplementationModuleName is the name of cc_library generated by sysprop_library
		syspropImplLibraries[m.BaseModuleName()] = m.CcImplementationModuleName()
	}
}
+4 −1
Original line number Diff line number Diff line
@@ -365,7 +365,10 @@ func (m *syspropLibrary) ShouldSupportSdkVersion(ctx android.BaseModuleContext,
// sysprop_library creates schematized APIs from sysprop description files (.sysprop).
// Both Java and C++ modules can link against sysprop_library, and API stability check
// against latest APIs (see build/soong/scripts/freeze-sysprop-api-files.sh)
// is performed.
// is performed. Note that the generated C++ module has its name prefixed with
// `lib`, and it is this module that should be depended on from other C++
// modules; i.e., if the sysprop_library module is named `foo`, C++ modules
// should depend on `libfoo`.
func syspropLibraryFactory() android.Module {
	m := &syspropLibrary{}

+5 −5
Original line number Diff line number Diff line
@@ -209,32 +209,32 @@ func TestSyspropLibrary(t *testing.T) {
		cc_library {
			name: "cc-client-platform",
			srcs: ["d.cpp"],
			static_libs: ["sysprop-platform"],
			static_libs: ["libsysprop-platform"],
		}

		cc_library_static {
			name: "cc-client-platform-static",
			srcs: ["d.cpp"],
			whole_static_libs: ["sysprop-platform"],
			whole_static_libs: ["libsysprop-platform"],
		}

		cc_library {
			name: "cc-client-product",
			srcs: ["d.cpp"],
			product_specific: true,
			static_libs: ["sysprop-platform-on-product", "sysprop-vendor-on-product"],
			static_libs: ["libsysprop-platform-on-product", "libsysprop-vendor-on-product"],
		}

		cc_library {
			name: "cc-client-vendor",
			srcs: ["d.cpp"],
			soc_specific: true,
			static_libs: ["sysprop-platform", "sysprop-vendor"],
			static_libs: ["libsysprop-platform", "libsysprop-vendor"],
		}

		cc_binary_host {
			name: "hostbin",
			static_libs: ["sysprop-platform"],
			static_libs: ["libsysprop-platform"],
		}
	`)