Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: pylib/gyp/generator/msvs.py

Issue 11742015: Support MASM in MSBuild and Winja (Closed) Base URL: https://chromium.googlesource.com/external/gyp.git@master
Patch Set: With tests Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pylib/gyp/generator/ninja.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 Google Inc. All rights reserved. 1 # Copyright (c) 2012 Google Inc. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import copy 5 import copy
6 import ntpath 6 import ntpath
7 import os 7 import os
8 import posixpath 8 import posixpath
9 import re 9 import re
10 import subprocess 10 import subprocess
(...skipping 900 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 gyp_file = os.path.split(project.build_file)[1] 911 gyp_file = os.path.split(project.build_file)[1]
912 sources, excluded_sources = _PrepareListOfSources(spec, generator_flags, 912 sources, excluded_sources = _PrepareListOfSources(spec, generator_flags,
913 gyp_file) 913 gyp_file)
914 914
915 # Add rules. 915 # Add rules.
916 actions_to_add = {} 916 actions_to_add = {}
917 _GenerateRulesForMSVS(p, project_dir, options, spec, 917 _GenerateRulesForMSVS(p, project_dir, options, spec,
918 sources, excluded_sources, 918 sources, excluded_sources,
919 actions_to_add) 919 actions_to_add)
920 list_excluded = generator_flags.get('msvs_list_excluded_files', True) 920 list_excluded = generator_flags.get('msvs_list_excluded_files', True)
921 sources, excluded_sources, excluded_idl = ( 921 sources, excluded_sources, excluded_custom_files = (
922 _AdjustSourcesAndConvertToFilterHierarchy( 922 _AdjustSourcesAndConvertToFilterHierarchy(
923 spec, options, project_dir, sources, excluded_sources, list_excluded)) 923 spec, options, project_dir, sources, excluded_sources, list_excluded))
924 924
925 # Add in files. 925 # Add in files.
926 missing_sources = _VerifySourcesExist(sources, project_dir) 926 missing_sources = _VerifySourcesExist(sources, project_dir)
927 p.AddFiles(sources) 927 p.AddFiles(sources)
928 928
929 _AddToolFilesToMSVS(p, spec) 929 _AddToolFilesToMSVS(p, spec)
930 _HandlePreCompiledHeaders(p, sources, spec) 930 _HandlePreCompiledHeaders(p, sources, spec)
931 _AddActions(actions_to_add, spec, relative_path_of_gyp_file) 931 _AddActions(actions_to_add, spec, relative_path_of_gyp_file)
932 _AddCopies(actions_to_add, spec) 932 _AddCopies(actions_to_add, spec)
933 _WriteMSVSUserFile(project.path, version, spec) 933 _WriteMSVSUserFile(project.path, version, spec)
934 934
935 # NOTE: this stanza must appear after all actions have been decided. 935 # NOTE: this stanza must appear after all actions have been decided.
936 # Don't excluded sources with actions attached, or they won't run. 936 # Don't excluded sources with actions attached, or they won't run.
937 excluded_sources = _FilterActionsFromExcluded( 937 excluded_sources = _FilterActionsFromExcluded(
938 excluded_sources, actions_to_add) 938 excluded_sources, actions_to_add)
939 _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources, excluded_idl, 939 _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources, excluded_custom_files,
940 list_excluded) 940 list_excluded)
941 _AddAccumulatedActionsToMSVS(p, spec, actions_to_add) 941 _AddAccumulatedActionsToMSVS(p, spec, actions_to_add)
942 942
943 # Write it out. 943 # Write it out.
944 p.WriteIfChanged() 944 p.WriteIfChanged()
945 945
946 return missing_sources 946 return missing_sources
947 947
948 948
949 def _GetUniquePlatforms(spec): 949 def _GetUniquePlatforms(spec):
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1018 1018
1019 Arguments: 1019 Arguments:
1020 p: The target project being generated. 1020 p: The target project being generated.
1021 spec: The target dictionary containing the properties of the target. 1021 spec: The target dictionary containing the properties of the target.
1022 config_type: The configuration type, a number as defined by Microsoft. 1022 config_type: The configuration type, a number as defined by Microsoft.
1023 config_name: The name of the configuration. 1023 config_name: The name of the configuration.
1024 config: The dictionnary that defines the special processing to be done 1024 config: The dictionnary that defines the special processing to be done
1025 for this configuration. 1025 for this configuration.
1026 """ 1026 """
1027 # Get the information for this configuration 1027 # Get the information for this configuration
1028 include_dirs, resource_include_dirs = _GetIncludeDirs(config) 1028 include_dirs, resource_include_dirs, _ = _GetIncludeDirs(config)
1029 libraries = _GetLibraries(spec) 1029 libraries = _GetLibraries(spec)
1030 out_file, vc_tool, _ = _GetOutputFilePathAndTool(spec, msbuild=False) 1030 out_file, vc_tool, _ = _GetOutputFilePathAndTool(spec, msbuild=False)
1031 defines = _GetDefines(config) 1031 defines = _GetDefines(config)
1032 defines = [_EscapeCppDefineForMSVS(d) for d in defines] 1032 defines = [_EscapeCppDefineForMSVS(d) for d in defines]
1033 disabled_warnings = _GetDisabledWarnings(config) 1033 disabled_warnings = _GetDisabledWarnings(config)
1034 prebuild = config.get('msvs_prebuild') 1034 prebuild = config.get('msvs_prebuild')
1035 postbuild = config.get('msvs_postbuild') 1035 postbuild = config.get('msvs_postbuild')
1036 def_file = _GetModuleDefinition(spec) 1036 def_file = _GetModuleDefinition(spec)
1037 precompiled_header = config.get('msvs_precompiled_header') 1037 precompiled_header = config.get('msvs_precompiled_header')
1038 1038
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 _AddConfigurationToMSVS(p, spec, tools, config, config_type, config_name) 1087 _AddConfigurationToMSVS(p, spec, tools, config, config_type, config_name)
1088 1088
1089 1089
1090 def _GetIncludeDirs(config): 1090 def _GetIncludeDirs(config):
1091 """Returns the list of directories to be used for #include directives. 1091 """Returns the list of directories to be used for #include directives.
1092 1092
1093 Arguments: 1093 Arguments:
1094 config: The dictionnary that defines the special processing to be done 1094 config: The dictionnary that defines the special processing to be done
1095 for this configuration. 1095 for this configuration.
1096 Returns: 1096 Returns:
1097 The list of directory paths. 1097 A triple of (C++ include directory paths, Resource Compiler include
1098 directory paths, MASM include directory paths)
1098 """ 1099 """
1099 # TODO(bradnelson): include_dirs should really be flexible enough not to 1100 # TODO(bradnelson): include_dirs should really be flexible enough not to
1100 # require this sort of thing. 1101 # require this sort of thing.
1101 include_dirs = ( 1102 include_dirs = (
1102 config.get('include_dirs', []) + 1103 config.get('include_dirs', []) +
1103 config.get('msvs_system_include_dirs', [])) 1104 config.get('msvs_system_include_dirs', []))
1104 resource_include_dirs = config.get('resource_include_dirs', include_dirs) 1105 resource_include_dirs = config.get('resource_include_dirs', include_dirs)
1106 masm_include_dirs = config.get('masm_include_dirs', include_dirs)
1105 include_dirs = _FixPaths(include_dirs) 1107 include_dirs = _FixPaths(include_dirs)
1106 resource_include_dirs = _FixPaths(resource_include_dirs) 1108 resource_include_dirs = _FixPaths(resource_include_dirs)
1107 return include_dirs, resource_include_dirs 1109 masm_include_dirs = _FixPaths(masm_include_dirs)
1110 return include_dirs, resource_include_dirs, masm_include_dirs
1108 1111
1109 1112
1110 def _GetLibraries(spec): 1113 def _GetLibraries(spec):
1111 """Returns the list of libraries for this configuration. 1114 """Returns the list of libraries for this configuration.
1112 1115
1113 Arguments: 1116 Arguments:
1114 spec: The target dictionary containing the properties of the target. 1117 spec: The target dictionary containing the properties of the target.
1115 Returns: 1118 Returns:
1116 The list of directory paths. 1119 The list of directory paths.
1117 """ 1120 """
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
1330 Also converts the sets to lists. 1333 Also converts the sets to lists.
1331 1334
1332 Arguments: 1335 Arguments:
1333 spec: The target dictionary containing the properties of the target. 1336 spec: The target dictionary containing the properties of the target.
1334 options: Global generator options. 1337 options: Global generator options.
1335 gyp_dir: The path to the gyp file being processed. 1338 gyp_dir: The path to the gyp file being processed.
1336 sources: A set of sources to be included for this project. 1339 sources: A set of sources to be included for this project.
1337 excluded_sources: A set of sources to be excluded for this project. 1340 excluded_sources: A set of sources to be excluded for this project.
1338 Returns: 1341 Returns:
1339 A trio of (list of sources, list of excluded sources, 1342 A trio of (list of sources, list of excluded sources,
1340 path of excluded IDL file) 1343 path of excluded files being handled by non-MSVS-native rules)
1341 """ 1344 """
1342 # Exclude excluded sources coming into the generator. 1345 # Exclude excluded sources coming into the generator.
1343 excluded_sources.update(set(spec.get('sources_excluded', []))) 1346 excluded_sources.update(set(spec.get('sources_excluded', [])))
1344 # Add excluded sources into sources for good measure. 1347 # Add excluded sources into sources for good measure.
1345 sources.update(excluded_sources) 1348 sources.update(excluded_sources)
1346 # Convert to proper windows form. 1349 # Convert to proper windows form.
1347 # NOTE: sources goes from being a set to a list here. 1350 # NOTE: sources goes from being a set to a list here.
1348 # NOTE: excluded_sources goes from being a set to a list here. 1351 # NOTE: excluded_sources goes from being a set to a list here.
1349 sources = _FixPaths(sources) 1352 sources = _FixPaths(sources)
1350 # Convert to proper windows form. 1353 # Convert to proper windows form.
1351 excluded_sources = _FixPaths(excluded_sources) 1354 excluded_sources = _FixPaths(excluded_sources)
1352 1355
1353 excluded_idl = _IdlFilesHandledNonNatively(spec, sources) 1356 excluded_custom_files = _FilesHandledNonNatively(spec, sources)
1354 1357
1355 precompiled_related = _GetPrecompileRelatedFiles(spec) 1358 precompiled_related = _GetPrecompileRelatedFiles(spec)
1356 # Find the excluded ones, minus the precompiled header related ones. 1359 # Find the excluded ones, minus the precompiled header related ones.
1357 fully_excluded = [i for i in excluded_sources if i not in precompiled_related] 1360 fully_excluded = [i for i in excluded_sources if i not in precompiled_related]
1358 1361
1359 # Convert to folders and the right slashes. 1362 # Convert to folders and the right slashes.
1360 sources = [i.split('\\') for i in sources] 1363 sources = [i.split('\\') for i in sources]
1361 sources = _ConvertSourcesToFilterHierarchy(sources, excluded=fully_excluded, 1364 sources = _ConvertSourcesToFilterHierarchy(sources, excluded=fully_excluded,
1362 list_excluded=list_excluded) 1365 list_excluded=list_excluded)
1363 1366
1364 return sources, excluded_sources, excluded_idl 1367 return sources, excluded_sources, excluded_custom_files
1365 1368
1366 1369
1367 def _IdlFilesHandledNonNatively(spec, sources): 1370 def _FilesHandledNonNatively(spec, sources):
1368 # If any non-native rules use 'idl' as an extension exclude idl files. 1371 # If any non-native rules exist for extensions normally handled by MSVS, such
1372 # as .idl or .asm, then exclude files with those extensions.
1369 # Gather a list here to use later. 1373 # Gather a list here to use later.
1370 using_idl = False 1374 excluded_files = []
1371 for rule in spec.get('rules', []): 1375 for extension in ['idl', 'asm']:
1372 if rule['extension'] == 'idl' and int(rule.get('msvs_external_rule', 0)): 1376 using_custom_rule = False
1373 using_idl = True 1377 for rule in spec.get('rules', []):
1374 break 1378 if (rule['extension'] == extension and
1375 if using_idl: 1379 int(rule.get('msvs_external_rule', 0))):
1376 excluded_idl = [i for i in sources if i.endswith('.idl')] 1380 using_custom_rule = True
1377 else: 1381 break
1378 excluded_idl = [] 1382 if using_custom_rule:
1379 return excluded_idl 1383 excluded_files.extend([i for i in sources if i.endswith('.' + extension)])
1384 return excluded_files
1380 1385
1381 1386
1382 def _GetPrecompileRelatedFiles(spec): 1387 def _GetPrecompileRelatedFiles(spec):
1383 # Gather a list of precompiled header related sources. 1388 # Gather a list of precompiled header related sources.
1384 precompiled_related = [] 1389 precompiled_related = []
1385 for _, config in spec['configurations'].iteritems(): 1390 for _, config in spec['configurations'].iteritems():
1386 for k in precomp_keys: 1391 for k in precomp_keys:
1387 f = config.get(k) 1392 f = config.get(k)
1388 if f: 1393 if f:
1389 precompiled_related.append(_FixPath(f)) 1394 precompiled_related.append(_FixPath(f))
1390 return precompiled_related 1395 return precompiled_related
1391 1396
1392 1397
1393 def _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources, excluded_idl, 1398 def _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources,
1394 list_excluded): 1399 excluded_custom_files, list_excluded):
1395 exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl) 1400 exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources,
1401 excluded_custom_files)
1396 for file_name, excluded_configs in exclusions.iteritems(): 1402 for file_name, excluded_configs in exclusions.iteritems():
1397 if (not list_excluded and 1403 if (not list_excluded and
1398 len(excluded_configs) == len(spec['configurations'])): 1404 len(excluded_configs) == len(spec['configurations'])):
1399 # If we're not listing excluded files, then they won't appear in the 1405 # If we're not listing excluded files, then they won't appear in the
1400 # project, so don't try to configure them to be excluded. 1406 # project, so don't try to configure them to be excluded.
1401 pass 1407 pass
1402 else: 1408 else:
1403 for config_name, config in excluded_configs: 1409 for config_name, config in excluded_configs:
1404 p.AddFileConfig(file_name, _ConfigFullName(config_name, config), 1410 p.AddFileConfig(file_name, _ConfigFullName(config_name, config),
1405 {'ExcludedFromBuild': 'true'}) 1411 {'ExcludedFromBuild': 'true'})
1406 1412
1407 1413
1408 def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl): 1414 def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_custom_files):
1409 exclusions = {} 1415 exclusions = {}
1410 # Exclude excluded sources from being built. 1416 # Exclude excluded sources from being built.
1411 for f in excluded_sources: 1417 for f in excluded_sources:
1412 excluded_configs = [] 1418 excluded_configs = []
1413 for config_name, config in spec['configurations'].iteritems(): 1419 for config_name, config in spec['configurations'].iteritems():
1414 precomped = [_FixPath(config.get(i, '')) for i in precomp_keys] 1420 precomped = [_FixPath(config.get(i, '')) for i in precomp_keys]
1415 # Don't do this for ones that are precompiled header related. 1421 # Don't do this for ones that are precompiled header related.
1416 if f not in precomped: 1422 if f not in precomped:
1417 excluded_configs.append((config_name, config)) 1423 excluded_configs.append((config_name, config))
1418 exclusions[f] = excluded_configs 1424 exclusions[f] = excluded_configs
1419 # If any non-native rules use 'idl' as an extension exclude idl files. 1425 # If any non-native rules use 'idl' as an extension exclude idl files.
1420 # Exclude them now. 1426 # Exclude them now.
1421 for f in excluded_idl: 1427 for f in excluded_custom_files:
1422 excluded_configs = [] 1428 excluded_configs = []
1423 for config_name, config in spec['configurations'].iteritems(): 1429 for config_name, config in spec['configurations'].iteritems():
1424 excluded_configs.append((config_name, config)) 1430 excluded_configs.append((config_name, config))
1425 exclusions[f] = excluded_configs 1431 exclusions[f] = excluded_configs
1426 return exclusions 1432 return exclusions
1427 1433
1428 1434
1429 def _AddToolFilesToMSVS(p, spec): 1435 def _AddToolFilesToMSVS(p, spec):
1430 # Add in tool files (rules). 1436 # Add in tool files (rules).
1431 tool_files = set() 1437 tool_files = set()
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after
1964 element = 'ClCompile' 1970 element = 'ClCompile'
1965 elif ext in ['.h', '.hxx']: 1971 elif ext in ['.h', '.hxx']:
1966 group = 'include' 1972 group = 'include'
1967 element = 'ClInclude' 1973 element = 'ClInclude'
1968 elif ext == '.rc': 1974 elif ext == '.rc':
1969 group = 'resource' 1975 group = 'resource'
1970 element = 'ResourceCompile' 1976 element = 'ResourceCompile'
1971 elif ext == '.idl': 1977 elif ext == '.idl':
1972 group = 'midl' 1978 group = 'midl'
1973 element = 'Midl' 1979 element = 'Midl'
1980 elif ext == '.asm':
1981 group = 'masm'
1982 element = 'MASM'
1974 else: 1983 else:
1975 group = 'none' 1984 group = 'none'
1976 element = 'None' 1985 element = 'None'
1977 return (group, element) 1986 return (group, element)
1978 1987
1979 1988
1980 def _GenerateRulesForMSBuild(output_dir, options, spec, 1989 def _GenerateRulesForMSBuild(output_dir, options, spec,
1981 sources, excluded_sources, 1990 sources, excluded_sources,
1982 props_files_of_rules, targets_files_of_rules, 1991 props_files_of_rules, targets_files_of_rules,
1983 actions_to_add, extension_to_rule_name): 1992 actions_to_add, extension_to_rule_name):
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after
2771 2780
2772 def _FinalizeMSBuildSettings(spec, configuration): 2781 def _FinalizeMSBuildSettings(spec, configuration):
2773 if 'msbuild_settings' in configuration: 2782 if 'msbuild_settings' in configuration:
2774 converted = False 2783 converted = False
2775 msbuild_settings = configuration['msbuild_settings'] 2784 msbuild_settings = configuration['msbuild_settings']
2776 MSVSSettings.ValidateMSBuildSettings(msbuild_settings) 2785 MSVSSettings.ValidateMSBuildSettings(msbuild_settings)
2777 else: 2786 else:
2778 converted = True 2787 converted = True
2779 msvs_settings = configuration.get('msvs_settings', {}) 2788 msvs_settings = configuration.get('msvs_settings', {})
2780 msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(msvs_settings) 2789 msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(msvs_settings)
2781 include_dirs, resource_include_dirs = _GetIncludeDirs(configuration) 2790 include_dirs, resource_include_dirs, masm_include_dirs = \
2791 _GetIncludeDirs(configuration)
2782 libraries = _GetLibraries(spec) 2792 libraries = _GetLibraries(spec)
2783 out_file, _, msbuild_tool = _GetOutputFilePathAndTool(spec, msbuild=True) 2793 out_file, _, msbuild_tool = _GetOutputFilePathAndTool(spec, msbuild=True)
2784 defines = _GetDefines(configuration) 2794 defines = _GetDefines(configuration)
2785 if converted: 2795 if converted:
2786 # Visual Studio 2010 has TR1 2796 # Visual Studio 2010 has TR1
2787 defines = [d for d in defines if d != '_HAS_TR1=0'] 2797 defines = [d for d in defines if d != '_HAS_TR1=0']
2788 # Warn of ignored settings 2798 # Warn of ignored settings
2789 ignored_settings = ['msvs_prebuild', 'msvs_postbuild', 'msvs_tool_files'] 2799 ignored_settings = ['msvs_prebuild', 'msvs_postbuild', 'msvs_tool_files']
2790 for ignored_setting in ignored_settings: 2800 for ignored_setting in ignored_settings:
2791 value = configuration.get(ignored_setting) 2801 value = configuration.get(ignored_setting)
(...skipping 10 matching lines...) Expand all
2802 precompiled_header = configuration.get('msvs_precompiled_header') 2812 precompiled_header = configuration.get('msvs_precompiled_header')
2803 2813
2804 # Add the information to the appropriate tool 2814 # Add the information to the appropriate tool
2805 # TODO(jeanluc) We could optimize and generate these settings only if 2815 # TODO(jeanluc) We could optimize and generate these settings only if
2806 # the corresponding files are found, e.g. don't generate ResourceCompile 2816 # the corresponding files are found, e.g. don't generate ResourceCompile
2807 # if you don't have any resources. 2817 # if you don't have any resources.
2808 _ToolAppend(msbuild_settings, 'ClCompile', 2818 _ToolAppend(msbuild_settings, 'ClCompile',
2809 'AdditionalIncludeDirectories', include_dirs) 2819 'AdditionalIncludeDirectories', include_dirs)
2810 _ToolAppend(msbuild_settings, 'ResourceCompile', 2820 _ToolAppend(msbuild_settings, 'ResourceCompile',
2811 'AdditionalIncludeDirectories', resource_include_dirs) 2821 'AdditionalIncludeDirectories', resource_include_dirs)
2822 _ToolAppend(msbuild_settings, 'MASM',
2823 'AdditionalIncludeDirectories', masm_include_dirs)
2812 # Add in libraries. 2824 # Add in libraries.
2813 _ToolAppend(msbuild_settings, 'Link', 'AdditionalDependencies', libraries) 2825 _ToolAppend(msbuild_settings, 'Link', 'AdditionalDependencies', libraries)
2814 if out_file: 2826 if out_file:
2815 _ToolAppend(msbuild_settings, msbuild_tool, 'OutputFile', out_file, 2827 _ToolAppend(msbuild_settings, msbuild_tool, 'OutputFile', out_file,
2816 only_if_unset=True) 2828 only_if_unset=True)
2817 # Add defines. 2829 # Add defines.
2818 _ToolAppend(msbuild_settings, 'ClCompile', 2830 _ToolAppend(msbuild_settings, 'ClCompile',
2819 'PreprocessorDefinitions', defines) 2831 'PreprocessorDefinitions', defines)
2820 _ToolAppend(msbuild_settings, 'ResourceCompile', 2832 _ToolAppend(msbuild_settings, 'ResourceCompile',
2821 'PreprocessorDefinitions', defines) 2833 'PreprocessorDefinitions', defines)
2834 _ToolAppend(msbuild_settings, 'MASM',
2835 'PreprocessorDefinitions', defines)
2822 # Add disabled warnings. 2836 # Add disabled warnings.
2823 _ToolAppend(msbuild_settings, 'ClCompile', 2837 _ToolAppend(msbuild_settings, 'ClCompile',
2824 'DisableSpecificWarnings', disabled_warnings) 2838 'DisableSpecificWarnings', disabled_warnings)
2825 # Turn on precompiled headers if appropriate. 2839 # Turn on precompiled headers if appropriate.
2826 if precompiled_header: 2840 if precompiled_header:
2827 precompiled_header = os.path.split(precompiled_header)[1] 2841 precompiled_header = os.path.split(precompiled_header)[1]
2828 _ToolAppend(msbuild_settings, 'ClCompile', 'PrecompiledHeader', 'Use') 2842 _ToolAppend(msbuild_settings, 'ClCompile', 'PrecompiledHeader', 'Use')
2829 _ToolAppend(msbuild_settings, 'ClCompile', 2843 _ToolAppend(msbuild_settings, 'ClCompile',
2830 'PrecompiledHeaderFile', precompiled_header) 2844 'PrecompiledHeaderFile', precompiled_header)
2831 _ToolAppend(msbuild_settings, 'ClCompile', 2845 _ToolAppend(msbuild_settings, 'ClCompile',
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2889 else: 2903 else:
2890 if '$' not in source: 2904 if '$' not in source:
2891 full_path = os.path.join(root_dir, source) 2905 full_path = os.path.join(root_dir, source)
2892 if not os.path.exists(full_path): 2906 if not os.path.exists(full_path):
2893 missing_sources.append(full_path) 2907 missing_sources.append(full_path)
2894 return missing_sources 2908 return missing_sources
2895 2909
2896 2910
2897 def _GetMSBuildSources(spec, sources, exclusions, extension_to_rule_name, 2911 def _GetMSBuildSources(spec, sources, exclusions, extension_to_rule_name,
2898 actions_spec, sources_handled_by_action, list_excluded): 2912 actions_spec, sources_handled_by_action, list_excluded):
2899 groups = ['none', 'midl', 'include', 'compile', 'resource', 'rule'] 2913 groups = ['none', 'midl', 'masm', 'include', 'compile', 'resource', 'rule']
2900 grouped_sources = {} 2914 grouped_sources = {}
2901 for g in groups: 2915 for g in groups:
2902 grouped_sources[g] = [] 2916 grouped_sources[g] = []
2903 2917
2904 _AddSources2(spec, sources, exclusions, grouped_sources, 2918 _AddSources2(spec, sources, exclusions, grouped_sources,
2905 extension_to_rule_name, sources_handled_by_action, list_excluded) 2919 extension_to_rule_name, sources_handled_by_action, list_excluded)
2906 sources = [] 2920 sources = []
2907 for g in groups: 2921 for g in groups:
2908 if grouped_sources[g]: 2922 if grouped_sources[g]:
2909 sources.append(['ItemGroup'] + grouped_sources[g]) 2923 sources.append(['ItemGroup'] + grouped_sources[g])
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
3007 # Add rules. 3021 # Add rules.
3008 actions_to_add = {} 3022 actions_to_add = {}
3009 props_files_of_rules = set() 3023 props_files_of_rules = set()
3010 targets_files_of_rules = set() 3024 targets_files_of_rules = set()
3011 extension_to_rule_name = {} 3025 extension_to_rule_name = {}
3012 list_excluded = generator_flags.get('msvs_list_excluded_files', True) 3026 list_excluded = generator_flags.get('msvs_list_excluded_files', True)
3013 _GenerateRulesForMSBuild(project_dir, options, spec, 3027 _GenerateRulesForMSBuild(project_dir, options, spec,
3014 sources, excluded_sources, 3028 sources, excluded_sources,
3015 props_files_of_rules, targets_files_of_rules, 3029 props_files_of_rules, targets_files_of_rules,
3016 actions_to_add, extension_to_rule_name) 3030 actions_to_add, extension_to_rule_name)
3017 sources, excluded_sources, excluded_idl = ( 3031 sources, excluded_sources, excluded_custom_files = (
3018 _AdjustSourcesAndConvertToFilterHierarchy(spec, options, 3032 _AdjustSourcesAndConvertToFilterHierarchy(spec, options,
3019 project_dir, sources, 3033 project_dir, sources,
3020 excluded_sources, 3034 excluded_sources,
3021 list_excluded)) 3035 list_excluded))
3022 _AddActions(actions_to_add, spec, project.build_file) 3036 _AddActions(actions_to_add, spec, project.build_file)
3023 _AddCopies(actions_to_add, spec) 3037 _AddCopies(actions_to_add, spec)
3024 3038
3025 # NOTE: this stanza must appear after all actions have been decided. 3039 # NOTE: this stanza must appear after all actions have been decided.
3026 # Don't excluded sources with actions attached, or they won't run. 3040 # Don't excluded sources with actions attached, or they won't run.
3027 excluded_sources = _FilterActionsFromExcluded( 3041 excluded_sources = _FilterActionsFromExcluded(
3028 excluded_sources, actions_to_add) 3042 excluded_sources, actions_to_add)
3029 3043
3030 exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl) 3044 exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources,
3045 excluded_custom_files)
3031 actions_spec, sources_handled_by_action = _GenerateActionsForMSBuild( 3046 actions_spec, sources_handled_by_action = _GenerateActionsForMSBuild(
3032 spec, actions_to_add) 3047 spec, actions_to_add)
3033 3048
3034 _GenerateMSBuildFiltersFile(project.path + '.filters', sources, 3049 _GenerateMSBuildFiltersFile(project.path + '.filters', sources,
3035 extension_to_rule_name) 3050 extension_to_rule_name)
3036 missing_sources = _VerifySourcesExist(sources, project_dir) 3051 missing_sources = _VerifySourcesExist(sources, project_dir)
3037 3052
3038 for configuration in configurations.itervalues(): 3053 for configuration in configurations.itervalues():
3039 _FinalizeMSBuildSettings(spec, configuration) 3054 _FinalizeMSBuildSettings(spec, configuration)
3040 3055
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
3079 3094
3080 easy_xml.WriteXmlIfChanged(content, project.path, pretty=True, win32=True) 3095 easy_xml.WriteXmlIfChanged(content, project.path, pretty=True, win32=True)
3081 3096
3082 return missing_sources 3097 return missing_sources
3083 3098
3084 3099
3085 def _GetMSBuildExtensions(props_files_of_rules): 3100 def _GetMSBuildExtensions(props_files_of_rules):
3086 extensions = ['ImportGroup', {'Label': 'ExtensionSettings'}] 3101 extensions = ['ImportGroup', {'Label': 'ExtensionSettings'}]
3087 for props_file in props_files_of_rules: 3102 for props_file in props_files_of_rules:
3088 extensions.append(['Import', {'Project': props_file}]) 3103 extensions.append(['Import', {'Project': props_file}])
3104 extensions.append(
3105 ['Import', {'Project':
3106 r'$(VCTargetsPath)\BuildCustomizations\masm.props'}])
3089 return [extensions] 3107 return [extensions]
3090 3108
3091 3109
3092 def _GetMSBuildExtensionTargets(targets_files_of_rules): 3110 def _GetMSBuildExtensionTargets(targets_files_of_rules):
3093 targets_node = ['ImportGroup', {'Label': 'ExtensionTargets'}] 3111 targets_node = ['ImportGroup', {'Label': 'ExtensionTargets'}]
3094 for targets_file in sorted(targets_files_of_rules): 3112 for targets_file in sorted(targets_files_of_rules):
3095 targets_node.append(['Import', {'Project': targets_file}]) 3113 targets_node.append(['Import', {'Project': targets_file}])
3114 targets_node.append(
3115 ['Import', {'Project':
3116 r'$(VCTargetsPath)\BuildCustomizations\masm.targets'}])
3096 return [targets_node] 3117 return [targets_node]
3097 3118
3098 3119
3099 def _GenerateActionsForMSBuild(spec, actions_to_add): 3120 def _GenerateActionsForMSBuild(spec, actions_to_add):
3100 """Add actions accumulated into an actions_to_add, merging as needed. 3121 """Add actions accumulated into an actions_to_add, merging as needed.
3101 3122
3102 Arguments: 3123 Arguments:
3103 spec: the target project dict 3124 spec: the target project dict
3104 actions_to_add: dictionary keyed on input name, which maps to a list of 3125 actions_to_add: dictionary keyed on input name, which maps to a list of
3105 dicts describing the actions attached to that input file. 3126 dicts describing the actions attached to that input file.
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
3160 action_spec.extend( 3181 action_spec.extend(
3161 # TODO(jeanluc) 'Document' for all or just if as_sources? 3182 # TODO(jeanluc) 'Document' for all or just if as_sources?
3162 [['FileType', 'Document'], 3183 [['FileType', 'Document'],
3163 ['Command', command], 3184 ['Command', command],
3164 ['Message', description], 3185 ['Message', description],
3165 ['Outputs', outputs] 3186 ['Outputs', outputs]
3166 ]) 3187 ])
3167 if additional_inputs: 3188 if additional_inputs:
3168 action_spec.append(['AdditionalInputs', additional_inputs]) 3189 action_spec.append(['AdditionalInputs', additional_inputs])
3169 actions_spec.append(action_spec) 3190 actions_spec.append(action_spec)
OLDNEW
« no previous file with comments | « no previous file | pylib/gyp/generator/ninja.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698