コード例 #1
0
        public void CppTemplate()
        {
            var project = new WrapperProject();

            project.NamespaceName   = "CppTemplate";
            project.ProjectFilePath = "CppTemplate/cpp_template.xml";
            project.SourceRootFolders.Add(".");
            project.ReadCpp();
            project.Save();

            var parser = new DotNetParser(project);

            parser.Parse();

            project.CProjectPath  = "CppTemplate_wrap";
            project.CsProjectPath = "CppTemplate_wrap";
            var writer = new PInvokeWriter(parser);

            writer.Output();

            var cmake = new CMakeWriter(parser);

            cmake.Output();

            Assert.AreEqual(1, project.HeaderDefinitions.Count);
            Assert.AreEqual(4, project.ClassDefinitions.Count);

            /*
             * var cppClass1 = project.ClassDefinitions.First().Value;
             * Assert.AreEqual("CppClass1", cppClass1.Name);
             * Assert.AreEqual("CppClass1", cppClass1.ManagedName);
             * Assert.AreEqual(2, cppClass1.Methods.Count);
             * Assert.AreEqual("Empty", cppClass1.Methods[1].ManagedName);*/
        }
コード例 #2
0
        /// <summary>
        /// Writes the CMake file
        /// </summary>
        public static void CMakeWriter()
        {
            string TypePrefix = (isInternal ? Gpa.internalStr : Gpa.publicStr);

            foreach (var api in counterDefs)
            {
                bool       Init        = false;
                TextWriter CMakeWriter = null;
                string     headerFiles = "set(" + TypePrefix.ToUpper() + "_COUNTER_DEF_HEADERS_" + api.Key.ToUpper();
                string     sourceFiles = "set(" + TypePrefix.ToUpper() + "_COUNTER_DEF_SRC_" + api.Key.ToUpper();
                bool       foundHeader = false;
                foreach (var fileName in api.Value)
                {
                    if (!Init)
                    {
                        Init = true;
                        string CMakeFileName = Gpa.GetDirectoryFromFilePath(fileName) + "\\" +
                                               TypePrefix.ToLower() + "_" +
                                               Gpa.counterDefinitionsStr + api.Key + ".cmake";
                        CMakeWriter = new StreamWriter(CMakeFileName);
                        CMakeWriter.WriteLine("## Copyright (c) {0} Advanced Micro Devices, Inc. All rights reserved.", DateTime.Today.Year);
                        CMakeWriter.WriteLine("cmake_minimum_required(VERSION 3.5.1)");
                        CMakeWriter.WriteLine();
                        CMakeWriter.WriteLine("set(CMAKE_INCLUDE_CURRENT_DIR ON)");
                    }

                    if (Gpa.IsHeaderFile(fileName))
                    {
                        headerFiles = headerFiles + Environment.NewLine + "${CMAKE_CURRENT_LIST_DIR}/" + Gpa.GetFileNameFromFilePath(fileName);
                        foundHeader = true;
                    }
                    else
                    {
                        sourceFiles = sourceFiles + Environment.NewLine + "${CMAKE_CURRENT_LIST_DIR}/" + Gpa.GetFileNameFromFilePath(fileName);
                    }
                }

                if (null != CMakeWriter)
                {
                    if (foundHeader)
                    {
                        headerFiles = headerFiles + ")" + Environment.NewLine;
                    }

                    sourceFiles = sourceFiles + ")" + Environment.NewLine;

                    if (foundHeader)
                    {
                        CMakeWriter.WriteLine(headerFiles);
                    }

                    CMakeWriter.WriteLine(sourceFiles);
                    CMakeWriter.Close();
                }
            }

            // DerivedCounterDefs
            foreach (var api in derivedCounters)
            {
                bool       Init        = false;
                TextWriter CMakeWriter = null;
                string     headerFiles = "set(" + TypePrefix.ToUpper() + "_DERIVED_COUNTERS_API_HEADERS_" + api.Key.ToUpper();
                string     sourceFiles = "set(" + TypePrefix.ToUpper() + "_DERIVED_COUNTERS_API_SRC_" + api.Key.ToUpper();
                bool       foundHeader = false;
                foreach (var fileName in api.Value)
                {
                    if (!Init)
                    {
                        Init = true;
                        string CMakeFileName = Gpa.GetDirectoryFromFilePath(fileName) + "\\" +
                                               TypePrefix.ToLower() + "_" +
                                               Gpa.derivedCounterOutFileName + api.Key + ".cmake";
                        CMakeWriter = new StreamWriter(CMakeFileName);
                        CMakeWriter.WriteLine("## Copyright (c) {0} Advanced Micro Devices, Inc. All rights reserved.", DateTime.Today.Year);
                        CMakeWriter.WriteLine("cmake_minimum_required(VERSION 3.5.1)");
                        CMakeWriter.WriteLine();
                        CMakeWriter.WriteLine("set(CMAKE_INCLUDE_CURRENT_DIR ON)");
                    }

                    if (Gpa.IsHeaderFile(fileName))
                    {
                        headerFiles = headerFiles + Environment.NewLine + "${CMAKE_CURRENT_LIST_DIR}/" + Gpa.GetFileNameFromFilePath(fileName);
                        foundHeader = true;
                    }
                    else
                    {
                        sourceFiles = sourceFiles + Environment.NewLine + "${CMAKE_CURRENT_LIST_DIR}/" + Gpa.GetFileNameFromFilePath(fileName);
                    }
                }

                if (null != CMakeWriter)
                {
                    if (foundHeader)
                    {
                        headerFiles = headerFiles + ")" + Environment.NewLine;
                    }

                    sourceFiles = sourceFiles + ")" + Environment.NewLine;

                    if (foundHeader)
                    {
                        CMakeWriter.WriteLine(headerFiles);
                    }

                    CMakeWriter.WriteLine(sourceFiles);
                    CMakeWriter.Close();
                }
            }
        }