A computer-implemented method of configuring a programmable integrated circuit device using a high-level language, said method comprising: creating a library of pre-compiled virtual fabrics (200, 300, 400), which are obtained by compiling a plurality of virtual programmable devices from descriptions of the virtual programmable devices in said high-level language, wherein said virtual fabrics have different distributions of different types of function blocks (202, 301, 401); receiving a description of a user configuration for said programmable integrated circuit device in said high-level language, wherein said description defines a set of kernels to be implemented by said programmable integrated circuit device; parsing said description of the set of kernels using a programming processor to produce an intermediate representation for each kernel, converting and optimizing the intermediate representation for each kernel into a control-data flow graph, CDFG, representing the respective kernel and containing information about its area and maximum clock frequency, examining the CDFGs representing the kernels to ascertain the hardware needs for hardware-circuit representation of the kernels, and selecting one of said pre-compiled virtual fabrics from the library of virtual fabrics (200, 300, 400), wherein the selected pre-compiled virtual fabric is a virtual fabric that meets those hardware needs, wherein selecting said one of said pre-compiled virtual fabrics from the library of virtual fabrics (200, 300, 400) uses a cost function that computes how closely the virtual fabric meets the hardware needs of the kernel; instantiating said selected pre-compiled virtual fabric on said programmable integrated circuit device; and configuring said instantiated one of said compiled virtual programmable devices with said user configuration using synthesis, placement and routing techniques. creating a library of pre-compiled virtual fabrics (200, 300, 400), which are obtained by compiling a plurality of virtual programmable devices from descriptions of the virtual programmable devices in said high-level language, wherein said virtual fabrics have different distributions of different types of function blocks (202, 301, 401); receiving a description of a user configuration for said programmable integrated circuit device in said high-level language, wherein said description defines a set of kernels to be implemented by said programmable integrated circuit device; parsing said description of the set of kernels using a programming processor to produce an intermediate representation for each kernel, converting and optimizing the intermediate representation for each kernel into a control-data flow graph, CDFG, representing the respective kernel and containing information about its area and maximum clock frequency, examining the CDFGs representing the kernels to ascertain the hardware needs for hardware-circuit representation of the kernels, and selecting one of said pre-compiled virtual fabrics from the library of virtual fabrics (200, 300, 400), wherein the selected pre-compiled virtual fabric is a virtual fabric that meets those hardware needs, wherein selecting said one of said pre-compiled virtual fabrics from the library of virtual fabrics (200, 300, 400) uses a cost function that computes how closely the virtual fabric meets the hardware needs of the kernel; instantiating said selected pre-compiled virtual fabric on said programmable integrated circuit device; and configuring said instantiated one of said compiled virtual programmable devices with said user configuration using synthesis, placement and routing techniques.