Skip to content

Commit 94aba39

Browse files
committed
build, win: teach GYP MSVS generator about MARMASM Items
The toolchain for ARM64 Windows includes support for assembly code, but with a very different syntax from MASM and NASM. This change teaches GYP how to emit the right XML tags in VCXPROJ files to support compiling assembly files with the new tool.
1 parent 91e1a04 commit 94aba39

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

tools/gyp/pylib/gyp/MSVSSettings.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,7 @@ def _ValidateSettings(validators, settings, stderr):
539539
_lib = _Tool('VCLibrarianTool', 'Lib')
540540
_manifest = _Tool('VCManifestTool', 'Manifest')
541541
_masm = _Tool('MASM', 'MASM')
542+
_armasm = _Tool('ARMASM', 'ARMASM')
542543

543544

544545
_AddTool(_compile)
@@ -548,6 +549,7 @@ def _ValidateSettings(validators, settings, stderr):
548549
_AddTool(_lib)
549550
_AddTool(_manifest)
550551
_AddTool(_masm)
552+
_AddTool(_armasm)
551553
# Add sections only found in the MSBuild settings.
552554
_msbuild_validators[''] = {}
553555
_msbuild_validators['ProjectReference'] = {}

tools/gyp/pylib/gyp/generator/msvs.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2076,7 +2076,8 @@ def GenerateOutput(target_list, target_dicts, data, params):
20762076

20772077

20782078
def _GenerateMSBuildFiltersFile(filters_path, source_files,
2079-
rule_dependencies, extension_to_rule_name):
2079+
rule_dependencies, extension_to_rule_name,
2080+
platforms):
20802081
"""Generate the filters file.
20812082
20822083
This file is used by Visual Studio to organize the presentation of source
@@ -2090,7 +2091,8 @@ def _GenerateMSBuildFiltersFile(filters_path, source_files,
20902091
filter_group = []
20912092
source_group = []
20922093
_AppendFiltersForMSBuild('', source_files, rule_dependencies,
2093-
extension_to_rule_name, filter_group, source_group)
2094+
extension_to_rule_name, platforms,
2095+
filter_group, source_group)
20942096
if filter_group:
20952097
content = ['Project',
20962098
{'ToolsVersion': '4.0',
@@ -2106,7 +2108,7 @@ def _GenerateMSBuildFiltersFile(filters_path, source_files,
21062108

21072109

21082110
def _AppendFiltersForMSBuild(parent_filter_name, sources, rule_dependencies,
2109-
extension_to_rule_name,
2111+
extension_to_rule_name, platforms,
21102112
filter_group, source_group):
21112113
"""Creates the list of filters and sources to be added in the filter file.
21122114
@@ -2132,11 +2134,12 @@ def _AppendFiltersForMSBuild(parent_filter_name, sources, rule_dependencies,
21322134
# Recurse and add its dependents.
21332135
_AppendFiltersForMSBuild(filter_name, source.contents,
21342136
rule_dependencies, extension_to_rule_name,
2135-
filter_group, source_group)
2137+
platforms, filter_group, source_group)
21362138
else:
21372139
# It's a source. Create a source entry.
21382140
_, element = _MapFileToMsBuildSourceType(source, rule_dependencies,
2139-
extension_to_rule_name)
2141+
extension_to_rule_name,
2142+
platforms)
21402143
source_entry = [element, {'Include': source}]
21412144
# Specify the filter it is part of, if any.
21422145
if parent_filter_name:
@@ -2145,7 +2148,7 @@ def _AppendFiltersForMSBuild(parent_filter_name, sources, rule_dependencies,
21452148

21462149

21472150
def _MapFileToMsBuildSourceType(source, rule_dependencies,
2148-
extension_to_rule_name):
2151+
extension_to_rule_name, platforms):
21492152
"""Returns the group and element type of the source file.
21502153
21512154
Arguments:
@@ -2172,6 +2175,9 @@ def _MapFileToMsBuildSourceType(source, rule_dependencies,
21722175
elif ext in ['.s', '.asm']:
21732176
group = 'masm'
21742177
element = 'MASM'
2178+
for platform in platforms:
2179+
if platform.lower() in ['arm', 'arm64']:
2180+
element = 'MARMASM'
21752181
elif ext == '.idl':
21762182
group = 'midl'
21772183
element = 'Midl'
@@ -3275,7 +3281,8 @@ def _AddSources2(spec, sources, exclusions, grouped_sources,
32753281
detail.append(['ForcedIncludeFiles', ''])
32763282

32773283
group, element = _MapFileToMsBuildSourceType(source, rule_dependencies,
3278-
extension_to_rule_name)
3284+
extension_to_rule_name,
3285+
_GetUniquePlatforms(spec))
32793286
grouped_sources[group].append([element, {'Include': source}] + detail)
32803287

32813288

@@ -3358,7 +3365,7 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
33583365

33593366
_GenerateMSBuildFiltersFile(project.path + '.filters', sources,
33603367
rule_dependencies,
3361-
extension_to_rule_name)
3368+
extension_to_rule_name, _GetUniquePlatforms(spec))
33623369
missing_sources = _VerifySourcesExist(sources, project_dir)
33633370

33643371
for configuration in configurations.itervalues():
@@ -3378,6 +3385,12 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
33783385
import_masm_targets_section = [
33793386
['Import',
33803387
{'Project': r'$(VCTargetsPath)\BuildCustomizations\masm.targets'}]]
3388+
import_marmasm_props_section = [
3389+
['Import',
3390+
{'Project': r'$(VCTargetsPath)\BuildCustomizations\marmasm.props'}]]
3391+
import_marmasm_targets_section = [
3392+
['Import',
3393+
{'Project': r'$(VCTargetsPath)\BuildCustomizations\marmasm.targets'}]]
33813394
macro_section = [['PropertyGroup', {'Label': 'UserMacros'}]]
33823395

33833396
content = [
@@ -3398,6 +3411,7 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
33983411
content += _GetMSBuildLocalProperties(project.msbuild_toolset)
33993412
content += import_cpp_props_section
34003413
content += import_masm_props_section
3414+
content += import_marmasm_props_section
34013415
content += _GetMSBuildExtensions(props_files_of_rules)
34023416
content += _GetMSBuildPropertySheets(configurations)
34033417
content += macro_section
@@ -3410,6 +3424,7 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
34103424
content += _GetMSBuildProjectReferences(project)
34113425
content += import_cpp_targets_section
34123426
content += import_masm_targets_section
3427+
content += import_marmasm_targets_section
34133428
content += _GetMSBuildExtensionTargets(targets_files_of_rules)
34143429

34153430
if spec.get('msvs_external_builder'):

0 commit comments

Comments
 (0)