Skip to content

Commit 0ca9747

Browse files
authored
Merge pull request swiftlang#26206 from LucianoPAlmeida/qol-driver-toolchain-validate-args
[Qol] Driver toolchain validate args
2 parents 51fbf0c + 874f53d commit 0ca9747

File tree

2 files changed

+36
-38
lines changed

2 files changed

+36
-38
lines changed

lib/Driver/DarwinToolChains.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,9 +585,45 @@ bool toolchains::Darwin::shouldStoreInvocationInDebugInfo() const {
585585
return false;
586586
}
587587

588+
static void validateDeploymentTarget(const toolchains::Darwin &TC,
589+
DiagnosticEngine &diags,
590+
const llvm::opt::ArgList &args) {
591+
// Check minimum supported OS versions.
592+
auto triple = TC.getTriple();
593+
if (triple.isMacOSX()) {
594+
if (triple.isMacOSXVersionLT(10, 9))
595+
diags.diagnose(SourceLoc(), diag::error_os_minimum_deployment,
596+
"OS X 10.9");
597+
} else if (triple.isiOS()) {
598+
if (triple.isTvOS()) {
599+
if (triple.isOSVersionLT(9, 0)) {
600+
diags.diagnose(SourceLoc(), diag::error_os_minimum_deployment,
601+
"tvOS 9.0");
602+
return;
603+
}
604+
}
605+
if (triple.isOSVersionLT(7))
606+
diags.diagnose(SourceLoc(), diag::error_os_minimum_deployment,
607+
"iOS 7");
608+
if (triple.isArch32Bit() && !triple.isOSVersionLT(11)) {
609+
diags.diagnose(SourceLoc(), diag::error_ios_maximum_deployment_32,
610+
triple.getOSMajorVersion());
611+
}
612+
} else if (triple.isWatchOS()) {
613+
if (triple.isOSVersionLT(2, 0)) {
614+
diags.diagnose(SourceLoc(), diag::error_os_minimum_deployment,
615+
"watchOS 2.0");
616+
return;
617+
}
618+
}
619+
}
620+
588621
void
589622
toolchains::Darwin::validateArguments(DiagnosticEngine &diags,
590623
const llvm::opt::ArgList &args) const {
624+
// Validating apple platforms deployment targets.
625+
validateDeploymentTarget(*this, diags, args);
626+
591627
// Validating darwin unsupported -static-stdlib argument.
592628
if (args.hasArg(options::OPT_static_stdlib)) {
593629
diags.diagnose(SourceLoc(), diag::error_darwin_static_stdlib_not_supported);

lib/Driver/Driver.cpp

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -133,42 +133,6 @@ static void validateBridgingHeaderArgs(DiagnosticEngine &diags,
133133
}
134134
}
135135

136-
static void validateDeploymentTarget(DiagnosticEngine &diags,
137-
const ArgList &args) {
138-
const Arg *A = args.getLastArg(options::OPT_target);
139-
if (!A)
140-
return;
141-
142-
// Check minimum supported OS versions.
143-
llvm::Triple triple(llvm::Triple::normalize(A->getValue()));
144-
if (triple.isMacOSX()) {
145-
if (triple.isMacOSXVersionLT(10, 9))
146-
diags.diagnose(SourceLoc(), diag::error_os_minimum_deployment,
147-
"OS X 10.9");
148-
} else if (triple.isiOS()) {
149-
if (triple.isTvOS()) {
150-
if (triple.isOSVersionLT(9, 0)) {
151-
diags.diagnose(SourceLoc(), diag::error_os_minimum_deployment,
152-
"tvOS 9.0");
153-
return;
154-
}
155-
}
156-
if (triple.isOSVersionLT(7))
157-
diags.diagnose(SourceLoc(), diag::error_os_minimum_deployment,
158-
"iOS 7");
159-
if (triple.isArch32Bit() && !triple.isOSVersionLT(11)) {
160-
diags.diagnose(SourceLoc(), diag::error_ios_maximum_deployment_32,
161-
triple.getOSMajorVersion());
162-
}
163-
} else if (triple.isWatchOS()) {
164-
if (triple.isOSVersionLT(2, 0)) {
165-
diags.diagnose(SourceLoc(), diag::error_os_minimum_deployment,
166-
"watchOS 2.0");
167-
return;
168-
}
169-
}
170-
}
171-
172136
static void validateWarningControlArgs(DiagnosticEngine &diags,
173137
const ArgList &args) {
174138
if (args.hasArg(options::OPT_suppress_warnings) &&
@@ -261,7 +225,6 @@ static void validateAutolinkingArgs(DiagnosticEngine &diags,
261225
/// Perform miscellaneous early validation of arguments.
262226
static void validateArgs(DiagnosticEngine &diags, const ArgList &args) {
263227
validateBridgingHeaderArgs(diags, args);
264-
validateDeploymentTarget(diags, args);
265228
validateWarningControlArgs(diags, args);
266229
validateProfilingArgs(diags, args);
267230
validateDebugInfoArgs(diags, args);
@@ -820,7 +783,6 @@ Driver::buildCompilation(const ToolChain &TC,
820783
std::unique_ptr<DerivedArgList> TranslatedArgList(
821784
translateInputAndPathArgs(*ArgList, workingDirectory));
822785

823-
// TODO: We should check which validations could be moved to toolchain specific classes.
824786
validateArgs(Diags, *TranslatedArgList);
825787

826788
// Perform toolchain specific args validation.

0 commit comments

Comments
 (0)