Skip to content

Commit

Permalink
Added vs_platform_version for setting a platform SDK that overrides t…
Browse files Browse the repository at this point in the history
…he default
  • Loading branch information
burgerbecky committed May 22, 2023
1 parent 9ff525e commit 7f44380
Show file tree
Hide file tree
Showing 4 changed files with 131 additions and 78 deletions.
22 changes: 17 additions & 5 deletions makeprojects/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,12 @@
from copy import deepcopy
from burger import get_windows_host_type, convert_to_windows_slashes, \
convert_to_linux_slashes, is_string, translate_to_regex_match, \
StringListProperty, BooleanProperty, NoneProperty
StringListProperty, BooleanProperty, NoneProperty, StringProperty

from .enums import FileTypes, ProjectTypes, IDETypes, PlatformTypes, \
platformtype_short_code
from .defaults import settings_from_name, configuration_presets
from .defaults import settings_from_name, configuration_presets, \
project_presets
from .util import validate_enum_type, regex_dict, validate_boolean, \
validate_string

Expand Down Expand Up @@ -617,6 +618,7 @@ class Configuration(Attributes):
- ``vs_props`` See Project.vs_props
- ``vs_targets`` See Project.vs_targets
- ``vs_rules`` See Project.vs_rules
- ``vs_platform_version`` See Project.vs_platform_version
Attributes:
name: Name of the configuration
Expand All @@ -625,6 +627,7 @@ class Configuration(Attributes):
vs_props: Don't allow Visual Studio props files
vs_targets: Don't allow Visual Studio targets files
vs_rules: Don't allow Visual Studio rules files
vs_platform_version: Visual Studio platform SDK version
project: Project this Configuration is attached to.
ide: Get the @ref makeprojects.enums.IDETypes of the parent (Read only)
short_code: Short config string for file name suffix
Expand All @@ -639,6 +642,7 @@ class Configuration(Attributes):
vs_props = NoneProperty("_vs_props")
vs_targets = NoneProperty("_vs_targets")
vs_rules = NoneProperty("_vs_rules")
vs_platform_version = NoneProperty("_vs_platform_version")

def __init__(self, name, platform):
"""
Expand Down Expand Up @@ -807,6 +811,7 @@ class Project(Attributes):
vs_props: List of props files for Visual Studio
vs_targets: List of targets file for Visual Studio
vs_rules: List of rules file for Visual Studio 2005-2008
vs_platform_version: Visual Studio platform SDK version
name: Project name
working_directory: Working directory for the project
solution: No parent solution yet
Expand All @@ -827,6 +832,7 @@ class Project(Attributes):
vs_props = StringListProperty("_vs_props")
vs_targets = StringListProperty("_vs_targets")
vs_rules = StringListProperty("_vs_rules")
vs_platform_version = StringProperty("_vs_platform_version")

def __init__(self, name=None, **kargs):
"""
Expand All @@ -845,6 +851,7 @@ def __init__(self, name=None, **kargs):
self.vs_props = []
self.vs_targets = []
self.vs_rules = []
self.vs_platform_version = None

working_directory = os.getcwd()

Expand Down Expand Up @@ -1014,10 +1021,13 @@ def parse_attributes(self, build_rules_list):
build_rules_list: List to append a valid build_rules file instance.
"""

# Set up the default entries
project_presets(project=self)

for build_rules in build_rules_list:
project_settings = getattr(build_rules, "project_settings", None)
if callable(project_settings):
result = project_settings(project=self)
settings = getattr(build_rules, "project_settings", None)
if callable(settings):
result = settings(project=self)
# Must test for zero, since None is a break.
if result is not None:
break
Expand Down Expand Up @@ -1227,6 +1237,7 @@ class Solution(Attributes):
vs_props: Don't allow Visual Studio props files
vs_targets: Don't allow Visual Studio targets files
vs_rules: Don't allow Visual Studio rules files
vs_platform_version: Visual Studio platform SDK version
perforce: Boolean for using perforce
verbose: Boolean for verbose output
suffix_enable: Boolean for enabling unique suffixes
Expand All @@ -1248,6 +1259,7 @@ class Solution(Attributes):
vs_props = NoneProperty("_vs_props")
vs_targets = NoneProperty("_vs_targets")
vs_rules = NoneProperty("_vs_rules")
vs_platform_version = NoneProperty("_vs_platform_version")
perforce = BooleanProperty("_perforce")
verbose = BooleanProperty("_verbose")
suffix_enable = BooleanProperty("_suffix_enable")
Expand Down
53 changes: 39 additions & 14 deletions makeprojects/defaults.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,21 @@ def settings_from_name(configuration):
setattr(configuration, item[0], item[1])
return configuration

########################################


def project_presets(project):
"""
Set the default settings for a project.
Scan a project for a platform and an ide and set up compiler macros
and other settings that are default for the specific platform.
Args:
project: Project record to update.
"""

return None

########################################

Expand Down Expand Up @@ -177,11 +192,18 @@ def configuration_presets(configuration):
define_list.append("__ORBIS2__")

# Include default libraries
libraries_list.extend(("SceSysmodule_stub_weak", "ScePosix_stub_weak",
"SceVideoOut_stub_weak", "ScePad_stub_weak",
"SceVideodec2_stub_weak", "SceAudiodec_stub_weak",
"SceAudioOut_stub_weak", "SceGnmDriver_stub_weak",
"SceGnm", "SceGnmx", "SceGpuAddress"))
libraries_list.extend((
"SceSysmodule_stub_weak",
"ScePosix_stub_weak",
"SceVideoOut_stub_weak",
"ScePad_stub_weak",
"SceVideodec2_stub_weak",
"SceAudiodec_stub_weak",
"SceAudioOut_stub_weak",
"SceGnmDriver_stub_weak",
"SceGnm",
"SceGnmx",
"SceGpuAddress"))

# Playstation 5 (Not needed)
# if platform is PlatformTypes.ps5:
Expand Down Expand Up @@ -319,7 +341,8 @@ def configuration_presets(configuration):
########################################


def get_project_name(build_rules_list, working_directory, verbose=False, project_name=None):
def get_project_name(build_rules_list, working_directory,
verbose=False, project_name=None):
"""
Determine the project name.
Expand Down Expand Up @@ -384,8 +407,8 @@ def get_project_type(build_rules_list, verbose=False, project_type=None):
if not isinstance(project_type, ProjectTypes):
item = ProjectTypes.lookup(project_type)
if not isinstance(item, ProjectTypes):
print("Project Type \"{}\" is not supported, using \"tool\".".format(
project_type))
print(
"Project Type \"{}\" is not supported, using \"tool\".".format(project_type))
project_type = ProjectTypes.tool
else:
project_type = item
Expand Down Expand Up @@ -430,8 +453,8 @@ def get_platform(build_rules_list, verbose=False, platform=None):
if not isinstance(platform, PlatformTypes):
item = PlatformTypes.lookup(platform)
if not isinstance(item, PlatformTypes):
print("Platform Type \"{}\" is not supported, using a default.".format(
platform))
print(
"Platform Type \"{}\" is not supported, using a default.".format(platform))
platform = PlatformTypes.default()
else:
platform = item
Expand Down Expand Up @@ -471,7 +494,8 @@ def guess_ide(platform):
if platform is PlatformTypes.wiiu:
return IDETypes.vs2013

if platform in (PlatformTypes.ps3, PlatformTypes.vita, PlatformTypes.shield):
if platform in (PlatformTypes.ps3, PlatformTypes.vita,
PlatformTypes.shield):
return IDETypes.vs2015

if platform in (PlatformTypes.xboxone, PlatformTypes.switch):
Expand Down Expand Up @@ -529,8 +553,8 @@ def get_ide(build_rules_list, verbose=False, ide=None, platform=None):
if not isinstance(item, IDETypes):
ide = guess_ide(platform)
if not ide:
print("IDE Type \"{}\" is not supported, using a default.".format(
ide))
print(
"IDE Type \"{}\" is not supported, using a default.".format(ide))
ide = IDETypes.default()
else:
ide = item
Expand Down Expand Up @@ -559,7 +583,8 @@ def default_configuration_list(platform, ide):

# Xbox and Windows support link time code generation
# as a platform
if ide.is_visual_studio() and platform.is_windows() or platform in (PlatformTypes.xbox360,):
if ide.is_visual_studio() and platform.is_windows(
) or platform in (PlatformTypes.xbox360,):
results.append("Release_LTCG")

# Configurations specific to the Xbox 360
Expand Down
3 changes: 3 additions & 0 deletions makeprojects/visual_studio.py
Original file line number Diff line number Diff line change
Expand Up @@ -4782,6 +4782,9 @@ def generate(solution):
# Convert to a text file
project_lines = exporter.generate(ide=solution.ide)

# Handle any post processing
project_lines = solution.post_process(project_lines)

# Save the text
save_text_file_if_newer(
os.path.join(
Expand Down
131 changes: 72 additions & 59 deletions makeprojects/visual_studio_2010.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,54 +127,54 @@ def generate_solution_file(solution_lines, solution):

headers = {
IDETypes.vs2003: (
'Microsoft Visual Studio Solution File, Format Version 8.00',
"Microsoft Visual Studio Solution File, Format Version 8.00",
),
IDETypes.vs2005: (
'',
'Microsoft Visual Studio Solution File, Format Version 9.00',
'# Visual Studio 2005'),
"",
"Microsoft Visual Studio Solution File, Format Version 9.00",
"# Visual Studio 2005"),
IDETypes.vs2008: (
'',
'Microsoft Visual Studio Solution File, Format Version 10.00',
'# Visual Studio 2008'),
"",
"Microsoft Visual Studio Solution File, Format Version 10.00",
"# Visual Studio 2008"),
IDETypes.vs2010: (
'',
'Microsoft Visual Studio Solution File, Format Version 11.00',
'# Visual Studio 2010'),
"",
"Microsoft Visual Studio Solution File, Format Version 11.00",
"# Visual Studio 2010"),
IDETypes.vs2012: (
'',
'Microsoft Visual Studio Solution File, Format Version 12.00',
'# Visual Studio 2012'),
"",
"Microsoft Visual Studio Solution File, Format Version 12.00",
"# Visual Studio 2012"),
IDETypes.vs2013: (
'',
'Microsoft Visual Studio Solution File, Format Version 12.00',
'# Visual Studio 2013',
'VisualStudioVersion = 12.0.31101.0',
'MinimumVisualStudioVersion = 10.0.40219.1'),
"",
"Microsoft Visual Studio Solution File, Format Version 12.00",
"# Visual Studio 2013",
"VisualStudioVersion = 12.0.31101.0",
"MinimumVisualStudioVersion = 10.0.40219.1"),
IDETypes.vs2015: (
'',
'Microsoft Visual Studio Solution File, Format Version 12.00',
'# Visual Studio 14',
'VisualStudioVersion = 14.0.25123.0',
'MinimumVisualStudioVersion = 10.0.40219.1'),
"",
"Microsoft Visual Studio Solution File, Format Version 12.00",
"# Visual Studio 14",
"VisualStudioVersion = 14.0.25123.0",
"MinimumVisualStudioVersion = 10.0.40219.1"),
IDETypes.vs2017: (
'',
'Microsoft Visual Studio Solution File, Format Version 12.00',
'# Visual Studio 15',
'VisualStudioVersion = 15.0.28307.645',
'MinimumVisualStudioVersion = 10.0.40219.1'),
"",
"Microsoft Visual Studio Solution File, Format Version 12.00",
"# Visual Studio 15",
"VisualStudioVersion = 15.0.28307.645",
"MinimumVisualStudioVersion = 10.0.40219.1"),
IDETypes.vs2019: (
'',
'Microsoft Visual Studio Solution File, Format Version 12.00',
'# Visual Studio Version 16',
'VisualStudioVersion = 16.0.28803.452',
'MinimumVisualStudioVersion = 10.0.40219.1'),
"",
"Microsoft Visual Studio Solution File, Format Version 12.00",
"# Visual Studio Version 16",
"VisualStudioVersion = 16.0.28803.452",
"MinimumVisualStudioVersion = 10.0.40219.1"),
IDETypes.vs2022: (
'',
'Microsoft Visual Studio Solution File, Format Version 12.00',
'# Visual Studio Version 17',
'VisualStudioVersion = 17.1.32210.238',
'MinimumVisualStudioVersion = 10.0.40219.1')
"",
"Microsoft Visual Studio Solution File, Format Version 12.00",
"# Visual Studio Version 17",
"VisualStudioVersion = 17.1.32210.238",
"MinimumVisualStudioVersion = 10.0.40219.1")
}

# Insert the header to the output stream
Expand Down Expand Up @@ -693,7 +693,7 @@ def __init__(self, project):

## Parent project
self.project = project
VS2010XML.__init__(self, 'PropertyGroup', {'Label': 'Globals'})
VS2010XML.__init__(self, "PropertyGroup", {"Label": "Globals"})

ide = project.ide

Expand All @@ -706,32 +706,45 @@ def __init__(self, project):
break

self.add_tags((
('ProjectName', project.name),
('ProjectGuid', '{{{}}}'.format(project.vs_uuid))
("ProjectName", project.name),
("ProjectGuid", "{{{}}}".format(project.vs_uuid))
))

if found_android:
self.add_tags((
('Keyword', 'Android'),
('MinimumVisualStudioVersion', '14.0'),
('ApplicationType', 'Android'),
('ApplicationTypeRevision', '3.0')
("Keyword", "Android"),
("MinimumVisualStudioVersion", "14.0"),
("ApplicationType", "Android"),
("ApplicationTypeRevision", "3.0")
))
else:
platform_version = None
if ide >= IDETypes.vs2019:
platform_version = '10.0'
elif ide >= IDETypes.vs2015:

# Special case if using the Xbox ONE toolset
for configuration in project.configuration_list:
if configuration.platform is PlatformTypes.xboxone:
platform_version = '8.1'
break
else:
platform_version = '10.0.18362.0'

self.add_tag("WindowsTargetPlatformVersion", platform_version)
# Was there an override?
platform_version = project.vs_platform_version

# Create a default
if platform_version is None:

# Visual Studio 2019 and higher allows using "Latest"
# SDK
if ide in (IDETypes.vs2019, IDETypes.vs2022):
platform_version = "10.0"

# Visual Studio 2015-2017 require explicit SDK
elif ide in (IDETypes.vs2015, IDETypes.vs2017):

# Special case if using the Xbox ONE toolset
# The Xbox ONE XDK requires 8.1, the GDK does not
for configuration in project.configuration_list:
if configuration.platform is PlatformTypes.xboxone:
platform_version = "8.1"
break
else:
# Set to the latest installed with 2017
platform_version = "10.0.17763.0"

self.add_tag(
"WindowsTargetPlatformVersion",
platform_version)


########################################
Expand Down

0 comments on commit 7f44380

Please sign in to comment.