Merge "Allow product-specific release configs." into main
diff --git a/bin/dirmods b/bin/dirmods
index d43506a..52d935a 100755
--- a/bin/dirmods
+++ b/bin/dirmods
@@ -14,25 +14,27 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+'''
+Lists all modules in the given directory or its decendant directories, as cached
+in module-info.json. If any build change is made, and it should be reflected in
+the output, you should run 'refreshmod' first.
+'''
+
import sys
sys.dont_write_bytecode = True
-import modinfo
-
+import argparse
import os
-# Get the path of a specific module in the android tree, as cached in module-info.json.
-# If any build change is made, and it should be reflected in the output, you should run
-# 'refreshmod' first. Note: This is the inverse of pathmod.
+import modinfo
-def main(argv):
- if len(argv) != 2:
- sys.stderr.write("usage: usage: dirmods <path>\n")
- sys.exit(1)
- d = argv[1]
- while d.endswith('/'):
- d = d[:-1]
+def main():
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument('path')
+ args = parser.parse_args()
+
+ d = os.path.normpath(args.path)
prefix = d + '/'
module_info = modinfo.ReadModuleInfo()
@@ -49,4 +51,4 @@
print(name)
if __name__ == "__main__":
- main(sys.argv)
+ main()
diff --git a/bin/outmod b/bin/outmod
index 681b405..022ff36 100755
--- a/bin/outmod
+++ b/bin/outmod
@@ -14,26 +14,29 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Get the path of a specific module in the android tree, as cached in module-info.json.
-# If any build change is made, and it should be reflected in the output, you should run
-# 'refreshmod' first. Note: This is the inverse of dirmods.
+'''
+Lists the output files of a specific module in the android tree, as cached in
+module-info.json. If any build change is made, and it should be reflected in the
+output, you should run 'refreshmod' first.
+'''
import sys
sys.dont_write_bytecode = True
-import modinfo
-
+import argparse
import os
+import modinfo
-def main(argv):
- if len(argv) != 2:
- sys.stderr.write("usage: outmod <module>\n")
- sys.exit(1)
- for output in modinfo.GetModule(modinfo.ReadModuleInfo(), argv[1])['installed']:
- print(os.path.join(os.getenv("ANDROID_BUILD_TOP"), output))
+def main():
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument('module')
+ args = parser.parse_args()
+
+ for output in modinfo.GetModule(modinfo.ReadModuleInfo(), args.module)['installed']:
+ print(os.path.join(os.getenv("ANDROID_BUILD_TOP", ""), output))
if __name__ == "__main__":
- main(sys.argv)
+ main()
diff --git a/bin/pathmod b/bin/pathmod
index f5560ba..70cf958 100755
--- a/bin/pathmod
+++ b/bin/pathmod
@@ -14,25 +14,28 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Get the path of a specific module in the android tree, as cached in module-info.json.
-# If any build change is made, and it should be reflected in the output, you should run
-# 'refreshmod' first. Note: This is the inverse of dirmods.
+'''
+Get the path of a specific module in the android tree, as cached in module-info.json.
+If any build change is made, and it should be reflected in the output, you should run
+'refreshmod' first. Note: This is the inverse of dirmods.
+'''
import sys
sys.dont_write_bytecode = True
-import modinfo
-
+import argparse
import os
+import modinfo
-def main(argv):
- if len(argv) != 2:
- sys.stderr.write("usage: pathmod <module>\n")
- sys.exit(1)
- path = modinfo.GetModule(modinfo.ReadModuleInfo(), argv[1])['path'][0]
+def main():
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument('module')
+ args = parser.parse_args()
+
+ path = modinfo.GetModule(modinfo.ReadModuleInfo(), args.module)['path'][0]
print(os.path.join(os.getenv("ANDROID_BUILD_TOP", ""), path))
if __name__ == "__main__":
- main(sys.argv)
+ main()
diff --git a/cc/androidmk.go b/cc/androidmk.go
index e1bc336..62ba4de 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -486,14 +486,14 @@
ctx.subAndroidMk(entries, p.libraryDecorator)
if p.shared() {
ctx.subAndroidMk(entries, &p.prebuiltLinker)
- androidMkWriteAllowUndefinedSymbols(p.baseLinker, entries)
+ androidMkWritePrebuiltOptions(p.baseLinker, entries)
}
}
func (p *prebuiltBinaryLinker) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
ctx.subAndroidMk(entries, p.binaryDecorator)
ctx.subAndroidMk(entries, &p.prebuiltLinker)
- androidMkWriteAllowUndefinedSymbols(p.baseLinker, entries)
+ androidMkWritePrebuiltOptions(p.baseLinker, entries)
}
func (a *apiLibraryDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
@@ -524,11 +524,17 @@
})
}
-func androidMkWriteAllowUndefinedSymbols(linker *baseLinker, entries *android.AndroidMkEntries) {
+func androidMkWritePrebuiltOptions(linker *baseLinker, entries *android.AndroidMkEntries) {
allow := linker.Properties.Allow_undefined_symbols
if allow != nil {
entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
entries.SetBool("LOCAL_ALLOW_UNDEFINED_SYMBOLS", *allow)
})
}
+ ignore := linker.Properties.Ignore_max_page_size
+ if ignore != nil {
+ entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
+ entries.SetBool("LOCAL_IGNORE_MAX_PAGE_SIZE", *ignore)
+ })
+ }
}
diff --git a/cc/linker.go b/cc/linker.go
index 1b5a33a..1675df6 100644
--- a/cc/linker.go
+++ b/cc/linker.go
@@ -65,6 +65,10 @@
// This flag should only be necessary for compiling low-level libraries like libc.
Allow_undefined_symbols *bool `android:"arch_variant"`
+ // ignore max page size. By default, max page size must be the
+ // max page size set for the target.
+ Ignore_max_page_size *bool `android:"arch_variant"`
+
// don't link in libclang_rt.builtins-*.a
No_libcrt *bool `android:"arch_variant"`
diff --git a/genrule/genrule.go b/genrule/genrule.go
index dd980cb..26dad01 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -126,7 +126,7 @@
// $(out): a single output file.
// $(genDir): the sandbox directory for this tool; contains $(out).
// $$: a literal $
- Cmd *string
+ Cmd proptools.Configurable[string] `android:"replace_instead_of_append"`
// name of the modules (if any) that produces the host executable. Leave empty for
// prebuilts or scripts that do not need a module to build them.
@@ -403,7 +403,7 @@
var outputFiles android.WritablePaths
var zipArgs strings.Builder
- cmd := String(g.properties.Cmd)
+ cmd := g.properties.Cmd.GetOrDefault(ctx, "")
if g.CmdModifier != nil {
cmd = g.CmdModifier(ctx, cmd)
}