diff --git a/apps/microtvm/zephyr/template_project/CMakeLists.txt.template b/apps/microtvm/zephyr/template_project/CMakeLists.txt.template index 710cf3550c0d8..7f37efc599c29 100644 --- a/apps/microtvm/zephyr/template_project/CMakeLists.txt.template +++ b/apps/microtvm/zephyr/template_project/CMakeLists.txt.template @@ -23,7 +23,7 @@ set(ENV{QEMU_BIN_PATH} "${CMAKE_SOURCE_DIR}/qemu-hack") set(QEMU_PIPE "\${QEMU_PIPE}") # QEMU_PIPE is set by the calling TVM instance. -set(ENABLE_CMSIS ) + find_package(Zephyr HINTS $ENV{ZEPHYR_BASE}) project(microtvm_autogenerated_project) diff --git a/apps/microtvm/zephyr/template_project/microtvm_api_server.py b/apps/microtvm/zephyr/template_project/microtvm_api_server.py index 7b9538f6ce03c..ca47c6455d470 100644 --- a/apps/microtvm/zephyr/template_project/microtvm_api_server.py +++ b/apps/microtvm/zephyr/template_project/microtvm_api_server.py @@ -275,13 +275,13 @@ def _get_nrf_device_args(options): ), server.ProjectOption( "verbose", - optional=["build"], + optional=["generate_project"], type="bool", help="Run build with verbose output.", ), server.ProjectOption( "west_cmd", - optional=["build"], + optional=["generate_project"], default=WEST_CMD, type="str", help=( @@ -292,14 +292,14 @@ def _get_nrf_device_args(options): server.ProjectOption( "zephyr_base", required=(["generate_project", "open_transport"] if not ZEPHYR_BASE else None), - optional=(["generate_project", "open_transport", "build"] if ZEPHYR_BASE else ["build"]), + optional=(["generate_project", "open_transport"] if ZEPHYR_BASE else ["build"]), default=ZEPHYR_BASE, type="str", help="Path to the zephyr base directory.", ), server.ProjectOption( "zephyr_board", - required=["generate_project", "build", "flash", "open_transport"], + required=["generate_project", "flash", "open_transport"], choices=list(BOARD_PROPERTIES), type="str", help="Name of the Zephyr board to build for.", @@ -419,7 +419,7 @@ def _create_prj_conf(self, project_dir, options): f.write("\n") API_SERVER_CRT_LIBS_TOKEN = "" - ENABLE_CMSIS_TOKEN = "" + CMAKE_ARGS = "" CRT_LIBS_BY_PROJECT_TYPE = { "host_driven": "microtvm_rpc_server microtvm_rpc_common aot_executor_module aot_executor common", @@ -457,6 +457,28 @@ def _cmsis_required(self, project_path: Union[str, pathlib.Path]) -> bool: return True return False + def _generate_cmake_args(self, mlf_extracted_path, options) -> str: + cmake_args = "\n# cmake args\n" + if options.get("verbose"): + cmake_args += "set(CMAKE_VERBOSE_MAKEFILE TRUE)\n" + + if options.get("zephyr_base"): + cmake_args += f"set(ZEPHYR_BASE {options['zephyr_base']})\n" + + if options.get("west_cmd"): + cmake_args += f"set(WEST {options['west_cmd']})\n" + + if self._is_qemu(options): + # Some boards support more than one emulator, so ensure QEMU is set. + cmake_args += f"set(EMU_PLATFORM qemu)\n" + + cmake_args += f"set(BOARD {options['zephyr_board']})\n" + + enable_cmsis = self._cmsis_required(mlf_extracted_path) + cmake_args += f"set(ENABLE_CMSIS {str(enable_cmsis).upper()})\n" + + return cmake_args + def generate_project(self, model_library_format_path, standalone_crt_dir, project_dir, options): # Check Zephyr version version = self._get_platform_version(get_zephyr_base(options)) @@ -510,9 +532,8 @@ def generate_project(self, model_library_format_path, standalone_crt_dir, projec crt_libs = self.CRT_LIBS_BY_PROJECT_TYPE[options["project_type"]] line = line.replace("", crt_libs) - if self.ENABLE_CMSIS_TOKEN in line: - enable_cmsis = self._cmsis_required(extract_path) - line = line.replace(self.ENABLE_CMSIS_TOKEN, str(enable_cmsis).upper()) + if self.CMAKE_ARGS in line: + line = self._generate_cmake_args(extract_path, options) cmake_f.write(line) @@ -542,23 +563,7 @@ def generate_project(self, model_library_format_path, standalone_crt_dir, projec def build(self, options): BUILD_DIR.mkdir() - cmake_args = ["cmake", ".."] - if options.get("verbose"): - cmake_args.append("-DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE") - - if options.get("zephyr_base"): - cmake_args.append(f"-DZEPHYR_BASE:STRING={options['zephyr_base']}") - - if options.get("west_cmd"): - cmake_args.append(f"-DWEST={options['west_cmd']}") - - if self._is_qemu(options): - # Some boards support more than one emulator, so ensure QEMU is set. - cmake_args.append(f"-DEMU_PLATFORM=qemu") - - cmake_args.append(f"-DBOARD:STRING={options['zephyr_board']}") - - check_call(cmake_args, cwd=BUILD_DIR) + check_call(["cmake", ".."], cwd=BUILD_DIR) args = ["make", "-j2"] if options.get("verbose"):