Skip to content

Commit 6375647

Browse files
committed
driver: add swift-frontend options to select the tool to run
Tool selection is primarily done by checking the executable (= symlink) name. But sometimes (e.g. if the tool symlink is not there) it's useful to have an option for selecting the tool. The selection option (e.g. -sil-opt) must be the first argument of swift-frontend.
1 parent caeab58 commit 6375647

File tree

8 files changed

+60
-1
lines changed

8 files changed

+60
-1
lines changed

lib/DriverTool/driver.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,15 @@ static bool appendSwiftDriverName(SmallString<256> &buffer) {
208208
return false;
209209
}
210210

211+
static llvm::SmallVector<const char *, 32> eraseFirstArg(ArrayRef<const char *> argv){
212+
llvm::SmallVector<const char *, 32> newArgv;
213+
newArgv.push_back(argv[0]);
214+
for (const char *arg : argv.slice(2)) {
215+
newArgv.push_back(arg);
216+
}
217+
return newArgv;
218+
}
219+
211220
static int run_driver(StringRef ExecName,
212221
ArrayRef<const char *> argv,
213222
const ArrayRef<const char *> originalArgv) {
@@ -232,6 +241,34 @@ static int run_driver(StringRef ExecName,
232241
argv.data()+argv.size()),
233242
argv[0], (void *)(intptr_t)getExecutablePath);
234243
}
244+
if (FirstArg == "-sil-opt") {
245+
return sil_opt_main(eraseFirstArg(argv),
246+
(void *)(intptr_t)getExecutablePath);
247+
}
248+
if (FirstArg == "-sil-func-extractor") {
249+
return sil_func_extractor_main(eraseFirstArg(argv),
250+
(void *)(intptr_t)getExecutablePath);
251+
}
252+
if (FirstArg == "-sil-nm") {
253+
return sil_nm_main(eraseFirstArg(argv),
254+
(void *)(intptr_t)getExecutablePath);
255+
}
256+
if (FirstArg == "-sil-llvm-gen") {
257+
return sil_llvm_gen_main(eraseFirstArg(argv),
258+
(void *)(intptr_t)getExecutablePath);
259+
}
260+
if (FirstArg == "-sil-passpipeline-dumper") {
261+
return sil_passpipeline_dumper_main(eraseFirstArg(argv),
262+
(void *)(intptr_t)getExecutablePath);
263+
}
264+
if (FirstArg == "-swift-dependency-tool") {
265+
return swift_dependency_tool_main(eraseFirstArg(argv),
266+
(void *)(intptr_t)getExecutablePath);
267+
}
268+
if (FirstArg == "-swift-llvm-opt") {
269+
return swift_llvm_opt_main(eraseFirstArg(argv),
270+
(void *)(intptr_t)getExecutablePath);
271+
}
235272

236273
// Run the integrated Swift frontend when called as "swift-frontend" but
237274
// without a leading "-frontend".

test/Driver/Dependencies/bindings-build-record.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
// RUN: cp -r %S/Inputs/bindings-build-record/* %t
77
// RUN: %swift-dependency-tool --from-yaml --input-filename=%t/main.swiftdeps.yaml --output-filename=%t/main.swiftdeps
88
// RUN: %swift-dependency-tool --from-yaml --input-filename=%t/other.swiftdeps.yaml --output-filename=%t/other.swiftdeps
9-
// RUN: %swift-dependency-tool --from-yaml --input-filename=%t/yet-another.swiftdeps.yaml --output-filename=%t/yet-another.swiftdeps
9+
10+
// Use this testfile to check if the `swift-frontend -swift-dependency-tool` option works.
11+
// RUN: %swift_frontend_plain -swift-dependency-tool --from-yaml --input-filename=%t/yet-another.swiftdeps.yaml --output-filename=%t/yet-another.swiftdeps
12+
1013
// RUN: %{python} %S/Inputs/touch.py 443865900 %t/*
1114

1215
// RUN: cd %t && %swiftc_driver -driver-print-bindings ./main.swift ./other.swift ./yet-another.swift -incremental -driver-show-incremental -output-file-map %t/output.json 2>&1 |%FileCheck %s -check-prefix=MUST-EXEC

test/LLVMPasses/basic.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
; RUN: %swift-llvm-opt -swift-llvm-arc-optimize %s | %FileCheck %s
22

3+
; Use this testfile to check if the `swift-frontend -swift-dependency-tool` option works.
4+
; RUN: %swift_frontend_plain -swift-llvm-opt -swift-llvm-arc-optimize %s | %FileCheck %s
5+
36
target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
47
target triple = "x86_64-apple-macosx10.9"
58

test/SIL/instruction_iteration.sil

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
// RUN: %target-sil-opt %s -test-instruction-iteration -o %t/out.sil | %FileCheck --check-prefix=LOG %s
33
// RUN: %FileCheck %s < %t/out.sil
44

5+
// Use this testfile to check if the `swift-frontend -sil-opt` option works.
6+
// RUN: %swift_frontend_plain -sil-opt %s -test-instruction-iteration -o %t/out.sil | %FileCheck --check-prefix=LOG %s
7+
// RUN: %FileCheck %s < %t/out.sil
8+
59
// REQUIRES: swift_in_compiler
610

711
sil_stage canonical

test/sil-func-extractor/basic.sil

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
// RUN: %empty-directory(%t)
33
// RUN: %target-sil-func-extractor %s -func=use_before_init -emit-sib -o %t/out.sib -module-name main && %target-sil-opt %t/out.sib -module-name main | %FileCheck %s
44

5+
// Use this testfile to check if the `swift-frontend -sil-func-extractr` option works.
6+
// RUN: %swift_frontend_plain -sil-func-extractor %s -func=use_before_init | %FileCheck %s
7+
58
import Builtin
69
import Swift
710

test/sil-llvm-gen/alloc.sil

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as -target arm64-apple-ios7.0 %s -module-name main -o - | %FileCheck %s
66
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as -target x86_64-unknown-linux-gnu %s -module-name main -o - | %FileCheck %s
77

8+
// Use this testfile to check if the `swift-frontend -sil-llvm-gen` option works.
9+
// RUN: %swift_frontend_plain -sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as -target x86_64-apple-macosx10.9 -module-name main %s -o - | %FileCheck %s
10+
811
// REQUIRES: CODEGENERATOR=X86
912
// REQUIRES: CODEGENERATOR=ARM
1013

test/sil-nm/basic.sil

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
// RUN: %target-sil-nm -module-name main %t/out.sib | %FileCheck %s
66
// RUN: %target-sil-nm -module-name main -demangle %t/out.sib | %FileCheck -check-prefix=DEMANGLE %s
77

8+
// Use this testfile to check if the `swift-frontend -sil-nm` option works.
9+
// RUN: %swift_frontend_plain -sil-nm %s | %FileCheck -check-prefix=SIL-NM -check-prefix=CHECK %s
10+
811
import Builtin
912

1013
public class C {

test/sil-passpipeline-dump/basic.test-sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
// RUN: %sil-passpipeline-dumper -Onone | %FileCheck %s
22

3+
// Use this testfile to check if the `swift-frontend -sil-passpipeline-dumper` option works.
4+
// RUN: %swift_frontend_plain -sil-passpipeline-dumper -Onone | %FileCheck %s
5+
36
// REQUIRES: swift_in_compiler
47

58
// CHECK: ---

0 commit comments

Comments
 (0)