diff --git a/python/tvm/driver/tvmc/composite_target.py b/python/tvm/driver/tvmc/composite_target.py index cfcf5a14c105..6c51dd168963 100644 --- a/python/tvm/driver/tvmc/composite_target.py +++ b/python/tvm/driver/tvmc/composite_target.py @@ -51,34 +51,42 @@ REGISTERED_CODEGEN = { "compute-library": { "config_key": None, + "pass_default": False, "pass_pipeline": partition_for_arm_compute_lib, }, "cmsis-nn": { "config_key": "relay.ext.cmsisnn.options", + "pass_default": False, "pass_pipeline": partition_for_cmsisnn, }, "ethos-n": { "config_key": "relay.ext.ethos-n.options", + "pass_default": False, "pass_pipeline": partition_for_ethosn, }, "ethos-u": { "config_key": "relay.ext.ethos-u.options", + "pass_default": False, "pass_pipeline": partition_for_ethosu, }, "bnns": { "config_key": None, + "pass_default": False, "pass_pipeline": partition_for_bnns, }, "vitis-ai": { "config_key": "relay.ext.vitis_ai.options", + "pass_default": False, "pass_pipeline": partition_for_vitis_ai, }, "clml": { "config_key": None, + "pass_default": False, "pass_pipeline": partition_for_clml, }, "mrvl": { "config_key": "relay.ext.mrvl.options", + "pass_default": True, "pass_pipeline": partition_for_mrvl, }, } diff --git a/python/tvm/driver/tvmc/target.py b/python/tvm/driver/tvmc/target.py index ec8215184ee3..b5eee0482377 100644 --- a/python/tvm/driver/tvmc/target.py +++ b/python/tvm/driver/tvmc/target.py @@ -69,10 +69,28 @@ def _generate_codegen_args(parser, codegen_name): for tvm_type, python_type in INTERNAL_TO_NATIVE_TYPE.items(): if field.type_info.startswith(tvm_type): target_option = field.name + default_value = None + + # Retrieve the default value string from attrs(field) of config node + # Eg: "default=target_cpu_name" + target_option_default_str = field.type_info.split("default=")[1] + + # Extract the defalut value based on the tvm type + if target_option_default_str and tvm_type == "runtime.String": + default_value = target_option_default_str + elif target_option_default_str and tvm_type == "IntImm": + # Extract the numeric value from the python Int string, Eg: T.int64(8) + str_slice = target_option_default_str.split("(")[1] + default_value = str_slice.split(")")[0] + + if codegen["pass_default"] is False: + default_value = None + target_group.add_argument( f"--target-{codegen_name}-{target_option}", type=python_type, help=field.description, + default=default_value, ) @@ -133,7 +151,6 @@ def reconstruct_target_args(args): codegen_options = _reconstruct_codegen_args(args, codegen_name) if codegen_options: reconstructed[codegen_name] = codegen_options - return reconstructed diff --git a/tests/python/driver/tvmc/test_target_options.py b/tests/python/driver/tvmc/test_target_options.py index 194047e7a628..d98a8d588e22 100644 --- a/tests/python/driver/tvmc/test_target_options.py +++ b/tests/python/driver/tvmc/test_target_options.py @@ -72,6 +72,21 @@ def test_target_to_argparse_for_mrvl_hybrid(): assert parsed.target_mrvl_mcpu == "cnf10kb" +@tvm.testing.requires_mrvl +def test_default_arg_for_mrvl_hybrid(): + parser = argparse.ArgumentParser() + generate_target_args(parser) + parsed, _ = parser.parse_known_args( + [ + "--target=mrvl, llvm", + ] + ) + assert parsed.target == "mrvl, llvm" + assert parsed.target_mrvl_mcpu == "cn10ka" + assert parsed.target_mrvl_num_tiles == 8 + + +@tvm.testing.requires_cmsisnn def test_mapping_target_args(): parser = argparse.ArgumentParser() generate_target_args(parser) @@ -129,6 +144,7 @@ def test_ethosu_compiler_attrs(): } +@tvm.testing.requires_cmsisnn def test_skip_target_from_codegen(): parser = argparse.ArgumentParser() generate_target_args(parser)