# SPDX-License-Identifier: Apache-2.0

set(arch_root_args)
foreach(root ${ARCH_ROOT})
  list(APPEND arch_root_args "--arch-root=${root}")
endforeach()

set(board_root_args)
foreach(root ${BOARD_ROOT})
  list(APPEND board_root_args "--board-root=${root}")
endforeach()

set(list_boards_commands
  COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/list_boards.py
          ${arch_root_args} ${board_root_args}
)

if(CMAKE_SCRIPT_MODE_FILE AND NOT CMAKE_PARENT_LIST_FILE)
# If this file is invoked as a script directly with -P:
# cmake [options] -P board.cmake
# Note that CMAKE_PARENT_LIST_FILE not being set ensures that this present
# file is being invoked directly with -P, and not via an include directive from
# some other script

# The options available are:
# ARCH_ROOT: Semi-colon separated arch roots
# BOARD_ROOT: Semi-colon separated board roots
# FILE_OUT: Set to a file path to save the boards to a file. If not defined the
#           the contents will be printed to stdout
cmake_minimum_required(VERSION 3.20.0)

set(NO_BOILERPLATE TRUE)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})

if (FILE_OUT)
  list(APPEND list_boards_commands OUTPUT_FILE "${FILE_OUT}")
endif()

execute_process(${list_boards_commands})
endif()
