Skip to content

Commit 06c10cd

Browse files
jkunkeejoaocgreis
authored andcommitted
build,win: teach GYP MSVS generator about MARMASM
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. PR-URL: #26020 Refs: #25998 Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: João Reis <[email protected]> Reviewed-By: Refael Ackermann <[email protected]>
1 parent ee7daf7 commit 06c10cd

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

tools/gyp/pylib/gyp/MSVSSettings.py

+2
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

+23-8
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)