|  | # ADD_BINARY_TOOLCHAIN_TEST | 
|  | # | 
|  | # This function adds a test for installed SymbiFlow toolchain (a.k.a. binary | 
|  | # toolchain) | 
|  | # | 
|  | # Tests added require "make install" to be run upfront to install the toolchain | 
|  |  | 
|  | function(ADD_BINARY_TOOLCHAIN_TEST) | 
|  |  | 
|  | set(options CHECK_CONSTRAINTS) | 
|  | set(oneValueArgs TEST_NAME DIRECTIVE DEVICE PINMAP PCF SDC EXTRA_ARGS ASSERT_BLOCK_TYPES_ARE_USED ASSERT_TIMING) | 
|  | set(multiValueArgs SOURCES ASSERT_EXISTS) | 
|  |  | 
|  | cmake_parse_arguments( | 
|  | ADD_BINARY_TOOLCHAIN_TEST | 
|  | "${options}" | 
|  | "${oneValueArgs}" | 
|  | "${multiValueArgs}" | 
|  | ${ARGN} | 
|  | ) | 
|  |  | 
|  | set(INSTALLATION_DIR_BIN "${CMAKE_INSTALL_PREFIX}/bin") | 
|  |  | 
|  | set(TEST_NAME  ${ADD_BINARY_TOOLCHAIN_TEST_TEST_NAME}) | 
|  | set(SOURCES    ${ADD_BINARY_TOOLCHAIN_TEST_SOURCES}) | 
|  | set(DIRECTIVE  ${ADD_BINARY_TOOLCHAIN_TEST_DIRECTIVE}) | 
|  | set(DEVICE     ${ADD_BINARY_TOOLCHAIN_TEST_DEVICE}) | 
|  | set(PINMAP     ${ADD_BINARY_TOOLCHAIN_TEST_PINMAP}) | 
|  | set(PCF        ${ADD_BINARY_TOOLCHAIN_TEST_PCF}) | 
|  | set(SDC        ${ADD_BINARY_TOOLCHAIN_TEST_SDC}) | 
|  | set(EXTRA_ARGS ${ADD_BINARY_TOOLCHAIN_TEST_EXTRA_ARGS}) | 
|  |  | 
|  | string(REPLACE " " ";" SOURCES "${SOURCES}") | 
|  | if("${SOURCES}" STREQUAL "") | 
|  | set(SOURCES "${TEST_NAME}.v") | 
|  | endif() | 
|  |  | 
|  | if("${PCF}" STREQUAL "") | 
|  | set(PCF "${TEST_NAME}.pcf") | 
|  | endif() | 
|  |  | 
|  | if("${SDC}" STREQUAL "") | 
|  | set(SDC "${TEST_NAME}.sdc") | 
|  | endif() | 
|  |  | 
|  | if("${DIRECTIVE}" STREQUAL "") | 
|  | set(DIRECTIVE "compile") | 
|  | endif() | 
|  |  | 
|  | set(TOOLCHAIN_COMMAND "\ | 
|  | ql_symbiflow \ | 
|  | -${DIRECTIVE} \ | 
|  | -src ${CMAKE_CURRENT_SOURCE_DIR} \ | 
|  | -d ${DEVICE} \ | 
|  | -t top \ | 
|  | -v ${SOURCES} \ | 
|  | -P ${PINMAP} " | 
|  | ) | 
|  |  | 
|  | set(REF_PCF "") | 
|  | if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PCF}") | 
|  | set(TOOLCHAIN_COMMAND "${TOOLCHAIN_COMMAND} -p \"${PCF}\"") | 
|  | if(${ADD_BINARY_TOOLCHAIN_TEST_CHECK_CONSTRAINTS}) | 
|  | file(REAL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${PCF}" REF_PCF) | 
|  | endif() | 
|  | endif() | 
|  | if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SDC}") | 
|  | set(TOOLCHAIN_COMMAND "${TOOLCHAIN_COMMAND} -s \"${SDC}\"") | 
|  | endif() | 
|  |  | 
|  | set(BUILD_DIR_REL "build.${TEST_NAME}") | 
|  | set(TOOLCHAIN_COMMAND "${TOOLCHAIN_COMMAND} -build_dir \"${BUILD_DIR_REL}\"") | 
|  |  | 
|  | set(BUILD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${BUILD_DIR_REL}) | 
|  |  | 
|  | # Build a list of files which existence is to be checked after the toolchain | 
|  | # is executed. | 
|  | set(ASSERT_EXISTS "") | 
|  | list(APPEND ASSERT_EXISTS "${BUILD_DIR}/top.eblif") | 
|  |  | 
|  | if("${DIRECTIVE}" STREQUAL "compile") | 
|  | list(APPEND ASSERT_EXISTS "${BUILD_DIR}/top.net") | 
|  | list(APPEND ASSERT_EXISTS "${BUILD_DIR}/top.place") | 
|  | list(APPEND ASSERT_EXISTS "${BUILD_DIR}/top.fasm") | 
|  | list(APPEND ASSERT_EXISTS "${BUILD_DIR}/top.bit") | 
|  | endif() | 
|  |  | 
|  | # qlf* architectures use repacker hence the "top.route" name is | 
|  | # different. | 
|  | if("${DEVICE}" MATCHES "qlf_.*") | 
|  | list(APPEND ASSERT_EXISTS "${BUILD_DIR}/top.repacked.route") | 
|  | else() | 
|  | list(APPEND ASSERT_EXISTS "${BUILD_DIR}/top.route") | 
|  | endif() | 
|  |  | 
|  | foreach(FILE ${ADD_BINARY_TOOLCHAIN_TEST_ASSERT_EXISTS}) | 
|  | list(APPEND ASSERT_EXISTS "${BUILD_DIR}/${FILE}") | 
|  | endforeach() | 
|  |  | 
|  | string(REPLACE ";" "," ASSERT_EXISTS "${ASSERT_EXISTS}") | 
|  |  | 
|  | # Add the test | 
|  | set(TOOLCHAIN_COMMAND "${TOOLCHAIN_COMMAND} ${EXTRA_ARGS}") | 
|  | add_test(NAME quicklogic_toolchain_test_${TEST_NAME}_${DEVICE} | 
|  | COMMAND | 
|  | ${CMAKE_COMMAND} | 
|  | -DTOOLCHAIN_COMMAND=${TOOLCHAIN_COMMAND} | 
|  | -DSYMBIFLOW_DIR=${f4pga-arch-defs_SOURCE_DIR} | 
|  | -DINSTALLATION_DIR=${CMAKE_INSTALL_PREFIX} | 
|  | -DBUILD_DIR=${BUILD_DIR} | 
|  | -DASSERT_BLOCK_TYPES_ARE_USED=${ADD_BINARY_TOOLCHAIN_TEST_ASSERT_BLOCK_TYPES_ARE_USED} | 
|  | -DASSERT_TIMING=${ADD_BINARY_TOOLCHAIN_TEST_ASSERT_TIMING} | 
|  | -DASSERT_EXISTS=${ASSERT_EXISTS} | 
|  | -DREF_PCF=${REF_PCF} | 
|  | -P ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/common/cmake/run_toolchain_test.cmake | 
|  | WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} | 
|  | ) | 
|  |  | 
|  | endfunction() |