# Copyright (c) 2022 Google LLC
# SPDX-License-Identifier: Apache-2.0

cmake_minimum_required(VERSION 3.20.0)
include(ExternalProject)

# Add the sources and set up the build for either unit testing or native_posix
list(APPEND SOURCES src/main.cpp)
if(BOARD STREQUAL unit_testing)
  find_package(Zephyr COMPONENTS unittest REQUIRED HINTS $ENV{ZEPHYR_BASE})
  set(target testbinary)
  # Set the target binary for the 'core' external project. The path to this must match the one set
  # below in ExternalProject_Add's CMAKE_INSTALL_PREFIX
  add_compile_definitions(FAIL_TARGET_BINARY="${CMAKE_BINARY_DIR}/core/bin/testbinary")
else()
  find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
  set(target app)
  # Set the target binary for the 'core' external project. The path to this must match the one set
  # below in ExternalProject_Add's CMAKE_INSTALL_PREFIX
  add_compile_definitions(FAIL_TARGET_BINARY="${CMAKE_BINARY_DIR}/core/bin/zephyr.elf")
endif()

# Create the project and set the sources for the target
project(fail)
target_sources(${target} PRIVATE ${SOURCES})

# Find which CONFIG_ZTEST_FAIL_TEST_* choice was set so we can pass it to the external project
# Once we find the config, we'll need to prepend a '-D' and append '=y' so we can pass it to the
# 'core' project as a cmake argument.
get_cmake_property(_vars VARIABLES)
string(REGEX MATCHALL "(^|;)CONFIG_ZTEST_FAIL_TEST_[A-Za-z0-9_]+" fail_test_config "${_vars}")
list(FILTER fail_test_config EXCLUDE REGEX "^$")
list(TRANSFORM fail_test_config PREPEND "-D")
list(TRANSFORM fail_test_config APPEND "=y")
string(REPLACE ";" " " fail_test_config "${fail_test_config}")

# Add the 'core' external project which will mirror the configs of this project.
ExternalProject_Add(core
    SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/core
    CMAKE_ARGS
      -DBOARD:STRING=${BOARD}
      -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/core
      ${fail_test_config}
)
add_dependencies(${target} core)
