/* * Copyright 2012 Phil Pratt-Szeliga and other contributors * http://chirrup.org/ * * See the file LICENSE for copying permission. */ package org.trifort.rootbeer.compiler; import java.util.List; import org.trifort.rootbeer.generate.bytecode.GenerateForKernel; import org.trifort.rootbeer.generate.opencl.OpenCLScene; import soot.*; import soot.rbclassload.DfsInfo; import soot.rbclassload.RootbeerClassLoader; public class Transform2 { private int m_Uuid; public Transform2(){ m_Uuid = 1; } public void run(String cls){ OpenCLScene scene = new OpenCLScene(); OpenCLScene.setInstance(scene); scene.init(); SootClass soot_class1 = Scene.v().getSootClass(cls); SootMethod method = soot_class1.getMethod("void gpuMethod()"); String uuid = getUuid(); GenerateForKernel generator = new GenerateForKernel(method, uuid); try { generator.makeClass(); } catch(Exception ex){ ex.printStackTrace(); OpenCLScene.releaseV(); return; } //add an interface to the class SootClass soot_class = method.getDeclaringClass(); SootClass iface_class = Scene.v().getSootClass("org.trifort.rootbeer.runtime.CompiledKernel"); soot_class.addInterface(iface_class); System.out.println("added interface CompiledKernel"); OpenCLScene.releaseV(); } private String getUuid(){ int uuid = m_Uuid; m_Uuid++; return Integer.toString(uuid); } }