From 802dbe52399dd2330020b94d12e594b46f85e70a Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 7 Aug 2014 15:18:27 -0400 Subject: cmLocalVisualStudio7Generator: Rename local 'lang' var In the WriteGroup method, rename the 'lang' var to 'ppLang' since it is specifically for the preprocessor definitions language selection. --- Source/cmLocalVisualStudio7Generator.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 3ed4a48..29165f8 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -1695,7 +1695,7 @@ bool cmLocalVisualStudio7Generator else if(!fcinfo.FileConfigMap.empty()) { const char* aCompilerTool = "VCCLCompilerTool"; - const char* lang = "CXX"; + const char* ppLang = "CXX"; if(this->FortranProject) { aCompilerTool = "VFFortranCompilerTool"; @@ -1713,7 +1713,7 @@ bool cmLocalVisualStudio7Generator if(ext == "rc") { aCompilerTool = "VCResourceCompilerTool"; - lang = "RC"; + ppLang = "RC"; if(this->FortranProject) { aCompilerTool = "VFResourceCompilerTool"; @@ -1763,7 +1763,7 @@ bool cmLocalVisualStudio7Generator fileOptions.OutputFlagMap(fout, "\t\t\t\t\t"); fileOptions.OutputPreprocessorDefinitions(fout, "\t\t\t\t\t", "\n", - lang); + ppLang); } if(!fc.AdditionalDeps.empty()) { -- cgit v0.12 From 5b0a46e1c93f99c8ba5fadbc3224a3721d95aa64 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Aug 2014 11:50:31 -0400 Subject: ASM_MASM: Do not require compiler to be a full path The compiler detection modules for this language do not yet know how to find the full path to 'ml' or 'ml64', so do not require it. --- Source/cmGlobalGenerator.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 3f948b5..3681515 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -620,7 +620,8 @@ cmGlobalGenerator::EnableLanguage(std::vectorconst& languages, "No " << compilerName << " could be found.\n" ; } - else if(strcmp(lang, "RC") != 0) + else if(strcmp(lang, "RC") != 0 && + strcmp(lang, "ASM_MASM") != 0) { if(!cmSystemTools::FileIsFullPath(compilerFile)) { -- cgit v0.12 From 0374abdb18135bfb9f1b88c8f6be17c160fb8b4a Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Aug 2014 11:31:14 -0400 Subject: ASM_MASM: Add preprocessor definitions to compile lines The MASM tools (ml, ml64) support -D preprocessor definition flags. Update our compilation rule variable to pass them. --- Modules/CMakeASM_MASMInformation.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/CMakeASM_MASMInformation.cmake b/Modules/CMakeASM_MASMInformation.cmake index eb105ab..972883c 100644 --- a/Modules/CMakeASM_MASMInformation.cmake +++ b/Modules/CMakeASM_MASMInformation.cmake @@ -18,7 +18,7 @@ set(ASM_DIALECT "_MASM") set(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS asm) -set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT " /c /Fo ") +set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT " /c /Fo ") include(CMakeASMInformation) set(ASM_DIALECT) -- cgit v0.12 From d7866c52c9fc7f28990337a965e8d9e6652b0ac5 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Aug 2014 14:44:52 -0400 Subject: ASM_MASM: Fix selection of ml64 Recognize 64-bit platforms based on the C or CXX architecture or the platform specified with a VS generator name. --- Modules/CMakeDetermineASM_MASMCompiler.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Modules/CMakeDetermineASM_MASMCompiler.cmake b/Modules/CMakeDetermineASM_MASMCompiler.cmake index 665a65c..142ef95 100644 --- a/Modules/CMakeDetermineASM_MASMCompiler.cmake +++ b/Modules/CMakeDetermineASM_MASMCompiler.cmake @@ -17,7 +17,8 @@ set(ASM_DIALECT "_MASM") # if we are using the 64bit cl compiler, assume we also want the 64bit assembler -if(CMAKE_CL_64) +if(";${CMAKE_VS_PLATFORM_NAME};${MSVC_C_ARCHITECTURE_ID};${MSVC_CXX_ARCHITECTURE_ID};" + MATCHES ";(Win64|Itanium|x64|IA64);") set(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT ml64) else() set(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT ml) -- cgit v0.12 From 4f6940df8c69053b4451056ebf3ebdc8f97bf356 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 7 Aug 2014 14:47:43 -0400 Subject: VS: Fix ASM_MASM support in VS >= 10 Fix a typo introduced by commit ce511435 (stringapi: Use strings for the languages, 2014-02-03) to check the language name correctly. --- Source/cmVisualStudio10TargetGenerator.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 3c7745d..9256b89 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -1123,7 +1123,7 @@ void cmVisualStudio10TargetGenerator::WriteAllSources() { tool = "ClCompile"; } - else if (lang == "ASM_NASM" && + else if (lang == "ASM_MASM" && this->GlobalGenerator->IsMasmEnabled()) { tool = "MASM"; -- cgit v0.12 From 1d662e4806364172ebf76099c2d016efd414c74a Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Aug 2014 10:02:12 -0400 Subject: VS: Generate MASM flag tables from MSBuild tool files Run cmparseMSBuildXML.py on masm.xml to generate our flag tables: python cmparseMSBuildXML.py -x ".../MSBuild/Microsoft.Cpp/v4.0/BuildCustomizations/masm.xml" > cmVS10MASMFlagTable.h python cmparseMSBuildXML.py -x ".../MSBuild/Microsoft.Cpp/v4.0/V110/BuildCustomizations/masm.xml" > cmVS11MASMFlagTable.h python cmparseMSBuildXML.py -x ".../MSBuild/Microsoft.Cpp/v4.0/V120/BuildCustomizations/masm.xml" > cmVS12MASMFlagTable.h python cmparseMSBuildXML.py -x ".../MSBuild/Microsoft.Cpp/v4.0/V140/BuildCustomizations/masm.xml" > cmVS14MASMFlagTable.h Fix up the declaration names at the top of each file. --- Source/cmVS10MASMFlagTable.h | 96 ++++++++++++++++++++++++++++++++++++++++++++ Source/cmVS11MASMFlagTable.h | 96 ++++++++++++++++++++++++++++++++++++++++++++ Source/cmVS12MASMFlagTable.h | 96 ++++++++++++++++++++++++++++++++++++++++++++ Source/cmVS14MASMFlagTable.h | 96 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 384 insertions(+) create mode 100644 Source/cmVS10MASMFlagTable.h create mode 100644 Source/cmVS11MASMFlagTable.h create mode 100644 Source/cmVS12MASMFlagTable.h create mode 100644 Source/cmVS14MASMFlagTable.h diff --git a/Source/cmVS10MASMFlagTable.h b/Source/cmVS10MASMFlagTable.h new file mode 100644 index 0000000..19d402d --- /dev/null +++ b/Source/cmVS10MASMFlagTable.h @@ -0,0 +1,96 @@ +static cmVS7FlagTable cmVS10MASMFlagTable[] = +{ + + //Enum Properties + {"PreserveIdentifierCase", "", + "Default", "0", 0}, + {"PreserveIdentifierCase", "/Cp", + "Preserves Identifier Case (/Cp)", "1", 0}, + {"PreserveIdentifierCase", "/Cu", + "Maps all identifiers to upper case. (/Cu)", "2", 0}, + {"PreserveIdentifierCase", "/Cx", + "Preserves case in public and extern symbols. (/Cx)", "3", 0}, + + {"WarningLevel", "/W0", + "Warning Level 0 (/W0)", "0", 0}, + {"WarningLevel", "/W1", + "Warning Level 1 (/W1)", "1", 0}, + {"WarningLevel", "/W2", + "Warning Level 2 (/W2)", "2", 0}, + {"WarningLevel", "/W3", + "Warning Level 3 (/W3)", "3", 0}, + + {"PackAlignmentBoundary", "", + "Default", "0", 0}, + {"PackAlignmentBoundary", "/Zp1", + "One Byte Boundary (/Zp1)", "1", 0}, + {"PackAlignmentBoundary", "/Zp2", + "Two Byte Boundary (/Zp2)", "2", 0}, + {"PackAlignmentBoundary", "/Zp4", + "Four Byte Boundary (/Zp4)", "3", 0}, + {"PackAlignmentBoundary", "/Zp8", + "Eight Byte Boundary (/Zp8)", "4", 0}, + {"PackAlignmentBoundary", "/Zp16", + "Sixteen Byte Boundary (/Zp16)", "5", 0}, + + {"CallingConvention", "", + "Default", "0", 0}, + {"CallingConvention", "/Gd", + "Use C-style Calling Convention (/Gd)", "1", 0}, + {"CallingConvention", "/Gz", + "Use stdcall Calling Convention (/Gz)", "2", 0}, + {"CallingConvention", "/Gc", + "Use Pascal Calling Convention (/Gc)", "3", 0}, + + {"ErrorReporting", "/errorReport:prompt", + "Prompt to send report immediately (/errorReport:prompt)", "0", 0}, + {"ErrorReporting", "/errorReport:queue", + "Prompt to send report at the next logon (/errorReport:queue)", "1", 0}, + {"ErrorReporting", "/errorReport:send", + "Automatically send report (/errorReport:send)", "2", 0}, + {"ErrorReporting", "/errorReport:none", + "Do not send report (/errorReport:none)", "3", 0}, + + + //Bool Properties + {"NoLogo", "/nologo", "", "true", 0}, + {"GeneratePreprocessedSourceListing", "/EP", "", "true", 0}, + {"ListAllAvailableInformation", "/Sa", "", "true", 0}, + {"UseSafeExceptionHandlers", "/safeseh", "", "true", 0}, + {"AddFirstPassListing", "/Sf", "", "true", 0}, + {"EnableAssemblyGeneratedCodeListing", "/Sg", "", "true", 0}, + {"DisableSymbolTable", "/Sn", "", "true", 0}, + {"EnableFalseConditionalsInListing", "/Sx", "", "true", 0}, + {"TreatWarningsAsErrors", "/WX", "", "true", 0}, + {"MakeAllSymbolsPublic", "/Zf", "", "true", 0}, + {"GenerateDebugInformation", "/Zi", "", "true", 0}, + {"EnableMASM51Compatibility", "/Zm", "", "true", 0}, + {"PerformSyntaxCheckOnly", "/Zs", "", "true", 0}, + + //Bool Properties With Argument + + //String List Properties + {"PreprocessorDefinitions", "/D"[value]"", + "Preprocessor Definitions", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + {"IncludePaths", "/I "[value]"", + "Include Paths", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + {"BrowseFile", "/FR"[value]"", + "Generate Browse Information File", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + // Skip [AdditionalDependencies] - no command line Switch. + + //String Properties + // Skip [Inputs] - no command line Switch. + {"ObjectFileName", "/Fo"[value]"", + "Object File Name", + "", cmVS7FlagTable::UserValue}, + {"AssembledCodeListingFile", "/Fl"[value]"", + "Assembled Code Listing File", + "", cmVS7FlagTable::UserValue}, + // Skip [CommandLineTemplate] - no command line Switch. + // Skip [ExecutionDescription] - no command line Switch. + // Skip [AdditionalOptions] - no command line Switch. + {0,0,0,0,0} +}; diff --git a/Source/cmVS11MASMFlagTable.h b/Source/cmVS11MASMFlagTable.h new file mode 100644 index 0000000..97cf03c --- /dev/null +++ b/Source/cmVS11MASMFlagTable.h @@ -0,0 +1,96 @@ +static cmVS7FlagTable cmVS11MASMFlagTable[] = +{ + + //Enum Properties + {"PreserveIdentifierCase", "", + "Default", "0", 0}, + {"PreserveIdentifierCase", "/Cp", + "Preserves Identifier Case (/Cp)", "1", 0}, + {"PreserveIdentifierCase", "/Cu", + "Maps all identifiers to upper case. (/Cu)", "2", 0}, + {"PreserveIdentifierCase", "/Cx", + "Preserves case in public and extern symbols. (/Cx)", "3", 0}, + + {"WarningLevel", "/W0", + "Warning Level 0 (/W0)", "0", 0}, + {"WarningLevel", "/W1", + "Warning Level 1 (/W1)", "1", 0}, + {"WarningLevel", "/W2", + "Warning Level 2 (/W2)", "2", 0}, + {"WarningLevel", "/W3", + "Warning Level 3 (/W3)", "3", 0}, + + {"PackAlignmentBoundary", "", + "Default", "0", 0}, + {"PackAlignmentBoundary", "/Zp1", + "One Byte Boundary (/Zp1)", "1", 0}, + {"PackAlignmentBoundary", "/Zp2", + "Two Byte Boundary (/Zp2)", "2", 0}, + {"PackAlignmentBoundary", "/Zp4", + "Four Byte Boundary (/Zp4)", "3", 0}, + {"PackAlignmentBoundary", "/Zp8", + "Eight Byte Boundary (/Zp8)", "4", 0}, + {"PackAlignmentBoundary", "/Zp16", + "Sixteen Byte Boundary (/Zp16)", "5", 0}, + + {"CallingConvention", "", + "Default", "0", 0}, + {"CallingConvention", "/Gd", + "Use C-style Calling Convention (/Gd)", "1", 0}, + {"CallingConvention", "/Gz", + "Use stdcall Calling Convention (/Gz)", "2", 0}, + {"CallingConvention", "/Gc", + "Use Pascal Calling Convention (/Gc)", "3", 0}, + + {"ErrorReporting", "/errorReport:prompt", + "Prompt to send report immediately (/errorReport:prompt)", "0", 0}, + {"ErrorReporting", "/errorReport:queue", + "Prompt to send report at the next logon (/errorReport:queue)", "1", 0}, + {"ErrorReporting", "/errorReport:send", + "Automatically send report (/errorReport:send)", "2", 0}, + {"ErrorReporting", "/errorReport:none", + "Do not send report (/errorReport:none)", "3", 0}, + + + //Bool Properties + {"NoLogo", "/nologo", "", "true", 0}, + {"GeneratePreprocessedSourceListing", "/EP", "", "true", 0}, + {"ListAllAvailableInformation", "/Sa", "", "true", 0}, + {"UseSafeExceptionHandlers", "/safeseh", "", "true", 0}, + {"AddFirstPassListing", "/Sf", "", "true", 0}, + {"EnableAssemblyGeneratedCodeListing", "/Sg", "", "true", 0}, + {"DisableSymbolTable", "/Sn", "", "true", 0}, + {"EnableFalseConditionalsInListing", "/Sx", "", "true", 0}, + {"TreatWarningsAsErrors", "/WX", "", "true", 0}, + {"MakeAllSymbolsPublic", "/Zf", "", "true", 0}, + {"GenerateDebugInformation", "/Zi", "", "true", 0}, + {"EnableMASM51Compatibility", "/Zm", "", "true", 0}, + {"PerformSyntaxCheckOnly", "/Zs", "", "true", 0}, + + //Bool Properties With Argument + + //String List Properties + {"PreprocessorDefinitions", "/D"[value]"", + "Preprocessor Definitions", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + {"IncludePaths", "/I "[value]"", + "Include Paths", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + {"BrowseFile", "/FR"[value]"", + "Generate Browse Information File", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + // Skip [AdditionalDependencies] - no command line Switch. + + //String Properties + // Skip [Inputs] - no command line Switch. + {"ObjectFileName", "/Fo"[value]"", + "Object File Name", + "", cmVS7FlagTable::UserValue}, + {"AssembledCodeListingFile", "/Fl"[value]"", + "Assembled Code Listing File", + "", cmVS7FlagTable::UserValue}, + // Skip [CommandLineTemplate] - no command line Switch. + // Skip [ExecutionDescription] - no command line Switch. + // Skip [AdditionalOptions] - no command line Switch. + {0,0,0,0,0} +}; diff --git a/Source/cmVS12MASMFlagTable.h b/Source/cmVS12MASMFlagTable.h new file mode 100644 index 0000000..ecd5d33 --- /dev/null +++ b/Source/cmVS12MASMFlagTable.h @@ -0,0 +1,96 @@ +static cmVS7FlagTable cmVS12MASMFlagTable[] = +{ + + //Enum Properties + {"PreserveIdentifierCase", "", + "Default", "0", 0}, + {"PreserveIdentifierCase", "/Cp", + "Preserves Identifier Case (/Cp)", "1", 0}, + {"PreserveIdentifierCase", "/Cu", + "Maps all identifiers to upper case. (/Cu)", "2", 0}, + {"PreserveIdentifierCase", "/Cx", + "Preserves case in public and extern symbols. (/Cx)", "3", 0}, + + {"WarningLevel", "/W0", + "Warning Level 0 (/W0)", "0", 0}, + {"WarningLevel", "/W1", + "Warning Level 1 (/W1)", "1", 0}, + {"WarningLevel", "/W2", + "Warning Level 2 (/W2)", "2", 0}, + {"WarningLevel", "/W3", + "Warning Level 3 (/W3)", "3", 0}, + + {"PackAlignmentBoundary", "", + "Default", "0", 0}, + {"PackAlignmentBoundary", "/Zp1", + "One Byte Boundary (/Zp1)", "1", 0}, + {"PackAlignmentBoundary", "/Zp2", + "Two Byte Boundary (/Zp2)", "2", 0}, + {"PackAlignmentBoundary", "/Zp4", + "Four Byte Boundary (/Zp4)", "3", 0}, + {"PackAlignmentBoundary", "/Zp8", + "Eight Byte Boundary (/Zp8)", "4", 0}, + {"PackAlignmentBoundary", "/Zp16", + "Sixteen Byte Boundary (/Zp16)", "5", 0}, + + {"CallingConvention", "", + "Default", "0", 0}, + {"CallingConvention", "/Gd", + "Use C-style Calling Convention (/Gd)", "1", 0}, + {"CallingConvention", "/Gz", + "Use stdcall Calling Convention (/Gz)", "2", 0}, + {"CallingConvention", "/Gc", + "Use Pascal Calling Convention (/Gc)", "3", 0}, + + {"ErrorReporting", "/errorReport:prompt", + "Prompt to send report immediately (/errorReport:prompt)", "0", 0}, + {"ErrorReporting", "/errorReport:queue", + "Prompt to send report at the next logon (/errorReport:queue)", "1", 0}, + {"ErrorReporting", "/errorReport:send", + "Automatically send report (/errorReport:send)", "2", 0}, + {"ErrorReporting", "/errorReport:none", + "Do not send report (/errorReport:none)", "3", 0}, + + + //Bool Properties + {"NoLogo", "/nologo", "", "true", 0}, + {"GeneratePreprocessedSourceListing", "/EP", "", "true", 0}, + {"ListAllAvailableInformation", "/Sa", "", "true", 0}, + {"UseSafeExceptionHandlers", "/safeseh", "", "true", 0}, + {"AddFirstPassListing", "/Sf", "", "true", 0}, + {"EnableAssemblyGeneratedCodeListing", "/Sg", "", "true", 0}, + {"DisableSymbolTable", "/Sn", "", "true", 0}, + {"EnableFalseConditionalsInListing", "/Sx", "", "true", 0}, + {"TreatWarningsAsErrors", "/WX", "", "true", 0}, + {"MakeAllSymbolsPublic", "/Zf", "", "true", 0}, + {"GenerateDebugInformation", "/Zi", "", "true", 0}, + {"EnableMASM51Compatibility", "/Zm", "", "true", 0}, + {"PerformSyntaxCheckOnly", "/Zs", "", "true", 0}, + + //Bool Properties With Argument + + //String List Properties + {"PreprocessorDefinitions", "/D"[value]"", + "Preprocessor Definitions", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + {"IncludePaths", "/I "[value]"", + "Include Paths", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + {"BrowseFile", "/FR"[value]"", + "Generate Browse Information File", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + // Skip [AdditionalDependencies] - no command line Switch. + + //String Properties + // Skip [Inputs] - no command line Switch. + {"ObjectFileName", "/Fo"[value]"", + "Object File Name", + "", cmVS7FlagTable::UserValue}, + {"AssembledCodeListingFile", "/Fl"[value]"", + "Assembled Code Listing File", + "", cmVS7FlagTable::UserValue}, + // Skip [CommandLineTemplate] - no command line Switch. + // Skip [ExecutionDescription] - no command line Switch. + // Skip [AdditionalOptions] - no command line Switch. + {0,0,0,0,0} +}; diff --git a/Source/cmVS14MASMFlagTable.h b/Source/cmVS14MASMFlagTable.h new file mode 100644 index 0000000..ccfde94 --- /dev/null +++ b/Source/cmVS14MASMFlagTable.h @@ -0,0 +1,96 @@ +static cmVS7FlagTable cmVS14MASMFlagTable[] = +{ + + //Enum Properties + {"PreserveIdentifierCase", "", + "Default", "0", 0}, + {"PreserveIdentifierCase", "/Cp", + "Preserves Identifier Case (/Cp)", "1", 0}, + {"PreserveIdentifierCase", "/Cu", + "Maps all identifiers to upper case. (/Cu)", "2", 0}, + {"PreserveIdentifierCase", "/Cx", + "Preserves case in public and extern symbols. (/Cx)", "3", 0}, + + {"WarningLevel", "/W0", + "Warning Level 0 (/W0)", "0", 0}, + {"WarningLevel", "/W1", + "Warning Level 1 (/W1)", "1", 0}, + {"WarningLevel", "/W2", + "Warning Level 2 (/W2)", "2", 0}, + {"WarningLevel", "/W3", + "Warning Level 3 (/W3)", "3", 0}, + + {"PackAlignmentBoundary", "", + "Default", "0", 0}, + {"PackAlignmentBoundary", "/Zp1", + "One Byte Boundary (/Zp1)", "1", 0}, + {"PackAlignmentBoundary", "/Zp2", + "Two Byte Boundary (/Zp2)", "2", 0}, + {"PackAlignmentBoundary", "/Zp4", + "Four Byte Boundary (/Zp4)", "3", 0}, + {"PackAlignmentBoundary", "/Zp8", + "Eight Byte Boundary (/Zp8)", "4", 0}, + {"PackAlignmentBoundary", "/Zp16", + "Sixteen Byte Boundary (/Zp16)", "5", 0}, + + {"CallingConvention", "", + "Default", "0", 0}, + {"CallingConvention", "/Gd", + "Use C-style Calling Convention (/Gd)", "1", 0}, + {"CallingConvention", "/Gz", + "Use stdcall Calling Convention (/Gz)", "2", 0}, + {"CallingConvention", "/Gc", + "Use Pascal Calling Convention (/Gc)", "3", 0}, + + {"ErrorReporting", "/errorReport:prompt", + "Prompt to send report immediately (/errorReport:prompt)", "0", 0}, + {"ErrorReporting", "/errorReport:queue", + "Prompt to send report at the next logon (/errorReport:queue)", "1", 0}, + {"ErrorReporting", "/errorReport:send", + "Automatically send report (/errorReport:send)", "2", 0}, + {"ErrorReporting", "/errorReport:none", + "Do not send report (/errorReport:none)", "3", 0}, + + + //Bool Properties + {"NoLogo", "/nologo", "", "true", 0}, + {"GeneratePreprocessedSourceListing", "/EP", "", "true", 0}, + {"ListAllAvailableInformation", "/Sa", "", "true", 0}, + {"UseSafeExceptionHandlers", "/safeseh", "", "true", 0}, + {"AddFirstPassListing", "/Sf", "", "true", 0}, + {"EnableAssemblyGeneratedCodeListing", "/Sg", "", "true", 0}, + {"DisableSymbolTable", "/Sn", "", "true", 0}, + {"EnableFalseConditionalsInListing", "/Sx", "", "true", 0}, + {"TreatWarningsAsErrors", "/WX", "", "true", 0}, + {"MakeAllSymbolsPublic", "/Zf", "", "true", 0}, + {"GenerateDebugInformation", "/Zi", "", "true", 0}, + {"EnableMASM51Compatibility", "/Zm", "", "true", 0}, + {"PerformSyntaxCheckOnly", "/Zs", "", "true", 0}, + + //Bool Properties With Argument + + //String List Properties + {"PreprocessorDefinitions", "/D"[value]"", + "Preprocessor Definitions", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + {"IncludePaths", "/I "[value]"", + "Include Paths", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + {"BrowseFile", "/FR"[value]"", + "Generate Browse Information File", + "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, + // Skip [AdditionalDependencies] - no command line Switch. + + //String Properties + // Skip [Inputs] - no command line Switch. + {"ObjectFileName", "/Fo"[value]"", + "Object File Name", + "", cmVS7FlagTable::UserValue}, + {"AssembledCodeListingFile", "/Fl"[value]"", + "Assembled Code Listing File", + "", cmVS7FlagTable::UserValue}, + // Skip [CommandLineTemplate] - no command line Switch. + // Skip [ExecutionDescription] - no command line Switch. + // Skip [AdditionalOptions] - no command line Switch. + {0,0,0,0,0} +}; -- cgit v0.12 From 0271a5f9ba3a8aa2b2e0a7d94a53ad3f9bb52a00 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Aug 2014 11:36:30 -0400 Subject: VS: Manually fix MASM flag table entries Drop '"[value]"' placeholders. --- Source/cmVS10MASMFlagTable.h | 10 +++++----- Source/cmVS11MASMFlagTable.h | 10 +++++----- Source/cmVS12MASMFlagTable.h | 10 +++++----- Source/cmVS14MASMFlagTable.h | 10 +++++----- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Source/cmVS10MASMFlagTable.h b/Source/cmVS10MASMFlagTable.h index 19d402d..8fb6f33 100644 --- a/Source/cmVS10MASMFlagTable.h +++ b/Source/cmVS10MASMFlagTable.h @@ -70,23 +70,23 @@ static cmVS7FlagTable cmVS10MASMFlagTable[] = //Bool Properties With Argument //String List Properties - {"PreprocessorDefinitions", "/D"[value]"", + {"PreprocessorDefinitions", "/D", "Preprocessor Definitions", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, - {"IncludePaths", "/I "[value]"", + {"IncludePaths", "/I", "Include Paths", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, - {"BrowseFile", "/FR"[value]"", + {"BrowseFile", "/FR", "Generate Browse Information File", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, // Skip [AdditionalDependencies] - no command line Switch. //String Properties // Skip [Inputs] - no command line Switch. - {"ObjectFileName", "/Fo"[value]"", + {"ObjectFileName", "/Fo", "Object File Name", "", cmVS7FlagTable::UserValue}, - {"AssembledCodeListingFile", "/Fl"[value]"", + {"AssembledCodeListingFile", "/Fl", "Assembled Code Listing File", "", cmVS7FlagTable::UserValue}, // Skip [CommandLineTemplate] - no command line Switch. diff --git a/Source/cmVS11MASMFlagTable.h b/Source/cmVS11MASMFlagTable.h index 97cf03c..2ff95ad 100644 --- a/Source/cmVS11MASMFlagTable.h +++ b/Source/cmVS11MASMFlagTable.h @@ -70,23 +70,23 @@ static cmVS7FlagTable cmVS11MASMFlagTable[] = //Bool Properties With Argument //String List Properties - {"PreprocessorDefinitions", "/D"[value]"", + {"PreprocessorDefinitions", "/D", "Preprocessor Definitions", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, - {"IncludePaths", "/I "[value]"", + {"IncludePaths", "/I", "Include Paths", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, - {"BrowseFile", "/FR"[value]"", + {"BrowseFile", "/FR", "Generate Browse Information File", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, // Skip [AdditionalDependencies] - no command line Switch. //String Properties // Skip [Inputs] - no command line Switch. - {"ObjectFileName", "/Fo"[value]"", + {"ObjectFileName", "/Fo", "Object File Name", "", cmVS7FlagTable::UserValue}, - {"AssembledCodeListingFile", "/Fl"[value]"", + {"AssembledCodeListingFile", "/Fl", "Assembled Code Listing File", "", cmVS7FlagTable::UserValue}, // Skip [CommandLineTemplate] - no command line Switch. diff --git a/Source/cmVS12MASMFlagTable.h b/Source/cmVS12MASMFlagTable.h index ecd5d33..74d529c 100644 --- a/Source/cmVS12MASMFlagTable.h +++ b/Source/cmVS12MASMFlagTable.h @@ -70,23 +70,23 @@ static cmVS7FlagTable cmVS12MASMFlagTable[] = //Bool Properties With Argument //String List Properties - {"PreprocessorDefinitions", "/D"[value]"", + {"PreprocessorDefinitions", "/D", "Preprocessor Definitions", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, - {"IncludePaths", "/I "[value]"", + {"IncludePaths", "/I", "Include Paths", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, - {"BrowseFile", "/FR"[value]"", + {"BrowseFile", "/FR", "Generate Browse Information File", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, // Skip [AdditionalDependencies] - no command line Switch. //String Properties // Skip [Inputs] - no command line Switch. - {"ObjectFileName", "/Fo"[value]"", + {"ObjectFileName", "/Fo", "Object File Name", "", cmVS7FlagTable::UserValue}, - {"AssembledCodeListingFile", "/Fl"[value]"", + {"AssembledCodeListingFile", "/Fl", "Assembled Code Listing File", "", cmVS7FlagTable::UserValue}, // Skip [CommandLineTemplate] - no command line Switch. diff --git a/Source/cmVS14MASMFlagTable.h b/Source/cmVS14MASMFlagTable.h index ccfde94..dce846f 100644 --- a/Source/cmVS14MASMFlagTable.h +++ b/Source/cmVS14MASMFlagTable.h @@ -70,23 +70,23 @@ static cmVS7FlagTable cmVS14MASMFlagTable[] = //Bool Properties With Argument //String List Properties - {"PreprocessorDefinitions", "/D"[value]"", + {"PreprocessorDefinitions", "/D", "Preprocessor Definitions", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, - {"IncludePaths", "/I "[value]"", + {"IncludePaths", "/I", "Include Paths", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, - {"BrowseFile", "/FR"[value]"", + {"BrowseFile", "/FR", "Generate Browse Information File", "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, // Skip [AdditionalDependencies] - no command line Switch. //String Properties // Skip [Inputs] - no command line Switch. - {"ObjectFileName", "/Fo"[value]"", + {"ObjectFileName", "/Fo", "Object File Name", "", cmVS7FlagTable::UserValue}, - {"AssembledCodeListingFile", "/Fl"[value]"", + {"AssembledCodeListingFile", "/Fl", "Assembled Code Listing File", "", cmVS7FlagTable::UserValue}, // Skip [CommandLineTemplate] - no command line Switch. -- cgit v0.12 From e872744990f48777a1f1cebc791911363515092d Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Aug 2014 11:20:20 -0400 Subject: VS: Populate MASM tool build settings in .vcxproj files --- Source/cmVisualStudio10TargetGenerator.cxx | 92 ++++++++++++++++++++++++++++++ Source/cmVisualStudio10TargetGenerator.h | 6 ++ Source/cmVisualStudioGeneratorOptions.h | 1 + 3 files changed, 99 insertions(+) diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 9256b89..b9295e4 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -24,18 +24,22 @@ #include "cmVS10RCFlagTable.h" #include "cmVS10LinkFlagTable.h" #include "cmVS10LibFlagTable.h" +#include "cmVS10MASMFlagTable.h" #include "cmVS11CLFlagTable.h" #include "cmVS11RCFlagTable.h" #include "cmVS11LinkFlagTable.h" #include "cmVS11LibFlagTable.h" +#include "cmVS11MASMFlagTable.h" #include "cmVS12CLFlagTable.h" #include "cmVS12RCFlagTable.h" #include "cmVS12LinkFlagTable.h" #include "cmVS12LibFlagTable.h" +#include "cmVS12MASMFlagTable.h" #include "cmVS14CLFlagTable.h" #include "cmVS14RCFlagTable.h" #include "cmVS14LinkFlagTable.h" #include "cmVS14LibFlagTable.h" +#include "cmVS14MASMFlagTable.h" #include @@ -111,6 +115,24 @@ cmIDEFlagTable const* cmVisualStudio10TargetGenerator::GetLinkFlagTable() const return 0; } +cmIDEFlagTable const* cmVisualStudio10TargetGenerator::GetMasmFlagTable() const +{ + if(this->MSTools) + { + cmLocalVisualStudioGenerator::VSVersion + v = this->LocalGenerator->GetVersion(); + if(v >= cmLocalVisualStudioGenerator::VS14) + { return cmVS14MASMFlagTable; } + else if(v >= cmLocalVisualStudioGenerator::VS12) + { return cmVS12MASMFlagTable; } + else if(v == cmLocalVisualStudioGenerator::VS11) + { return cmVS11MASMFlagTable; } + else + { return cmVS10MASMFlagTable; } + } + return 0; +} + static std::string cmVS10EscapeXML(std::string arg) { cmSystemTools::ReplaceString(arg, "&", "&"); @@ -251,6 +273,10 @@ void cmVisualStudio10TargetGenerator::Generate() { return; } + if(!this->ComputeMasmOptions()) + { + return; + } if(!this->ComputeLinkOptions()) { return; @@ -1646,6 +1672,71 @@ WriteRCOptions(std::string const& configName, this->WriteString("\n", 2); } +//---------------------------------------------------------------------------- +bool cmVisualStudio10TargetGenerator::ComputeMasmOptions() +{ + if(!this->GlobalGenerator->IsMasmEnabled()) + { + return true; + } + std::vector const* configs = + this->GlobalGenerator->GetConfigurations(); + for(std::vector::const_iterator i = configs->begin(); + i != configs->end(); ++i) + { + if(!this->ComputeMasmOptions(*i)) + { + return false; + } + } + return true; +} + +//---------------------------------------------------------------------------- +bool cmVisualStudio10TargetGenerator::ComputeMasmOptions( + std::string const& configName) +{ + cmsys::auto_ptr pOptions( + new Options(this->LocalGenerator, Options::MasmCompiler, + this->GetMasmFlagTable())); + Options& masmOptions = *pOptions; + + std::string CONFIG = cmSystemTools::UpperCase(configName); + std::string configFlagsVar = std::string("CMAKE_ASM_MASM_FLAGS_") + CONFIG; + std::string flags = + std::string(this->Makefile->GetSafeDefinition("CMAKE_ASM_MASM_FLAGS")) + + std::string(" ") + + std::string(this->Makefile->GetSafeDefinition(configFlagsVar)); + + masmOptions.Parse(flags.c_str()); + this->MasmOptions[configName] = pOptions.release(); + return true; +} + +void cmVisualStudio10TargetGenerator:: +WriteMasmOptions(std::string const& configName, + std::vector const& includes) +{ + if(!this->MSTools || !this->GlobalGenerator->IsMasmEnabled()) + { + return; + } + this->WriteString("\n", 2); + + // Preprocessor definitions and includes are shared with clOptions. + Options& clOptions = *(this->ClOptions[configName]); + clOptions.OutputPreprocessorDefinitions(*this->BuildFileStream, " ", + "\n", "ASM_MASM"); + + Options& masmOptions = *(this->MasmOptions[configName]); + masmOptions.AppendFlag("IncludePaths", includes); + masmOptions.AppendFlag("IncludePaths", "%(IncludePaths)"); + masmOptions.OutputFlagMap(*this->BuildFileStream, " "); + masmOptions.OutputAdditionalOptions(*this->BuildFileStream, " ", ""); + + this->WriteString("\n", 2); +} + void cmVisualStudio10TargetGenerator::WriteLibOptions(std::string const& config) @@ -1990,6 +2081,7 @@ void cmVisualStudio10TargetGenerator::WriteItemDefinitionGroups() this->WriteClOptions(*i, includes); // output rc compile flags this->WriteRCOptions(*i, includes); + this->WriteMasmOptions(*i, includes); } // output midl flags this->WriteMidlOptions(*i, includes); diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h index 4e9bcd1..93b72f4 100644 --- a/Source/cmVisualStudio10TargetGenerator.h +++ b/Source/cmVisualStudio10TargetGenerator.h @@ -78,6 +78,10 @@ private: bool ComputeRcOptions(std::string const& config); void WriteRCOptions(std::string const& config, std::vector const & includes); + bool ComputeMasmOptions(); + bool ComputeMasmOptions(std::string const& config); + void WriteMasmOptions(std::string const& config, + std::vector const& includes); bool ComputeLinkOptions(); bool ComputeLinkOptions(std::string const& config); void WriteLinkOptions(std::string const& config); @@ -109,12 +113,14 @@ private: cmIDEFlagTable const* GetRcFlagTable() const; cmIDEFlagTable const* GetLibFlagTable() const; cmIDEFlagTable const* GetLinkFlagTable() const; + cmIDEFlagTable const* GetMasmFlagTable() const; private: typedef cmVisualStudioGeneratorOptions Options; typedef std::map OptionsMap; OptionsMap ClOptions; OptionsMap RcOptions; + OptionsMap MasmOptions; OptionsMap LinkOptions; std::string PathToVcxproj; cmTarget* Target; diff --git a/Source/cmVisualStudioGeneratorOptions.h b/Source/cmVisualStudioGeneratorOptions.h index 47a7c62..8de6017 100644 --- a/Source/cmVisualStudioGeneratorOptions.h +++ b/Source/cmVisualStudioGeneratorOptions.h @@ -28,6 +28,7 @@ public: { Compiler, ResourceCompiler, + MasmCompiler, Linker, FortranCompiler }; -- cgit v0.12 From df3b007d7f904f8de5877f3e05b629239af7220a Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 7 Aug 2014 14:53:57 -0400 Subject: VS: Add test for MASM support It is now expected to work with VS >= 10 and MSVC >= 13.1. --- Tests/CMakeLists.txt | 5 +++++ Tests/VSMASM/CMakeLists.txt | 10 ++++++++++ Tests/VSMASM/foo.asm | 7 +++++++ Tests/VSMASM/include/foo-proc.asm | 4 ++++ Tests/VSMASM/main.c | 2 ++ 5 files changed, 28 insertions(+) create mode 100644 Tests/VSMASM/CMakeLists.txt create mode 100644 Tests/VSMASM/foo.asm create mode 100644 Tests/VSMASM/include/foo-proc.asm create mode 100644 Tests/VSMASM/main.c diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index ca7fcdc..f237f21 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1679,6 +1679,11 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/MFC") endif() + if(MSVC AND NOT MSVC_VERSION LESS 1310 + AND NOT CMAKE_GENERATOR MATCHES "Visual Studio [6789]( |$)") + ADD_TEST_MACRO(VSMASM VSMASM) + endif() + if(${CMAKE_GENERATOR} MATCHES "Visual Studio") if(NOT MSVC60) ADD_TEST_MACRO(SBCS SBCS) diff --git a/Tests/VSMASM/CMakeLists.txt b/Tests/VSMASM/CMakeLists.txt new file mode 100644 index 0000000..f2570a3 --- /dev/null +++ b/Tests/VSMASM/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 2.8.12) +project(VSMASM C ASM_MASM) +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + add_definitions(-DTESTx64) +else() + add_definitions(-DTESTi386) + set(CMAKE_ASM_MASM_FLAGS "${CMAKE_ASM_MASM_FLAGS} /safeseh") +endif() +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) +add_executable(VSMASM main.c foo.asm) diff --git a/Tests/VSMASM/foo.asm b/Tests/VSMASM/foo.asm new file mode 100644 index 0000000..51cb969 --- /dev/null +++ b/Tests/VSMASM/foo.asm @@ -0,0 +1,7 @@ +ifndef TESTx64 +.386 +.model flat, c +endif +.code +include +end diff --git a/Tests/VSMASM/include/foo-proc.asm b/Tests/VSMASM/include/foo-proc.asm new file mode 100644 index 0000000..e8ba5dc --- /dev/null +++ b/Tests/VSMASM/include/foo-proc.asm @@ -0,0 +1,4 @@ +foo proc public + mov eax,0 + ret +foo endp diff --git a/Tests/VSMASM/main.c b/Tests/VSMASM/main.c new file mode 100644 index 0000000..570ba16 --- /dev/null +++ b/Tests/VSMASM/main.c @@ -0,0 +1,2 @@ +extern int foo(void); +int main(void) { return foo(); } -- cgit v0.12 From a43f44000d12c1357eeed04e5a02d11236730dfa Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 7 Aug 2014 12:58:25 -0400 Subject: VS: Move internal MasmEnabled member up to VS 7 generator Move the member from cmGlobalVisualStudio10Generator to cmGlobalVisualStudio7Generator to make it useful for earlier versions of VS. Set the member to true only starting with cmGlobalVisualStudio8Generator since we will not implement MASM support for versions less than VS 8. --- Source/cmGlobalVisualStudio10Generator.cxx | 10 ---------- Source/cmGlobalVisualStudio10Generator.h | 4 ---- Source/cmGlobalVisualStudio7Generator.cxx | 1 + Source/cmGlobalVisualStudio7Generator.h | 4 ++++ Source/cmGlobalVisualStudio8Generator.cxx | 8 ++++++++ 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index c708a08..19aa52c 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -99,7 +99,6 @@ cmGlobalVisualStudio10Generator::cmGlobalVisualStudio10Generator( "ProductDir", vc10Express, cmSystemTools::KeyWOW64_32); this->SystemIsWindowsPhone = false; this->SystemIsWindowsStore = false; - this->MasmEnabled = false; this->MSBuildCommandInitialized = false; } @@ -257,15 +256,6 @@ void cmGlobalVisualStudio10Generator ::EnableLanguage(std::vectorconst & lang, cmMakefile *mf, bool optional) { - for(std::vector::const_iterator it = lang.begin(); - it != lang.end(); ++it) - { - if(*it == "ASM_MASM") - { - this->MasmEnabled = true; - } - } - cmGlobalVisualStudio8Generator::EnableLanguage(lang, mf, optional); } diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h index 6245b28..11fa954 100644 --- a/Source/cmGlobalVisualStudio10Generator.h +++ b/Source/cmGlobalVisualStudio10Generator.h @@ -58,9 +58,6 @@ public: /** Is the installed VS an Express edition? */ bool IsExpressEdition() const { return this->ExpressEdition; } - /** Is the Microsoft Assembler enabled? */ - bool IsMasmEnabled() const { return this->MasmEnabled; } - /** The toolset name for the target platform. */ const char* GetPlatformToolset() const; @@ -123,7 +120,6 @@ protected: bool SystemIsWindowsPhone; bool SystemIsWindowsStore; bool ExpressEdition; - bool MasmEnabled; bool UseFolderProperty(); diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 3d79357..e312ff1 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -23,6 +23,7 @@ cmGlobalVisualStudio7Generator::cmGlobalVisualStudio7Generator( { this->IntelProjectVersion = 0; this->DevEnvCommandInitialized = false; + this->MasmEnabled = false; if (platformName.empty()) { diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index 390b97c..7e3ed23 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -102,6 +102,9 @@ public: virtual void FindMakeProgram(cmMakefile*); + /** Is the Microsoft Assembler enabled? */ + bool IsMasmEnabled() const { return this->MasmEnabled; } + // Encoding for Visual Studio files virtual std::string Encoding(); @@ -173,6 +176,7 @@ protected: // There is one SLN file per project. std::string CurrentProject; std::string PlatformName; + bool MasmEnabled; private: char* IntelProjectVersion; diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx index 6bfef68..c91730f 100644 --- a/Source/cmGlobalVisualStudio8Generator.cxx +++ b/Source/cmGlobalVisualStudio8Generator.cxx @@ -136,6 +136,14 @@ void cmGlobalVisualStudio8Generator ::EnableLanguage(std::vectorconst & lang, cmMakefile *mf, bool optional) { + for(std::vector::const_iterator it = lang.begin(); + it != lang.end(); ++it) + { + if(*it == "ASM_MASM") + { + this->MasmEnabled = true; + } + } this->AddPlatformDefinitions(mf); cmGlobalVisualStudio7Generator::EnableLanguage(lang, mf, optional); } -- cgit v0.12 From 0f8522a6c9c00afc67c367de1e1c3f601f1996e9 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 7 Aug 2014 15:20:49 -0400 Subject: VS: Add MASM support to VS 8 and 9 (#8170, #14984) --- Source/cmLocalVisualStudio7Generator.cxx | 51 ++++++++++++++++++++++++++++++++ Tests/CMakeLists.txt | 5 +++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 29165f8..11a9627 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -44,6 +44,16 @@ private: extern cmVS7FlagTable cmLocalVisualStudio7GeneratorFlagTable[]; +static void cmConvertToWindowsSlash(std::string& s) +{ + std::string::size_type pos = 0; + while((pos = s.find('/', pos)) != std::string::npos) + { + s[pos] = '\\'; + pos++; + } +} + //---------------------------------------------------------------------------- cmLocalVisualStudio7Generator::cmLocalVisualStudio7Generator(VSVersion v): cmLocalVisualStudioGenerator(v) @@ -862,6 +872,31 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout, } } fout << "/>\n"; // end of IsMasmEnabled() && !this->FortranProject) + { + Options masmOptions(this, Options::MasmCompiler, 0, 0); + fout << + "\t\t\tEscapeForXML(inc); + sep = ";"; + } + fout << "\"\n"; + // Use same preprocessor definitions as VCCLCompilerTool. + targetOptions.OutputPreprocessorDefinitions(fout, "\t\t\t\t", "\n", + "ASM_MASM"); + masmOptions.OutputFlagMap(fout, "\t\t\t\t"); + fout << + "\t\t\t\tObjectFile=\"$(IntDir)\\\"\n" + "\t\t\t/>\n"; + } tool = "VCCustomBuildTool"; if(this->FortranProject) { @@ -1700,6 +1735,7 @@ bool cmLocalVisualStudio7Generator { aCompilerTool = "VFFortranCompilerTool"; } + std::string const& lang = (*sf)->GetLanguage(); std::string ext = (*sf)->GetExtension(); ext = cmSystemTools::LowerCase(ext); if(ext == "idl") @@ -1727,6 +1763,11 @@ bool cmLocalVisualStudio7Generator aCompilerTool = "VFCustomBuildTool"; } } + if (gg->IsMasmEnabled() && !this->FortranProject && + lang == "ASM_MASM") + { + aCompilerTool = "MASM"; + } for(std::map::const_iterator fci = fcinfo.FileConfigMap.begin(); fci != fcinfo.FileConfigMap.end(); ++fci) @@ -2095,6 +2136,16 @@ cmLocalVisualStudio7Generator::WriteProjectStart(std::ostream& fout, << "\t\n" << "\t\tGetPlatformName() << "\"/>\n" << "\t\n"; + if(gg->IsMasmEnabled()) + { + fout << + "\t\n" + "\t\t\n" + "\t\n" + ; + } } diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index f237f21..7aa31cc 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1680,7 +1680,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release endif() if(MSVC AND NOT MSVC_VERSION LESS 1310 - AND NOT CMAKE_GENERATOR MATCHES "Visual Studio [6789]( |$)") + AND NOT CMAKE_GENERATOR MATCHES "Visual Studio [67]( |$)" + AND (NOT CMAKE_GENERATOR MATCHES "Visual Studio [89]( |$)" + OR CMAKE_SIZEOF_VOID_P EQUAL 4) + ) ADD_TEST_MACRO(VSMASM VSMASM) endif() -- cgit v0.12 From cbd1d42b34bf83ca24de1b98c5963a2941206300 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 20 Aug 2014 14:58:47 -0400 Subject: Help: Add notes for topic 'vs-masm' --- Help/release/dev/vs-masm.rst | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Help/release/dev/vs-masm.rst diff --git a/Help/release/dev/vs-masm.rst b/Help/release/dev/vs-masm.rst new file mode 100644 index 0000000..d7a19d0 --- /dev/null +++ b/Help/release/dev/vs-masm.rst @@ -0,0 +1,5 @@ +vs-masm +------- + +* Visual Studio generators for VS 8 and later learned to support + the ``ASM_MASM`` language. -- cgit v0.12