示例#1
0
        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("");
        }
示例#2
0
        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("");
            }
        }