adding gccasm.rules to vcproj files
authorChristoph von Wittich <christoph_vw@reactos.org>
Sat, 22 Oct 2005 02:27:37 +0000 (02:27 +0000)
committerChristoph von Wittich <christoph_vw@reactos.org>
Sat, 22 Oct 2005 02:27:37 +0000 (02:27 +0000)
now it is possible to compile .s files with msvc

svn path=/trunk/; revision=18671

reactos/tools/rbuild/backend/msvc/msvc.cpp
reactos/tools/rbuild/backend/msvc/msvc.h
reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp

index e270911..4df39ab 100644 (file)
@@ -54,10 +54,21 @@ MSVCBackend::MSVCBackend(Project &project,
 void MSVCBackend::Process()\r
 {\r
        string filename_sln ( ProjectNode.name );\r
+       string filename_rules = "gccasm.rules";\r
+       \r
        if ( configuration.VSProjectVersion == "6.00" )\r
                filename_sln += ".dsw";\r
-       else\r
+       else {\r
                filename_sln += ".sln";\r
+\r
+               m_rulesFile = fopen ( filename_rules.c_str(), "wb" );\r
+               if ( m_rulesFile )\r
+               {\r
+                       _generate_rules_file ( m_rulesFile );\r
+               }\r
+               fclose ( m_rulesFile );\r
+       }\r
+\r
        printf ( "Creating MSVC workspace: %s\n", filename_sln.c_str() );\r
        \r
        ProcessModules();\r
index 15b5431..bf8b9b6 100644 (file)
@@ -63,6 +63,7 @@ class MSVCBackend : public Backend
 \r
                FILE* m_dswFile;\r
                FILE* m_slnFile;\r
+               FILE* m_rulesFile;\r
 \r
                // functions in msvcmaker.cpp:\r
 \r
@@ -79,6 +80,7 @@ class MSVCBackend : public Backend
 \r
                // functions in vcprojmaker.cpp:\r
 \r
+               std::string _get_solution_verion ( void );\r
                std::string _gen_guid();\r
                std::string _replace_str(\r
                        std::string string1,\r
@@ -90,10 +92,11 @@ class MSVCBackend : public Backend
                void _generate_sln_header ( FILE* OUT );\r
                void _generate_sln_footer ( FILE* OUT );\r
                void _generate_sln ( FILE* OUT );\r
+               void _generate_rules_file ( FILE* OUT );\r
                void _generate_sln_project (\r
                        FILE* OUT,\r
                        const Module& module,\r
-                       std::string dsp_file,\r
+                       std::string vcproj_file,\r
                        std::string sln_guid,\r
                        std::string vcproj_guid,\r
                        const std::vector<Dependency*>& dependencies );\r
index 33fbb98..feae037 100644 (file)
@@ -190,6 +190,15 @@ MSVCBackend::_generate_vcproj ( const Module& module )
        fprintf ( OUT, "\t\t\tName=\"Win32\"/>\r\n" );\r
        fprintf ( OUT, "\t</Platforms>\r\n" );\r
 \r
+       fprintf ( OUT, "\t<ToolFiles>\r\n" );\r
+       fprintf ( OUT, "\t\t<ToolFile\r\n" );\r
+\r
+       string path = Path::RelativeFromDirectory ( ProjectNode.name, module.GetBasePath() );\r
+       path.erase(path.find(ProjectNode.name, 0), ProjectNode.name.size() + 1);\r
+\r
+       fprintf ( OUT, "\t\t\tRelativePath=\"%s/gccasm.rules\"/>\r\n", path.c_str() );\r
+       fprintf ( OUT, "\t</ToolFiles>\r\n" );\r
+\r
        int n = 0;\r
 \r
        std::string output_dir;\r
@@ -352,7 +361,7 @@ MSVCBackend::_generate_vcproj ( const Module& module )
        // Source files\r
        fprintf ( OUT, "\t\t<Filter\r\n" );\r
        fprintf ( OUT, "\t\t\tName=\"Source Files\"\r\n" );\r
-       fprintf ( OUT, "\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\">\r\n" );\r
+       fprintf ( OUT, "\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;S\">\r\n" );\r
        for ( size_t isrcfile = 0; isrcfile < source_files.size(); isrcfile++ )\r
        {\r
                const string& source_file = DosSeparator(source_files[isrcfile]);\r
@@ -410,14 +419,13 @@ MSVCBackend::_replace_str(std::string string1, const std::string &find_str, cons
         return string1;\r
 } \r
 \r
-void\r
-MSVCBackend::_generate_sln_header ( FILE* OUT )\r
-{\r
+std::string\r
+MSVCBackend::_get_solution_verion ( void ) {\r
+    string version;\r
+\r
     if (configuration.VSProjectVersion.empty())\r
         configuration.VSProjectVersion = MS_VS_DEF_VERSION;\r
 \r
-    string version;\r
-\r
     if (configuration.VSProjectVersion == "7.00")\r
                version = "7.00";\r
 \r
@@ -427,7 +435,38 @@ MSVCBackend::_generate_sln_header ( FILE* OUT )
     if (configuration.VSProjectVersion == "8.00")\r
                version = "9.00";\r
 \r
-    fprintf ( OUT, "Microsoft Visual Studio Solution File, Format Version %s\r\n", version.c_str() );\r
+       return version;\r
+}\r
+\r
+\r
+void\r
+MSVCBackend::_generate_rules_file ( FILE* OUT )\r
+{\r
+       fprintf ( OUT, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" );\r
+       fprintf ( OUT, "<VisualStudioToolFile\r\n" );\r
+       fprintf ( OUT, "\tName=\"GCC Assembler\"\r\n" );\r
+       fprintf ( OUT, "\tVersion=\"%s\"\r\n", _get_solution_verion().c_str() );\r
+       fprintf ( OUT, "\t>\r\n" );\r
+       fprintf ( OUT, "\t<Rules>\r\n" );\r
+       fprintf ( OUT, "\t\t<CustomBuildRule\r\n" );\r
+       fprintf ( OUT, "\t\t\tName=\"Assembler\"\r\n" );\r
+       fprintf ( OUT, "\t\t\tDisplayName=\"Assembler Files\"\r\n" );\r
+       fprintf ( OUT, "\t\t\tCommandLine=\"cl /E &quot;$(InputPath)&quot; | as -o &quot;$(OutDir)\\$(InputName).obj&quot;\"\r\n" );\r
+       fprintf ( OUT, "\t\t\tOutputs=\"$(OutDir)\\$(InputName).obj\"\r\n" );   \r
+       fprintf ( OUT, "\t\t\tFileExtensions=\"*.S\"\r\n" );\r
+       fprintf ( OUT, "\t\t\tExecutionDescription=\"asm\"\r\n" );\r
+       fprintf ( OUT, "\t\t\t>\r\n" );\r
+       fprintf ( OUT, "\t\t\t<Properties>\r\n" );\r
+       fprintf ( OUT, "\t\t\t</Properties>\r\n" );\r
+       fprintf ( OUT, "\t\t</CustomBuildRule>\r\n" );\r
+       fprintf ( OUT, "\t</Rules>\r\n" );\r
+       fprintf ( OUT, "</VisualStudioToolFile>\r\n" );\r
+}\r
+\r
+void\r
+MSVCBackend::_generate_sln_header ( FILE* OUT )\r
+{\r
+    fprintf ( OUT, "Microsoft Visual Studio Solution File, Format Version %s\r\n", _get_solution_verion().c_str() );\r
     fprintf ( OUT, "# Visual Studio 2005\r\n" );\r
     fprintf ( OUT, "\r\n" );\r
 }\r