A computer-implemented method of implementing a dataflow graph (440, 1600) on a heterogeneous processing system formed by a System on Chip, SoC, comprising programmable logic and software-configurable hardened logic (110, 130), the method comprising: using, by a user, a heterogeneous programming environment, to generate object oriented source code that defines the dataflow graph (440, 1600); receiving, by a compiler, graph source code generated in the heterogeneous programming environment, the graph source code defining a plurality of kernels and a plurality of communication links, wherein each of the plurality of communication links couple a respective pair of the plurality of kernels to form the dataflow graph (440, 1600); and compiling, by the compiler, the graph source code to implement the dataflow graph (440, 1600) in the heterogeneous processing system, and transmitting, to the SoC, a configuration based on compiling the graph source code for configuring the software-configurable hardened logic (110, 130) and the programmable logic of the heterogeneous processing system to execute the dataflow graph (440, 1600), wherein compiling the graph source code comprises: assigning the plurality of kernels to different processing elements of the heterogeneous processing system based on the definition of the plurality of kernels in the graph source code, assigning a communication type to the plurality of communication links defined in the graph source code, and selecting synchronization techniques for transferring data between the plurality of kernels using the plurality of communication links, wherein assigning the plurality of kernels to the heterogeneous processing system comprises identifying that a first kernel and a second kernel are communicatively coupled by a first one of the plurality of communication links as defined by the graph source code; assigning the first kernel to a first data processing engine, DPE, in the heterogeneous processing system; and assigning the second kernel to a second DPE in the heterogeneous processing system that directly neighbors the first DPE. using, by a user, a heterogeneous programming environment, to generate object oriented source code that defines the dataflow graph (440, 1600); receiving, by a compiler, graph source code generated in the heterogeneous programming environment, the graph source code defining a plurality of kernels and a plurality of communication links, wherein each of the plurality of communication links couple a respective pair of the plurality of kernels to form the dataflow graph (440, 1600); and compiling, by the compiler, the graph source code to implement the dataflow graph (440, 1600) in the heterogeneous processing system, and transmitting, to the SoC, a configuration based on compiling the graph source code for configuring the software-configurable hardened logic (110, 130) and the programmable logic of the heterogeneous processing system to execute the dataflow graph (440, 1600), wherein compiling the graph source code comprises: assigning the plurality of kernels to different processing elements of the heterogeneous processing system based on the definition of the plurality of kernels in the graph source code, assigning a communication type to the plurality of communication links defined in the graph source code, and selecting synchronization techniques for transferring data between the plurality of kernels using the plurality of communication links, wherein assigning the plurality of kernels to the heterogeneous processing system comprises identifying that a first kernel and a second kernel are communicatively coupled by a first one of the plurality of communication links as defined by the graph source code; assigning the first kernel to a first data processing engine, DPE, in the heterogeneous processing system; and assigning the second kernel to a second DPE in the heterogeneous processing system that directly neighbors the first DPE.