this allows one to not have to recompile and remove opencl files on devices with no opencl support --- it also cleans up the c methods splitting them into 3 different libraries