CMake: add support for exporting and importing .bba files.
This is useful for certain cross-compilation workloads, and to cache rarely changing build products. To use this functionality, build e.g. as follows: cmake . -B build-export -DEXPORT_BBA_FILES=../bba-files -DARCH=all cmake --build build-export -t nextpnr-all-bba cmake . -B build-import -DIMPORT_BBA_FILES=../bba-files -DARCH=all cmake --build build-import
This commit is contained in:
parent
fac934bd2d
commit
90d746f79e
@ -237,6 +237,8 @@ add_subdirectory(rust)
|
||||
|
||||
add_subdirectory(tests/gui)
|
||||
|
||||
add_custom_target(nextpnr-all-bba)
|
||||
|
||||
function(add_nextpnr_architecture target)
|
||||
cmake_parse_arguments(arg "" "MAIN_SOURCE" "CORE_SOURCES;TEST_SOURCES;CURRENT_SOURCE_DIR;CURRENT_BINARY_DIR" ${ARGN})
|
||||
|
||||
@ -325,6 +327,10 @@ function(add_nextpnr_architecture target)
|
||||
|
||||
# Chip database
|
||||
|
||||
add_library(nextpnr-${target}-bba INTERFACE)
|
||||
|
||||
add_dependencies(nextpnr-all-bba nextpnr-${target}-bba)
|
||||
|
||||
add_library(nextpnr-${target}-chipdb INTERFACE)
|
||||
|
||||
target_link_libraries(nextpnr-${target}-core INTERFACE nextpnr-${target}-chipdb)
|
||||
|
@ -7,9 +7,24 @@ else()
|
||||
set(BBASM_ENDIAN_FLAG "--le")
|
||||
endif()
|
||||
|
||||
set(EXPORT_BBA_FILES "" CACHE PATH "Copy generated .bba files to this directory")
|
||||
set(IMPORT_BBA_FILES "" CACHE PATH "Use pre-generated .bba files from this directory")
|
||||
mark_as_advanced(EXPORT_BBA_FILES IMPORT_BBA_FILES)
|
||||
|
||||
if (EXPORT_BBA_FILES)
|
||||
file(REAL_PATH ${EXPORT_BBA_FILES} EXPORT_BBA_FILES BASE_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
message(STATUS "Exporting .bba files to ${EXPORT_BBA_FILES}")
|
||||
endif()
|
||||
|
||||
if (IMPORT_BBA_FILES)
|
||||
file(REAL_PATH ${IMPORT_BBA_FILES} IMPORT_BBA_FILES BASE_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
message(STATUS "Importing .bba files from ${EXPORT_BBA_FILES}")
|
||||
endif()
|
||||
|
||||
# Example usage (note the `.new`, used for atomic updates):
|
||||
#
|
||||
# add_bba_produce_command(
|
||||
# TARGET nextpnr-ice40-bba
|
||||
# COMMAND ${Python_EXECUTABLE}
|
||||
# ${CMAKE_CURRENT_SOURCE_DIR}/chipdb.py
|
||||
# -o ${CMAKE_CURRENT_BINARY_DIR}/chipdb-hx8k.bba.new
|
||||
@ -20,13 +35,17 @@ endif()
|
||||
# Paths must be absolute.
|
||||
#
|
||||
function(add_bba_produce_command)
|
||||
cmake_parse_arguments(arg "" "OUTPUT" "COMMAND;INPUTS" ${ARGN})
|
||||
cmake_parse_arguments(arg "" "OUTPUT" "TARGET;COMMAND;INPUTS" ${ARGN})
|
||||
|
||||
cmake_path(GET arg_OUTPUT PARENT_PATH arg_OUTPUT_DIR)
|
||||
cmake_path(GET arg_OUTPUT FILENAME arg_OUTPUT_NAME)
|
||||
file(RELATIVE_PATH arg_OUTPUT_RELATIVE ${CMAKE_BINARY_DIR} ${arg_OUTPUT})
|
||||
file(MAKE_DIRECTORY ${arg_OUTPUT_DIR})
|
||||
|
||||
list(GET arg_COMMAND 0 arg_EXECUTABLE)
|
||||
|
||||
if (NOT IMPORT_BBA_FILES)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
${arg_OUTPUT}
|
||||
@ -42,6 +61,44 @@ function(add_bba_produce_command)
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
else()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
${arg_OUTPUT}
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy
|
||||
${IMPORT_BBA_FILES}/${arg_OUTPUT_RELATIVE}
|
||||
${arg_OUTPUT}
|
||||
DEPENDS
|
||||
${IMPORT_BBA_FILES}/${arg_OUTPUT_RELATIVE}
|
||||
COMMENT
|
||||
"Importing ${arg_OUTPUT_NAME}"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
endif()
|
||||
|
||||
if (EXPORT_BBA_FILES)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
${arg_OUTPUT}
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy
|
||||
${arg_OUTPUT}
|
||||
${EXPORT_BBA_FILES}/${arg_OUTPUT_RELATIVE}
|
||||
APPEND
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
endif()
|
||||
|
||||
target_sources(
|
||||
${arg_TARGET} PUBLIC
|
||||
${arg_OUTPUT}
|
||||
)
|
||||
|
||||
endfunction()
|
||||
|
||||
# Example usage:
|
||||
|
@ -43,6 +43,7 @@ foreach (device ${ECP5_DEVICES})
|
||||
endif()
|
||||
|
||||
add_bba_produce_command(
|
||||
TARGET nextpnr-${family}-bba
|
||||
COMMAND ${Python3_EXECUTABLE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/trellis_import.py
|
||||
-L ${TRELLIS_LIBDIR}
|
||||
|
@ -34,6 +34,7 @@ foreach (device ${GOWIN_DEVICES})
|
||||
endif()
|
||||
|
||||
add_bba_produce_command(
|
||||
TARGET nextpnr-${family}-bba
|
||||
COMMAND ${GOWIN_BBA_EXECUTABLE}
|
||||
-d ${device}
|
||||
-i ${CMAKE_CURRENT_SOURCE_DIR}/constids.inc
|
||||
|
@ -49,6 +49,10 @@ else()
|
||||
|
||||
target_sources(nextpnr-himbaechel-core INTERFACE ${arg_CORE_SOURCES})
|
||||
|
||||
add_library(nextpnr-himbaechel-${microtarget}-bba INTERFACE)
|
||||
|
||||
add_dependencies(nextpnr-himbaechel-bba nextpnr-himbaechel-${microtarget}-bba)
|
||||
|
||||
add_library(nextpnr-himbaechel-${microtarget}-chipdb INTERFACE)
|
||||
|
||||
target_link_libraries(nextpnr-himbaechel-core INTERFACE nextpnr-himbaechel-${microtarget}-chipdb)
|
||||
|
@ -19,6 +19,7 @@ foreach (device ${HIMBAECHEL_EXAMPLE_DEVICES})
|
||||
endif()
|
||||
|
||||
add_bba_produce_command(
|
||||
TARGET nextpnr-himbaechel-example-bba
|
||||
COMMAND ${Python3_EXECUTABLE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/example_arch_gen.py
|
||||
${CMAKE_CURRENT_BINARY_DIR}/chipdb-${device}.bba.new
|
||||
|
@ -32,6 +32,7 @@ foreach (device ${HIMBAECHEL_GOWIN_DEVICES})
|
||||
endif()
|
||||
|
||||
add_bba_produce_command(
|
||||
TARGET nextpnr-himbaechel-gowin-bba
|
||||
COMMAND ${apycula_Python3_EXECUTABLE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/gowin_arch_gen.py
|
||||
-d ${device}
|
||||
|
@ -41,6 +41,7 @@ foreach (device ${HIMBAECHEL_NGULTRA_DEVICES})
|
||||
string(TOUPPER ${device} device_upper)
|
||||
|
||||
add_bba_produce_command(
|
||||
TARGET nextpnr-himbaechel-ng-ultra-bba
|
||||
COMMAND ${Python3_EXECUTABLE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/gen/arch_gen.py
|
||||
--db ${HIMBAECHEL_PRJBEYOND_DB}
|
||||
|
@ -34,6 +34,7 @@ message(STATUS "Enabled Himbaechel-Xilinx devices: ${HIMBAECHEL_XILINX_DEVICES}"
|
||||
|
||||
foreach (device ${HIMBAECHEL_XILINX_DEVICES})
|
||||
add_bba_produce_command(
|
||||
TARGET nextpnr-himbaechel-xilinx-bba
|
||||
COMMAND /usr/bin/pypy3 ${CMAKE_CURRENT_SOURCE_DIR}/gen/xilinx_gen.py
|
||||
--xray ${HIMBAECHEL_PRJXRAY_DB}/artix7
|
||||
--device ${device}
|
||||
|
@ -64,6 +64,7 @@ foreach (device ${ICE40_DEVICES})
|
||||
endif()
|
||||
|
||||
add_bba_produce_command(
|
||||
TARGET nextpnr-${family}-bba
|
||||
COMMAND ${Python3_EXECUTABLE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/chipdb.py
|
||||
-p ${CMAKE_CURRENT_SOURCE_DIR}/constids.inc
|
||||
|
@ -43,6 +43,7 @@ foreach (device ${MACHXO2_DEVICES})
|
||||
endif()
|
||||
|
||||
add_bba_produce_command(
|
||||
TARGET nextpnr-${family}-bba
|
||||
COMMAND ${Python3_EXECUTABLE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/facade_import.py
|
||||
-L ${TRELLIS_LIBDIR}
|
||||
|
@ -35,6 +35,7 @@ foreach (subfamily ${NEXUS_FAMILIES})
|
||||
endif()
|
||||
|
||||
add_bba_produce_command(
|
||||
TARGET nextpnr-${family}-bba
|
||||
COMMAND ${PRJOXIDE_TOOL}
|
||||
bba-export ${subfamily}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/constids.inc
|
||||
|
Loading…
Reference in New Issue
Block a user