The ERIs are evaluated using the Obara-Saika scheme. To facilitate integral calculations on GPUs, we avoid the contraction step on the device and instead compute all ERIs in the primitive basis. Moreover, we chose to evaluate the Cartesian components of the primitive functions separately, such that the ERIs involving different Cartesian components can be done on separate threads. For example, a primitive [sp|sp] integral is split into nine ERI evaluations that can be carried out independently. The code for computing the ERIs are autogenerated by explicitly "unrolling" all the Obara-Saika vertical and horizontal recurrence relations, and each ERI can thus be computed from scratch without using any intermediate results from other ERIs. The final expressions for ERIs involving s-and p-functions are similar to the explicit formulae presented by Baxter and Cook, and we have generated ERI expressions up to d-functions.