diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-04-08 00:51:32 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-04-08 00:51:32 +0000 |
commit | bcadcb4c8f4a9fa0e1b9394f4e6f4aece5e830eb (patch) | |
tree | 7472d5b23513bfb60536c6e7b35dbd44ebf7ce19 | |
parent | fd04a29fe04f9ca47ce6adca683f7bfdb9156522 (diff) | |
parent | 222b4ab07103f4e6f133f6304c25f74353da3c11 (diff) | |
download | build-bcadcb4c8f4a9fa0e1b9394f4e6f4aece5e830eb.tar.gz |
Merge "Use BOARD_API_LEVEL to define ro.board.api_level" am: 222b4ab071
Original change: https://android-review.googlesource.com/c/platform/build/+/1662022
Change-Id: Iabc7bec442167a098ec6d8f663d05f90058b0984
-rw-r--r-- | core/main.mk | 7 | ||||
-rw-r--r-- | core/sysprop.mk | 2 | ||||
-rwxr-xr-x | tools/post_process_props.py | 57 | ||||
-rw-r--r-- | tools/test_post_process_props.py | 34 |
4 files changed, 97 insertions, 3 deletions
diff --git a/core/main.mk b/core/main.mk index 3362681b61..cc9c809cd3 100644 --- a/core/main.mk +++ b/core/main.mk @@ -295,6 +295,13 @@ endif ifdef BOARD_SHIPPING_API_LEVEL ADDITIONAL_VENDOR_PROPERTIES += \ ro.board.first_api_level=$(BOARD_SHIPPING_API_LEVEL) + +# To manually set the vendor API level of the vendor modules, BOARD_API_LEVEL can be used. +# The values of the GRF properties will be verified by post_process_props.py +ifdef BOARD_API_LEVEL +ADDITIONAL_VENDOR_PROPERTIES += \ + ro.board.api_level=$(BOARD_API_LEVEL) +endif endif ADDITIONAL_VENDOR_PROPERTIES += \ diff --git a/core/sysprop.mk b/core/sysprop.mk index 359d3d242c..daebdd341f 100644 --- a/core/sysprop.mk +++ b/core/sysprop.mk @@ -122,7 +122,7 @@ endif echo "$$(line)" >> $$@;\ )\ ) - $(hide) $(POST_PROCESS_PROPS) $$(_option) $$@ $(5) + $(hide) $(POST_PROCESS_PROPS) $$(_option) --sdk-version $(PLATFORM_SDK_VERSION) $$@ $(5) $(hide) $(foreach file,$(strip $(6)),\ if [ -f "$(file)" ]; then\ cat $(file) >> $$@;\ diff --git a/tools/post_process_props.py b/tools/post_process_props.py index d8c9cb157f..46bae29147 100755 --- a/tools/post_process_props.py +++ b/tools/post_process_props.py @@ -42,7 +42,59 @@ def mangle_build_prop(prop_list): # default to "adb". That might not the right policy there, but it's better # to be explicit. if not prop_list.get_value("persist.sys.usb.config"): - prop_list.put("persist.sys.usb.config", "none"); + prop_list.put("persist.sys.usb.config", "none") + +def validate_and_add_grf_props(prop_list, sdk_version): + """Validate GRF properties if exist. + + If ro.board.first_api_level is defined, check if its value is valid for the + sdk version. + Also, validate the value of ro.board.api_level if defined. If the + ro.board.api_level property is not defined, define it with the required + vendor API level for the GRF policy. + + Returns: + True if the GRF properties are valid. + """ + grf_api_level = prop_list.get_value("ro.board.first_api_level") + board_api_level = prop_list.get_value("ro.board.api_level") + + if not grf_api_level: + if board_api_level: + sys.stderr.write("error: non-GRF device must not define " + "ro.board.api_level\n") + return False + # non-GRF device skips the GRF validation test + return True + + grf_api_level = int(grf_api_level) + if grf_api_level > sdk_version: + sys.stderr.write("error: ro.board.first_api_level(%d) must be less than " + "or equal to ro.build.version.sdk(%d)\n" + % (grf_api_level, sdk_version)) + return False + + grf_window = 4 + grf_required_api_level = (grf_api_level + + grf_window * ((sdk_version - grf_api_level) // grf_window)) + + if board_api_level: + board_api_level = int(board_api_level) + if board_api_level < grf_api_level or board_api_level > sdk_version: + sys.stderr.write("error: ro.board.api_level(%d) must be neither less " + "than ro.board.first_api_level(%d) nor greater than " + "ro.build.version.sdk(%d)\n" + % (board_api_level, grf_api_level, sdk_version)) + return False + if board_api_level < grf_required_api_level: + sys.stderr.write("error: ro.board.api_level(%d) must be greater than or " + "equal to %d based on GRF policy\n" + % (board_api_level, grf_required_api_level)) + return False + else: + prop_list.put("ro.board.api_level", str(grf_required_api_level)) + + return True def validate(prop_list): """Validate the properties. @@ -215,6 +267,7 @@ def main(argv): default=False) parser.add_argument("filename") parser.add_argument("disallowed_keys", metavar="KEY", type=str, nargs="*") + parser.add_argument("--sdk-version", type=int, required=True) args = parser.parse_args() if not args.filename.endswith("/build.prop"): @@ -225,6 +278,8 @@ def main(argv): mangle_build_prop(props) if not override_optional_props(props, args.allow_dup): sys.exit(1) + if not validate_and_add_grf_props(props, args.sdk_version): + sys.exit(1) if not validate(props): sys.exit(1) diff --git a/tools/test_post_process_props.py b/tools/test_post_process_props.py index 12d52e566d..dd5f8ec971 100644 --- a/tools/test_post_process_props.py +++ b/tools/test_post_process_props.py @@ -53,7 +53,7 @@ class PropTestCase(unittest.TestCase): p.make_as_comment() self.assertTrue(p.is_comment()) - self.assertTrue("# a comment\n#a=b", str(p)) + self.assertEqual("# a comment\n#a=b", str(p)) class PropListTestcase(unittest.TestCase): def setUp(self): @@ -251,5 +251,37 @@ class PropListTestcase(unittest.TestCase): # because it's explicitly allowed self.assertTrue(override_optional_props(props, allow_dup=True)) + def test_validateGrfProps(self): + stderr_redirect = io.StringIO() + with contextlib.redirect_stderr(stderr_redirect): + props = PropList("hello") + props.put("ro.board.first_api_level","25") + + # ro.board.first_api_level must be less than or equal to the sdk version + self.assertFalse(validate_and_add_grf_props(props, 20)) + self.assertTrue(validate_and_add_grf_props(props, 26)) + # ro.board.api_level is automatically set + self.assertEqual(props.get_value("ro.board.api_level"), "25") + + props.get_all_props()[-1].make_as_comment() + self.assertTrue(validate_and_add_grf_props(props, 35)) + # ro.board.api_level is automatically set to the required GRF version + self.assertEqual(props.get_value("ro.board.api_level"), "33") + + props.get_all_props()[-1].make_as_comment() + # manually set ro.board.api_level to an invalid value + props.put("ro.board.api_level","20") + self.assertFalse(validate_and_add_grf_props(props, 26)) + + props.get_all_props()[-1].make_as_comment() + # manually set ro.board.api_level to a valid value + props.put("ro.board.api_level","26") + self.assertTrue(validate_and_add_grf_props(props, 26)) + # ro.board.api_level must be less than or equal to the sdk version + self.assertFalse(validate_and_add_grf_props(props, 25)) + # ro.board.api_level must be greater than or equal to the required GRF + # version + self.assertFalse(validate_and_add_grf_props(props, 30)) + if __name__ == '__main__': unittest.main(verbosity=2) |