public static void createCudaLinker( StreamWriter writer, ProjectInfo_CPP projectInfo, ProjectConfigurationInfo_CPP configurationInfo, ProjectInfo_CUDA projectCudaInfo) { if (!projectCudaInfo.IsCUDA || projectCudaInfo.CompileInfos.Count == 0) { return; } var projectSettings = MakeItSoConfig.Instance.getProjectConfig(projectInfo.Name); var intermediateFolder = MakefileBuilder_Project_CPP.getIntermediateFolder(projectInfo, configurationInfo); string files = ""; foreach (var info in projectCudaInfo.CompileInfos) { var filename = info.File; if (projectSettings.filesOrDirectoriesShouldBeRemoved(filename)) { continue; } string path = String.Format("{0}/{1}", intermediateFolder, filename); if (filename.StartsWith("..")) { var tmp = filename.Replace("../", ""); path = String.Format("{0}/{1}", intermediateFolder, tmp); } string objectPath = Path.ChangeExtension(path, ".o"); files += objectPath + " "; } // TODO string sm = "sm_20"; { var compileInfo = projectCudaInfo.CompileInfos.Count > 0 ? projectCudaInfo.CompileInfos[0] : projectCudaInfo.AllCompileInfo; var opt = compileInfo.getOption(configurationInfo.Name); var gens = getCodeGenerations(opt); sm = gens[1]; } var linkedFile = getLinkedCudaFile(intermediateFolder); writer.WriteLine("# Link gpu code files."); writer.WriteLine("{0}: {1}", linkedFile, files); writer.WriteLine("\t$(NVCC) -arch={0} -dlink {1} -o {2}", sm, files, linkedFile); writer.WriteLine(""); }
public static void createFileTargets( StreamWriter writer, ProjectInfo_CPP projectInfo, ProjectConfigurationInfo_CPP configurationInfo, ProjectInfo_CUDA projectCudaInfo) { if (!projectCudaInfo.IsCUDA) { return; } var includePath = String.Format("$({0})", MakefileBuilder_Project_CPP.getIncludePathVariableName(configurationInfo)); var preprocessorDefinitions = String.Format("$({0})", MakefileBuilder_Project_CPP.getPreprocessorDefinitionsVariableName(configurationInfo)); var intermediateFolder = MakefileBuilder_Project_CPP.getIntermediateFolder(projectInfo, configurationInfo); var projectSettings = MakeItSoConfig.Instance.getProjectConfig(projectInfo.Name); foreach (var info in projectCudaInfo.CompileInfos) { var filename = info.File; if (projectSettings.filesOrDirectoriesShouldBeRemoved(filename)) { continue; } var opt = info.getOption(configurationInfo.Name); string compileFlags = getCudaCompileFlags(configurationInfo, opt); string path = String.Format("{0}/{1}", intermediateFolder, filename); if (filename.StartsWith("..")) { var tmp = filename.Replace("../", ""); path = String.Format("{0}/{1}", intermediateFolder, tmp); } string objectPath = Path.ChangeExtension(path, ".o"); writer.WriteLine("# Compiles file {0} for the {1} configuration...", filename, configurationInfo.Name); writer.WriteLine("{0}: {1}", objectPath, filename); writer.WriteLine("\t$(NVCC) {0} {1} {2} -c {3} -o {4}", compileFlags, includePath, preprocessorDefinitions, filename, objectPath); writer.WriteLine(""); } }