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