set(FULL_BOARDS dummy_ice40_hx1k_tq144 qlf_k4n8-qlf_k4n8_umc22_slow_board)
if (NOT LIGHT_BUILD)
list(APPEND FULL_BOARDS dummy_artix7_xc7a50t-basys3_test)
endif()
set(SMALL_BOARDS dummy_testarch_4x4_dummy dummy_testarch_10x10_dummy)
set(BOARDS ${FULL_BOARDS} ${SMALL_BOARDS})

foreach(BOARD ${BOARDS})
    add_custom_target(all_${BOARD})
endforeach()

function(add_simple_test)
  # ~~~
  #   ADD_SIMPLE_TEST(
  #     NAME <name of test>
  #     SOURCES <list of sources for test>
  #     BOARDS <list of boards to test against>
  #     [ROUTE_ONLY]
  #     [EQUIV_CHECK_SCRIPT <filename of yosys script to prove gold and gate>]
  #     [EXPLICIT_ADD_FILE_TARGET]
  #     [DEFINES <list of defines>]
  #   )
  # ~~~
  #
  # ADD_SIMPLE_TEST creates test targets that check routing and equivilence
  # between original source, post-synthesis and post-place and route modules.
  set(options ROUTE_ONLY EXPLICIT_ADD_FILE_TARGET NO_SYNTHESIS)
  set(oneValueArgs NAME EQUIV_CHECK_SCRIPT)
  set(multiValueArgs SOURCES BOARDS DEFINES)
  cmake_parse_arguments(
    ADD_SIMPLE_TEST
    "${options}"
    "${oneValueArgs}"
    "${multiValueArgs}"
    ${ARGN}
  )

  if(NOT ${ADD_SIMPLE_TEST_EXPLICIT_ADD_FILE_TARGET})
    foreach(SRC ${ADD_SIMPLE_TEST_SOURCES})
      add_file_target(
        FILE ${SRC}
        SCANNER_TYPE verilog
        )
    endforeach()
  endif()

  set(EQUIV_CHECK_SCRIPT ${ADD_SIMPLE_TEST_EQUIV_CHECK_SCRIPT})

  if("${EQUIV_CHECK_SCRIPT}" STREQUAL "")
    set(EQUIV_CHECK_SCRIPT
      ${f4pga-arch-defs_SOURCE_DIR}/common/yosys/miter_and_tempinduct.ys)
  endif()

  foreach(BOARD ${ADD_SIMPLE_TEST_BOARDS})
    get_target_property_required(DEVICE ${BOARD} DEVICE)
    get_target_property_required(ARCH ${DEVICE} ARCH)
    get_target_property_required(NO_PINS ${ARCH} NO_PINS)
    get_target_property_required(NO_TEST_PINS ${ARCH} NO_TEST_PINS)
    get_target_property_required(NO_BITSTREAM ${ARCH} NO_BITSTREAM)

    set_target_properties(${BOARD} PROPERTIES PART "dummy")

    set(INPUT_IO_FILE_ARG "")
    if(NOT ${NO_PINS} AND NOT ${NO_TEST_PINS})
      generate_pinmap(
          NAME ${ADD_SIMPLE_TEST_NAME}_${BOARD}.pcf
        TOP top
        BOARD ${BOARD}
        SOURCES ${ADD_SIMPLE_TEST_SOURCES}
        )
      set(INPUT_IO_FILE_ARG INPUT_IO_FILE ${ADD_SIMPLE_TEST_NAME}_${BOARD}.pcf)
    endif()

    set(NO_SYNTHESIS_ARG "")
    if(${ADD_SIMPLE_TEST_NO_SYNTHESIS})
      set(NO_SYNTHESIS_ARG NO_SYNTHESIS)
    endif()

    set(CHECK_TEST_ARGS "")
    if(NOT ${ADD_SIMPLE_TEST_ROUTE_ONLY} AND NOT ${NO_BITSTREAM})
      set(CHECK_TEST_ARGS EMIT_CHECK_TESTS EQUIV_CHECK_SCRIPT ${EQUIV_CHECK_SCRIPT})
    else()
      set(CHECK_TEST_ARGS "ROUTE_ONLY")
    endif()

    add_fpga_target(
      NAME ${ADD_SIMPLE_TEST_NAME}_${BOARD}
      BOARD ${BOARD}
      ${INPUT_IO_FILE_ARG}
      SOURCES ${ADD_SIMPLE_TEST_SOURCES}
      EXPLICIT_ADD_FILE_TARGET
      ${CHECK_TEST_ARGS}
      ${NO_SYNTHESIS_ARG}
      DEFINES ${ADD_SIMPLE_TEST_DEFINES}
      )

    add_dependencies(all_route_tests ${ADD_SIMPLE_TEST_NAME}_${BOARD}_route)
    add_dependencies(all_${BOARD} ${ADD_SIMPLE_TEST_NAME}_${BOARD}_route)
  endforeach()
endfunction()

add_subdirectory(0-const)
add_subdirectory(1-wire)
add_subdirectory(2-mwire)
add_subdirectory(3-ff)
add_subdirectory(3-lut4)
add_subdirectory(3-lut5x2)
add_subdirectory(3-lut6)
add_subdirectory(3-lut7)
add_subdirectory(3-lut8)
add_subdirectory(4-lutff)
add_subdirectory(4-mlut)
add_subdirectory(5-lut_cascade_1)
add_subdirectory(6-big_xor)
add_subdirectory(6-counter)
add_subdirectory(6-led)
add_subdirectory(6-rot)
add_subdirectory(7-carry_stress)
add_subdirectory(9-soc)
add_subdirectory(9-scalable_proc)

