# TODO: Set to make when make is used as a generator
set(CMAKE_MAKE_PROGRAM ninja)
get_filename_component(generator ${CMAKE_MAKE_PROGRAM} NAME)

set(arch_list
  arc
  arm
  nios2
  riscv32
  x86
  xtensa
  )

set(board_dir $ENV{ZEPHYR_BASE}/boards)

foreach(arch ${arch_list})
  set(board_arch_dir ${board_dir}/${arch})

  # Match the .yanl files in the board directories to make sure we are
  # finding boards, e.g. qemu_xtensa/qemu_xtensa.yaml
  file(GLOB_RECURSE yamls_for_${arch}
    RELATIVE ${board_arch_dir}
    ${board_arch_dir}/*.yaml
    )

  # The above gives a list like
  # nrf51_blenano/nrf51_blenano_yaml;nrf51_pca10028/nrf51_pca10028_yaml
  # we construct a list of board names by removing both the .yaml
  # suffix and the path.
  set(boards_for_${arch} "")
  foreach(yaml_path ${yamls_for_${arch}})
    get_filename_component(board ${yaml_path} NAME_WE)

    list(APPEND boards_for_${arch} ${board})
  endforeach()
endforeach()

message("Cleaning targets:")
message("  clean     - Remove most generated files but keep configuration and backup files")
message("  pristine  - Remove all files in the build directory")
message("")
message("Configuration targets:")
message("")
message("  run <${generator} kconfig-usage>")
message("")
message("Other generic targets:")
message("  all          - Build a zephyr application")
message("  run          - Build a zephyr application and run it if the board supports emulation")
message("  flash        - Build and flash an application")
message("  debug        - Build and debug an application using GDB")
message("  debugserver  - Build and start a GDB server (port 1234 for Qemu targets)")
message("  ram_report   - Build and create RAM usage report")
message("  rom_report   - Build and create ROM usage report")
message("  usage        - Display this text")
message("")
message("Supported Boards:")
message("")
message("  To generate project files for one of the supported boards below, run:")
message("")
message("  $ cmake -DBOARD=<BOARD NAME> -Bpath/to/build_dir -Hpath/to/source_dir")
message("")
message("  or")
message("")
message("  $ export BOARD=<BOARD NAME>")
message("  $ cmake -Bpath/to/build_dir -Hpath/to/source_dir")
message("")
foreach(arch ${arch_list})
  message(" ${arch}:")
  foreach(board ${boards_for_${arch}})
    message("   ${board}")
  endforeach()
endforeach()
message("")
message("Build flags:")
message("")
message("  ${generator} VERBOSE=1 [targets] verbose build")
message("  cmake -DW=n   Enable extra gcc checks, n=1,2,3 where")
message("		1: warnings which may be relevant and do not occur too often")
message("		2: warnings which occur quite often but may still be relevant")
message("		3: more obscure warnings, can most likely be ignored")
message("		Multiple levels can be combined with W=12 or W=123")
