blob: 3237e1ed94e6452d28e7d54baa3b4e8f47bf629d [file] [log] [blame] [edit]
# This CMake include defines the following functions:
#
# * ADD_LITEX_TEST - Generates LiteX designs and adds the target tests
function(ADD_LITEX_TEST)
# ~~~
# ADD_LITEX_TEST(
# NAME <name>
# LITEX_DIR <litex directory>
# LITEX_BOARD <litex board name>
# LITEX_SOURCES <litex generated sources>
# EXTERNAL_SOURCES <external sources>
# BOARD <symbiflow board name>
# [USE_XDC] <option to use XDC constraints>
# FLAGS <additional litex options>
# GENERATE_SCRIPT <generate script>
# FIXUP_SCRIPT <fixup script>
# [DISABLE_DIFF_TEST] <option to disable the diff fasm test>
# )
#
# LITEX_DIR is the directory that is generated by litex and used to get the generated source files
#
# LITEX_BOARD is the name of the board used by litex to generate the source files:
# * E.g.: a7-35, a7-100
#
# LITEX_SOURCES is a list of source files generated by litex for this test
#
# BOARD is the actualy name of the symbiflow board used for the test:
# * E.g.: arty-full, arty100t-full
#
# USE_XDC is an optional argument to specify whether the constraint file should be XDC or PCF+SDC
#
# FLAGS is a string containing additional options for litex
#
# ~~~
set(options USE_XDC DISABLE_DIFF_TEST)
set(oneValueArgs NAME LITEX_DIR LITEX_BOARD BOARD GENERATE_SCRIPT FIXUP_SCRIPT VIVADO_XDC)
set(multiValueArgs FLAGS LITEX_SOURCES EXTERNAL_SOURCES)
cmake_parse_arguments(
ADD_LITEX_TEST
"${options}"
"${oneValueArgs}"
"${multiValueArgs}"
"${ARGN}"
)
set(NAME ${ADD_LITEX_TEST_NAME})
set(LITEX_DIR ${ADD_LITEX_TEST_LITEX_DIR})
set(LITEX_BOARD ${ADD_LITEX_TEST_LITEX_BOARD})
set(LITEX_SOURCES ${ADD_LITEX_TEST_LITEX_SOURCES})
set(EXTERNAL_SOURCES ${ADD_LITEX_TEST_EXTERNAL_SOURCES})
set(BOARD ${ADD_LITEX_TEST_BOARD})
set(GENERATE_SCRIPT ${ADD_LITEX_TEST_GENERATE_SCRIPT})
set(FIXUP_SCRIPT ${ADD_LITEX_TEST_FIXUP_SCRIPT})
set(USE_XDC ${ADD_LITEX_TEST_USE_XDC})
set(VIVADO_XDC ${ADD_LITEX_TEST_VIVADO_XDC})
set(FLAGS ${ADD_LITEX_TEST_FLAGS})
set(DISABLE_DIFF_TEST ${ADD_LITEX_TEST_DISABLE_DIFF_TEST})
set(LITEX_GATEWARE ${CMAKE_CURRENT_BINARY_DIR}/${LITEX_DIR}/gateware/)
list(TRANSFORM LITEX_SOURCES PREPEND ${LITEX_GATEWARE})
set(DEPS "")
append_file_dependency(DEPS ${GENERATE_SCRIPT})
append_file_dependency(DEPS ${FIXUP_SCRIPT})
get_target_property_required(PYTHON3 env PYTHON3)
add_custom_command(
OUTPUT ${LITEX_SOURCES}
DEPENDS ${PYTHON3} ${DEPS}
COMMAND
${CMAKE_COMMAND} -E env PYTHON=${PYTHON3}
${PYTHON3} ${GENERATE_SCRIPT} --board ${LITEX_BOARD} --builddir ${LITEX_DIR} ${FLAGS}
COMMAND
${PYTHON3} ${FIXUP_SCRIPT} --xdc ${LITEX_GATEWARE}/top.xdc
)
foreach(SRC ${LITEX_SOURCES})
add_file_target(FILE ${SRC} GENERATED ABSOLUTE)
endforeach()
if (${USE_XDC})
add_fpga_target(
NAME ${NAME}
BOARD ${BOARD}
SOURCES
${LITEX_GATEWARE}/top.v
${EXTERNAL_SOURCES}
INPUT_XDC_FILES ${LITEX_GATEWARE}/top.xdc
EXPLICIT_ADD_FILE_TARGET
INSTALL_CIRCUIT
)
else()
add_fpga_target(
NAME ${NAME}
BOARD ${BOARD}
SOURCES
${LITEX_GATEWARE}/top.v
${EXTERNAL_SOURCES}
INPUT_IO_FILE ${LITEX_GATEWARE}/top.pcf
INPUT_SDC_FILE ${LITEX_GATEWARE}/top.sdc
EXPLICIT_ADD_FILE_TARGET
INSTALL_CIRCUIT
)
endif()
if (${DISABLE_DIFF_TEST})
add_vivado_target(
NAME ${NAME}_vivado
PARENT_NAME ${NAME}
XDC ${VIVADO_XDC}
DISABLE_DIFF_TEST
)
else()
add_vivado_target(
NAME ${NAME}_vivado
PARENT_NAME ${NAME}
XDC ${VIVADO_XDC}
)
endif()
endfunction()