blob: a083c73d2c2dbcbdb1e61a5bfc4b6215c725a61c [file] [log] [blame] [edit]
function(DEFINE_QL_TOOLCHAIN_TARGET)
set(options)
set(oneValueArgs FAMILY ARCH CONV_SCRIPT SYNTH_SCRIPT ROUTE_CHAN_WIDTH CELLS_SIM)
set(multiValueArgs VPR_ARCH_ARGS)
cmake_parse_arguments(
DEFINE_QL_TOOLCHAIN_TARGET
"${options}"
"${oneValueArgs}"
"${multiValueArgs}"
"${ARGN}"
)
set(FAMILY ${DEFINE_QL_TOOLCHAIN_TARGET_FAMILY})
set(ARCH ${DEFINE_QL_TOOLCHAIN_TARGET_ARCH})
set(VPR_ARCH_ARGS ${DEFINE_QL_TOOLCHAIN_TARGET_VPR_ARCH_ARGS})
set(ROUTE_CHAN_WIDTH ${DEFINE_QL_TOOLCHAIN_TARGET_ROUTE_CHAN_WIDTH})
# Check if the architecture and family should be installed
check_arch_install(${ARCH} DO_INSTALL)
if (NOT DO_INSTALL)
message(STATUS "Skipping installation of toolchain for arch '${ARCH}' family '${FAMILY}'")
return()
endif ()
# Add cells.sim to all deps, so it is installed with make install
get_file_target(CELLS_SIM_TARGET ${DEFINE_QL_TOOLCHAIN_TARGET_CELLS_SIM})
add_custom_target(
"DEVICE_INSTALL_${CELLS_SIM_TARGET}"
ALL
DEPENDS ${DEFINE_QL_TOOLCHAIN_TARGET_CELLS_SIM}
)
install(FILES ${VPR_CONFIG}
DESTINATION share/f4pga/scripts/${FAMILY})
# Example design to run through the flow
# FIXME: Installation of the example should me moved out of this function
# For now there is the following workaround which installs it only for qlf_k4n8
if(${FAMILY} STREQUAL "qlf_k4n8")
install(FILES ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/tests/design_flow/counter_16bit/counter_16bit.v
DESTINATION share/f4pga/tests/counter_16bit
PERMISSIONS WORLD_READ OWNER_WRITE OWNER_READ GROUP_READ)
install(FILES ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/tests/design_flow/counter_16bit/counter_16bit_tb.v
DESTINATION share/f4pga/tests/counter_16bit
PERMISSIONS WORLD_READ OWNER_WRITE OWNER_READ GROUP_READ)
install(FILES ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/tests/design_flow/counter_16bit/counter_16bit.pcf
DESTINATION share/f4pga/tests/counter_16bit
PERMISSIONS WORLD_READ OWNER_WRITE OWNER_READ GROUP_READ)
install(FILES ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/tests/design_flow/counter_16bit/pinmap_qlf_k4n8_umc22.csv
DESTINATION share/f4pga/tests/counter_16bit
PERMISSIONS WORLD_READ OWNER_WRITE OWNER_READ GROUP_READ)
install(FILES ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/tests/design_flow/counter_16bit/counter_16bit.sdc
DESTINATION share/f4pga/tests/counter_16bit
PERMISSIONS WORLD_READ OWNER_WRITE OWNER_READ GROUP_READ)
endif()
# install techmap
install(DIRECTORY ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/techmap/.
DESTINATION share/f4pga/techmaps/${FAMILY}
FILES_MATCHING PATTERN *.v)
install(FILES ${DEFINE_QL_TOOLCHAIN_TARGET_CELLS_SIM}
DESTINATION share/f4pga/techmaps/${FAMILY})
if("${FAMILY}" STREQUAL "qlf_k4n8")
# install lib files
install(DIRECTORY ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/devices/umc22/
DESTINATION "share/f4pga/arch/${FAMILY}-${FAMILY}_umc22_${FAMILY}-${FAMILY}_umc22/lib"
FILES_MATCHING
PATTERN "*.txt"
PATTERN "*.json"
PATTERN "*.xml")
endif()
# Install FASM database
set(FASM_DATABASE_DIR "${QLF_FPGA_DATABASE_DIR}/${FAMILY}/fasm_database/")
if("${FAMILY}" STREQUAL "qlf_k4n8")
get_file_target(FASM_DATABASE_TARGET "/${FASM_DATABASE_DIR}")
get_file_location(FASM_DATABASE "/${FASM_DATABASE_DIR}")
add_custom_target("FASM_DB_INSTALL_${FAMILY}_FASM_DATABASE"
ALL
DEPENDS ${FASM_DATABASE_TARGET} ${FASM_DATABASE}
)
install(DIRECTORY ${CMAKE_BINARY_DIR}/${FASM_DATABASE_DIR}
DESTINATION share/f4pga/fasm_database/${FAMILY})
elseif(EXISTS "${FASM_DATABASE_DIR}" AND IS_DIRECTORY "${FASM_DATABASE_DIR}")
install(DIRECTORY ${FASM_DATABASE_DIR}
DESTINATION share/f4pga/fasm_database/${FAMILY})
endif()
endfunction()
function(DEFINE_QL_DEVICE_CELLS_INSTALL_TARGET)
set(options)
set(oneValueArgs DEVICE_TYPE DEVICE PACKAGE)
set(multiValueArgs)
cmake_parse_arguments(
DEFINE_QL_DEVICE_CELLS_INSTALL_TARGET
"${options}"
"${oneValueArgs}"
"${multiValueArgs}"
"${ARGN}"
)
set(DEVICE_TYPE ${DEFINE_QL_DEVICE_CELLS_INSTALL_TARGET_DEVICE_TYPE})
set(DEVICE ${DEFINE_QL_DEVICE_CELLS_INSTALL_TARGET_DEVICE})
set(PACKAGE ${DEFINE_QL_DEVICE_CELLS_INSTALL_TARGET_PACKAGE})
# Check if the device should be installed
check_device_install(${DEVICE} DO_INSTALL)
if (NOT DO_INSTALL)
message(STATUS "Skipping installation of device ${DEVICE}-${PACKAGE} (type ${DEVICE_TYPE})")
return()
endif ()
# Install the final architecture file. This is actually already done in
# DEFINE_DEVICE but in case when the file name differs across devices we
# want it to be unified for the installed toolchain.
get_target_property_required(DEVICE_MERGED_FILE ${DEVICE_TYPE} DEVICE_MERGED_FILE)
get_file_location(DEVICE_MERGED_FILE_LOCATION ${DEVICE_MERGED_FILE})
install(FILES ${DEVICE_MERGED_FILE_LOCATION}
DESTINATION "share/f4pga/arch/${DEVICE}_${PACKAGE}"
RENAME "arch_${DEVICE}_${PACKAGE}.xml")
if("${FAMILY}" STREQUAL "qlf_k4n8")
# install lib files
if(EXISTS "${QLF_FPGA_DATABASE_DIR}/${FAMILY}/lib" AND IS_DIRECTORY "${QLF_FPGA_DATABASE_DIR}/${FAMILY}/lib")
install(DIRECTORY ${QLF_FPGA_DATABASE_DIR}/${FAMILY}/lib/
DESTINATION "share/f4pga/arch/${DEVICE}_${PACKAGE}/lib")
endif()
else()
message(status ": workaround: skipping lib install for ${DEVICE} device")
endif()
# Install device-specific cells sim and cells map files
get_target_property(CELLS_SIM ${DEVICE_TYPE} CELLS_SIM)
get_target_property(CELLS_MAP ${DEVICE_TYPE} CELLS_MAP)
if (NOT "${CELLS_SIM}" MATCHES ".*NOTFOUND")
get_file_target(CELLS_SIM_TARGET ${CELLS_SIM})
get_file_location(CELLS_SIM ${CELLS_SIM})
add_custom_target(
"CELLS_INSTALL_${DEVICE}_CELLS_SIM"
ALL
DEPENDS ${CELLS_SIM_TARGET} ${CELLS_SIM}
)
install(FILES ${CELLS_SIM}
DESTINATION "share/f4pga/arch/${DEVICE}_${PACKAGE}/cells")
endif()
if (NOT "${CELLS_MAP}" MATCHES ".*NOTFOUND")
get_file_target(CELLS_MAP_TARGET ${CELLS_MAP})
get_file_location(CELLS_MAP ${CELLS_MAP})
add_custom_target(
"CELLS_INSTALL_${DEVICE}_CELLS_MAP"
ALL
DEPENDS ${CELLS_MAP_TARGET} ${CELLS_MAP}
)
install(FILES ${CELLS_MAP}
DESTINATION "share/f4pga/arch/${DEVICE}_${PACKAGE}/cells")
endif()
endfunction()
function(DEFINE_QL_PINMAP_CSV_INSTALL_TARGET)
set(options)
set(oneValueArgs PART DEVICE_TYPE BOARD DEVICE PACKAGE FABRIC_PACKAGE)
set(multiValueArgs)
cmake_parse_arguments(
DEFINE_QL_PINMAP_CSV_INSTALL_TARGET
"${options}"
"${oneValueArgs}"
"${multiValueArgs}"
"${ARGN}"
)
set(PART ${DEFINE_QL_PINMAP_CSV_INSTALL_TARGET_PART})
set(BOARD ${DEFINE_QL_PINMAP_CSV_INSTALL_TARGET_BOARD})
set(DEVICE ${DEFINE_QL_PINMAP_CSV_INSTALL_TARGET_DEVICE})
set(DEVICE_TYPE ${DEFINE_QL_PINMAP_CSV_INSTALL_TARGET_DEVICE_TYPE})
set(PACKAGE ${DEFINE_QL_PINMAP_CSV_INSTALL_TARGET_PACKAGE})
get_target_property_required(NO_INSTALL ${ARCH} NO_INSTALL)
if(${NO_INSTALL})
message(STATUS "Architecture ${ARCH} not set for install")
return()
endif()
get_target_property_required(PINMAP ${BOARD} PINMAP)
get_file_location(PINMAP_FILE ${PINMAP})
get_filename_component(PINMAP_FILE_REAL ${PINMAP_FILE} REALPATH)
get_filename_component(PINMAP_FILE_NAME ${PINMAP_FILE} NAME)
append_file_dependency(DEPS ${PINMAP})
add_custom_target(
"PINMAP_INSTALL_${BOARD}_${DEVICE}_${PACKAGE}_${PINMAP_FILE_NAME}"
ALL
DEPENDS ${DEPS}
)
install(FILES ${PINMAP_FILE_REAL}
DESTINATION "share/f4pga/arch/${DEVICE}_${PACKAGE}/${PART}"
RENAME "pinmap_${ADD_QUICKLOGIC_BOARD_FABRIC_PACKAGE}.csv")
if(NOT "${FAMILY}" STREQUAL "pp3")
get_target_property_required(PINMAP ${BOARD} PINMAP_XML)
get_file_location(PINMAP_XML_FILE ${PINMAP_XML})
get_filename_component(PINMAP_XML_FILE_REAL ${PINMAP_XML_FILE} REALPATH)
get_filename_component(PINMAP_XML_FILE_NAME ${PINMAP_XML_FILE} NAME)
append_file_dependency(DEPS ${PINMAP_XML})
add_custom_target(
"PINMAP_XML_INSTALL_${BOARD}_${DEVICE}_${PACKAGE}_${PINMAP_XML_FILE_NAME}"
ALL
DEPENDS ${DEPS}
)
install(FILES ${PINMAP_XML_FILE_REAL}
DESTINATION "share/f4pga/arch/${DEVICE}_${PACKAGE}/${PART}"
RENAME "pinmap_${ADD_QUICKLOGIC_BOARD_FABRIC_PACKAGE}.xml")
else()
message(status ": workaround: skipping PINMAP_XML install for ${FAMILY} ${DEVICE}")
endif()
get_target_property(CLKMAP ${BOARD} CLKMAP)
if(NOT "${CLKMAP}" MATCHES ".*-NOTFOUND")
get_file_location(CLKMAP_FILE ${CLKMAP})
get_filename_component(CLKMAP_FILE_REAL ${CLKMAP_FILE} REALPATH)
get_filename_component(CLKMAP_FILE_NAME ${CLKMAP_FILE} NAME)
append_file_dependency(DEPS ${CLKMAP})
add_custom_target(
"CLKMAP_INSTALL_${BOARD}_${DEVICE}_${PACKAGE}_${CLKMAP_FILE_NAME}"
ALL
DEPENDS ${DEPS}
)
install(FILES ${CLKMAP_FILE_REAL}
DESTINATION "share/f4pga/arch/${DEVICE}_${PACKAGE}/${PART}"
RENAME "clkmap_${ADD_QUICKLOGIC_BOARD_FABRIC_PACKAGE}.csv")
endif()
endfunction()