1. A method of designing an integrated circuit, comprising: generating a common database representing the integrated circuit from source code written in a high-level language specifying programmable logical units, wherein a complete representation of the programmable logical units is included in the common database; generating a template for a customizable logical unit, wherein the template is specified by one of the programmable logical units and includes a representation of interfaces to and from the customizable logical unit; and optimizing a portion of the common database representing the integrated circuit to produce a target-specific tree, wherein the target-specific tree corresponds to at least one of a variety of target models of the integrated circuit and includes a representation of the customizable logical unit.