Skip to content

Commit ba597a0

Browse files
Refactoring validate Deployment targets to darwing toolchain validation
1 parent a7464e9 commit ba597a0

File tree

2 files changed

+50
-52
lines changed

2 files changed

+50
-52
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: 14 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -119,56 +119,6 @@ ArrayRef<const char *> Driver::getArgsWithoutProgramNameAndDriverMode(
119119
return Args;
120120
}
121121

122-
static void validateBridgingHeaderArgs(DiagnosticEngine &diags,
123-
const ArgList &args) {
124-
if (!args.hasArgNoClaim(options::OPT_import_objc_header))
125-
return;
126-
127-
if (args.hasArgNoClaim(options::OPT_import_underlying_module))
128-
diags.diagnose({}, diag::error_framework_bridging_header);
129-
130-
if (args.hasArgNoClaim(options::OPT_emit_module_interface,
131-
options::OPT_emit_module_interface_path)) {
132-
diags.diagnose({}, diag::error_bridging_header_module_interface);
133-
}
134-
}
135-
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-
172122
static void validateWarningControlArgs(DiagnosticEngine &diags,
173123
const ArgList &args) {
174124
if (args.hasArg(options::OPT_suppress_warnings) &&
@@ -258,10 +208,23 @@ static void validateAutolinkingArgs(DiagnosticEngine &diags,
258208
forceLoadArg->getSpelling(), incrementalArg->getSpelling());
259209
}
260210

211+
static void validateBridgingHeaderArgs(DiagnosticEngine &diags,
212+
const ArgList &args) {
213+
if (!args.hasArgNoClaim(options::OPT_import_objc_header))
214+
return;
215+
216+
if (args.hasArgNoClaim(options::OPT_import_underlying_module))
217+
diags.diagnose({}, diag::error_framework_bridging_header);
218+
219+
if (args.hasArgNoClaim(options::OPT_emit_module_interface,
220+
options::OPT_emit_module_interface_path)) {
221+
diags.diagnose({}, diag::error_bridging_header_module_interface);
222+
}
223+
}
224+
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)