| # 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() |