# SPDX-License-Identifier: Apache-2.0

find_program(GEN_KOBJECT_LIST NAMES gen_kobject_list gen_kobject_list.py PATHS ${ZEPHYR_BASE}/scripts/build)
message(STATUS "Found gen_kobject_list: ${GEN_KOBJECT_LIST}")
if(GEN_KOBJECT_LIST MATCHES "\.py$")
  set(GEN_KOBJECT_LIST_INTERPRETER ${PYTHON_EXECUTABLE})
endif()

# Invokes gen_kobject_list.py with the given SCRIPT_ARGS, creating a TARGET that depends on the
# script's OUTPUTS
function(gen_kobject_list)
  cmake_parse_arguments(PARSE_ARGV 0 arg
    ""
    "TARGET"
    "OUTPUTS;SCRIPT_ARGS;INCLUDES;DEPENDS"
  )
  foreach(include ${arg_INCLUDES})
    list(APPEND arg_SCRIPT_ARGS --include-subsystem-list ${include})
  endforeach()
  add_custom_command(
    OUTPUT ${arg_OUTPUTS}
    COMMAND
      ${GEN_KOBJECT_LIST_INTERPRETER}
      ${GEN_KOBJECT_LIST}
      ${arg_SCRIPT_ARGS}
      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
    DEPENDS
      ${arg_DEPENDS}
      ${GEN_KOBJECT_LIST}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    )
  add_custom_target(${arg_TARGET} DEPENDS ${arg_OUTPUTS})
endfunction()

# Generates a gperf header file named OUTPUT using the symbols found in the KERNEL_TARGET's output
# binary. INCLUDES is a list of JSON files defining kernel subsystems and sockets.
function(gen_kobject_list_gperf)
  cmake_parse_arguments(PARSE_ARGV 0 arg
    ""
    "TARGET;OUTPUT;KERNEL_TARGET"
    "INCLUDES;DEPENDS"
  )
  gen_kobject_list(
    TARGET ${arg_TARGET}
    OUTPUTS ${arg_OUTPUT}
    SCRIPT_ARGS
      --kernel $<TARGET_FILE:${arg_KERNEL_TARGET}>
      --gperf-output ${arg_OUTPUT}
    INCLUDES ${arg_INCLUDES}
    DEPENDS
      ${arg_DEPENDS}
      ${arg_KERNEL_TARGET}
    )
endfunction()

# Generates header files describing the kernel subsystems defined by the JSON files in INCLUDES. The
# variable named by GEN_DIR_OUT_VAR is set to the directory containing the header files.
function(gen_kobject_list_headers)
  cmake_parse_arguments(PARSE_ARGV 0 arg
    ""
    "GEN_DIR_OUT_VAR"
    "INCLUDES;DEPENDS"
  )
  if (PROJECT_BINARY_DIR)
    set(gen_dir ${PROJECT_BINARY_DIR}/include/generated/zephyr)
  else ()
    set(gen_dir ${CMAKE_BINARY_DIR}/include/generated/zephyr)
  endif ()

  set(KOBJ_TYPES ${gen_dir}/kobj-types-enum.h)
  set(KOBJ_OTYPE ${gen_dir}/otype-to-str.h)
  set(KOBJ_SIZE ${gen_dir}/otype-to-size.h)

  file(MAKE_DIRECTORY ${gen_dir})

  gen_kobject_list(
    TARGET ${KOBJ_TYPES_H_TARGET}
    OUTPUTS ${KOBJ_TYPES} ${KOBJ_OTYPE} ${KOBJ_SIZE}
    SCRIPT_ARGS
      --kobj-types-output ${KOBJ_TYPES}
      --kobj-otype-output ${KOBJ_OTYPE}
      --kobj-size-output ${KOBJ_SIZE}
    INCLUDES ${arg_INCLUDES}
    DEPENDS
      ${arg_DEPENDS}
      ${arg_KERNEL_TARGET}
  )

  if(arg_GEN_DIR_OUT_VAR)
    cmake_path(GET gen_dir PARENT_PATH gen_dir)
    set(${arg_GEN_DIR_OUT_VAR} ${gen_dir} PARENT_SCOPE)
  endif()
endfunction ()
