|  | add_subdirectory(layouts) | 
|  | add_subdirectory(top-routing-virt) | 
|  |  | 
|  | function(DEFINE_ICE40_DEVICE) | 
|  | set(options) | 
|  | set(oneValueArgs DEVICE DEVICE_TYPE PACKAGES) | 
|  | set(multiValueArgs) | 
|  | cmake_parse_arguments( | 
|  | DEFINE_ICE40_DEVICE | 
|  | "${options}" | 
|  | "${oneValueArgs}" | 
|  | "${multiValueArgs}" | 
|  | ${ARGN} | 
|  | ) | 
|  |  | 
|  | define_device( | 
|  | DEVICE ${DEFINE_ICE40_DEVICE_DEVICE} | 
|  | ARCH ice40 | 
|  | DEVICE_TYPE ${DEFINE_ICE40_DEVICE_DEVICE_TYPE} | 
|  | PACKAGES ${DEFINE_ICE40_DEVICE_PACKAGES} | 
|  | CACHE_PLACE_DELAY | 
|  | CACHE_ARGS | 
|  | --route_chan_width 100 | 
|  | --clock_modeling route | 
|  | --allow_unrelated_clustering off | 
|  | --target_ext_pin_util 0.7 | 
|  | --router_init_wirelength_abort_threshold 2 | 
|  | --congested_routing_iteration_threshold 0.8 | 
|  | ) | 
|  |  | 
|  | add_icebox_layouts( | 
|  | DEVICE | 
|  | ${DEFINE_ICE40_DEVICE_DEVICE} | 
|  | PACKAGES | 
|  | ${DEFINE_ICE40_DEVICE_PACKAGES} | 
|  | ) | 
|  | endfunction() | 
|  |  | 
|  |  | 
|  | define_ice40_device( | 
|  | DEVICE | 
|  | hx1k | 
|  | DEVICE_TYPE | 
|  | top-routing-virt | 
|  | PACKAGES | 
|  | tq144;ct256 | 
|  | ) | 
|  |  | 
|  | define_ice40_device(DEVICE lp1k DEVICE_TYPE top-routing-virt PACKAGES qn84) | 
|  |  | 
|  | if (NOT LIGHT_BUILD) | 
|  | define_ice40_device(DEVICE hx8k DEVICE_TYPE top-routing-virt PACKAGES ct256) | 
|  | define_ice40_device(DEVICE lp8k DEVICE_TYPE top-routing-virt PACKAGES cm81) | 
|  | define_ice40_device(DEVICE up5k DEVICE_TYPE top-routing-virt PACKAGES sg48) | 
|  | endif (NOT LIGHT_BUILD) |