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

Commit f8f68e8f authored by Anton Hansson's avatar Anton Hansson
Browse files

Merge cherrypicks of [1879682] into sc-mainline-prod.

Make PrebuiltStubsSources support srcjar properly

Initially prebuilt stub sources only supported directories as input, but
support has been added for packaging them up in srcjar as well. However
the build action was not updated accordingly.

Add support to determine if our input is a srcjar, and if so just use
it directly.

Bug: 204978699
Test: m sdk (with prebuilts)
(cherry picked from commit 86758ac9)

Merged-In: Iedf5bf3444f1bb7249825e76d2aaa65269dd081f
Change-Id: Iedf5bf3444f1bb7249825e76d2aaa65269dd081f
parents 3adf3c52 fb41d463
Loading
Loading
Loading
Loading
+28 −23
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ package java

import (
	"fmt"
	"path/filepath"
	"strings"

	"github.com/google/blueprint/proptools"
@@ -772,7 +773,7 @@ type PrebuiltStubsSources struct {

	properties PrebuiltStubsSourcesProperties

	stubsSrcJar android.ModuleOutPath
	stubsSrcJar android.Path
}

func (p *PrebuiltStubsSources) OutputFiles(tag string) (android.Paths, error) {
@@ -789,35 +790,39 @@ func (d *PrebuiltStubsSources) StubsSrcJar() android.Path {
}

func (p *PrebuiltStubsSources) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	p.stubsSrcJar = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"stubs.srcjar")

	if len(p.properties.Srcs) != 1 {
		ctx.PropertyErrorf("srcs", "must only specify one directory path, contains %d paths", len(p.properties.Srcs))
		ctx.PropertyErrorf("srcs", "must only specify one directory path or srcjar, contains %d paths", len(p.properties.Srcs))
		return
	}

	localSrcDir := p.properties.Srcs[0]
	src := p.properties.Srcs[0]
	if filepath.Ext(src) == ".srcjar" {
		// This is a srcjar. We can use it directly.
		p.stubsSrcJar = android.PathForModuleSrc(ctx, src)
	} else {
		outPath := android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"stubs.srcjar")

		// This is a directory. Glob the contents just in case the directory does not exist.
		srcGlob := src + "/**/*"
		srcPaths := android.PathsForModuleSrc(ctx, []string{srcGlob})

		// Although PathForModuleSrc can return nil if either the path doesn't exist or
		// the path components are invalid it won't in this case because no components
		// are specified and the module directory must exist in order to get this far.
	srcDir := android.PathForModuleSrc(ctx).(android.SourcePath).Join(ctx, localSrcDir)

	// Glob the contents of the directory just in case the directory does not exist.
	srcGlob := localSrcDir + "/**/*"
	srcPaths := android.PathsForModuleSrc(ctx, []string{srcGlob})
		srcDir := android.PathForModuleSrc(ctx).(android.SourcePath).Join(ctx, src)

		rule := android.NewRuleBuilder(pctx, ctx)
		rule.Command().
			BuiltTool("soong_zip").
			Flag("-write_if_changed").
			Flag("-jar").
		FlagWithOutput("-o ", p.stubsSrcJar).
			FlagWithOutput("-o ", outPath).
			FlagWithArg("-C ", srcDir.String()).
		FlagWithRspFileInputList("-r ", p.stubsSrcJar.ReplaceExtension(ctx, "rsp"), srcPaths)

			FlagWithRspFileInputList("-r ", outPath.ReplaceExtension(ctx, "rsp"), srcPaths)
		rule.Restat()

		rule.Build("zip src", "Create srcjar from prebuilt source")
		p.stubsSrcJar = outPath
	}
}

func (p *PrebuiltStubsSources) Prebuilt() *android.Prebuilt {