Skip to content

Commit a76378a

Browse files
committed
[DNM] Test linking against and using 's tooling library
1 parent 586ac09 commit a76378a

File tree

3 files changed

+77
-6
lines changed

3 files changed

+77
-6
lines changed

tools/libSwiftScan/CMakeLists.txt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ add_swift_host_library(libSwiftScan SHARED
1010
SwiftCaching.cpp
1111
HAS_SWIFT_MODULES)
1212

13+
add_library(libSwiftScanDependencies INTERFACE)
14+
target_link_libraries(libSwiftScanDependencies INTERFACE
15+
swiftDependencyScan
16+
swiftDriverTool
17+
swiftStaticMirror
18+
swiftRemoteInspection
19+
swiftCompilerModules)
20+
1321
if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS)
1422
# Workaround for a linker crash related to autolinking: rdar://77839981
1523
set_property(TARGET libSwiftScan APPEND_STRING PROPERTY
@@ -21,11 +29,7 @@ add_dependencies(libSwiftScan
2129
swiftDependencyScan)
2230

2331
target_link_libraries(libSwiftScan PRIVATE
24-
swiftDependencyScan
25-
swiftDriverTool
26-
swiftStaticMirror
27-
swiftRemoteInspection
28-
swiftCompilerModules)
32+
libSwiftScanDependencies)
2933

3034
set_target_properties(libSwiftScan
3135
PROPERTIES

tools/swift-ide-test/CMakeLists.txt

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
# Early swift-driver is built adjacent to the compiler (swift build dir)
2+
if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
3+
set(driver_package_configuration_dir "release")
4+
else()
5+
set(driver_package_configuration_dir "debug")
6+
endif()
7+
8+
message(STATUS "${CMAKE_BINARY_DIR}/../earlyswiftdriver-${SWIFT_HOST_VARIANT}-${SWIFT_HOST_VARIANT_ARCH}/${driver_package_configuration_dir}/cmake/modules/")
9+
message(STATUS "${CMAKE_BINARY_DIR}/../earlyswiftdriver-${SWIFT_HOST_VARIANT}-${SWIFT_HOST_VARIANT_ARCH}/${driver_package_configuration_dir}/dependencies/swift-tools-support-core/cmake/modules/")
10+
11+
set(SwiftDriver_DIR
12+
"${CMAKE_BINARY_DIR}/../earlyswiftdriver-${SWIFT_HOST_VARIANT}-${SWIFT_HOST_VARIANT_ARCH}/${driver_package_configuration_dir}/cmake/modules/")
13+
set(TSC_DIR "${CMAKE_BINARY_DIR}/../earlyswiftdriver-${SWIFT_HOST_VARIANT}-${SWIFT_HOST_VARIANT_ARCH}/${driver_package_configuration_dir}/dependencies/swift-tools-support-core/cmake/modules/")
14+
find_package(TSC CONFIG)
15+
find_package(SwiftDriver CONFIG)
16+
17+
118
add_swift_host_tool(swift-ide-test
219
swift-ide-test.cpp
320
ModuleAPIDiff.cpp
@@ -6,14 +23,29 @@ add_swift_host_tool(swift-ide-test
623
THINLTO_LD64_ADD_FLTO_CODEGEN_ONLY
724
HAS_SWIFT_MODULES
825
)
26+
27+
set_property(
28+
TARGET swift-ide-test
29+
APPEND PROPERTY INSTALL_RPATH "${CMAKE_BINARY_DIR}/../earlyswiftdriver-${SWIFT_HOST_VARIANT}-${SWIFT_HOST_VARIANT_ARCH}/${driver_package_configuration_dir}/lib/"
30+
)
31+
set_property(
32+
TARGET swift-ide-test
33+
APPEND PROPERTY INSTALL_RPATH "${CMAKE_BINARY_DIR}/../earlyswiftdriver-${SWIFT_HOST_VARIANT}-${SWIFT_HOST_VARIANT_ARCH}/${driver_package_configuration_dir}/dependencies/swift-tools-support-core/lib/"
34+
)
35+
936
target_link_libraries(swift-ide-test
1037
PRIVATE
1138
swiftAST
1239
swiftDriver
40+
SwiftDriver
1341
swiftFrontend
1442
swiftIDE
1543
swiftIDETool
16-
swiftCompilerModules)
44+
swiftCompilerModules
45+
libSwiftScanInterface)
46+
target_sources(swift-ide-test
47+
PRIVATE
48+
$<TARGET_OBJECTS:libSwiftScan>)
1749

1850
# If libxml2 is available, make it available for swift-ide-test.
1951
if(LLVM_ENABLE_LIBXML2)

tools/swift-ide-test/swift-ide-test.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4180,6 +4180,29 @@ static int doPrintUSRs(const CompilerInvocation &InitInvok,
41804180
return 0;
41814181
}
41824182

4183+
extern "C" {
4184+
typedef enum {
4185+
SWIFTDRIVER_TOOLING_DIAGNOSTIC_ERROR = 0,
4186+
SWIFTDRIVER_TOOLING_DIAGNOSTIC_WARNING = 1,
4187+
SWIFTDRIVER_TOOLING_DIAGNOSTIC_REMARK = 2,
4188+
SWIFTDRIVER_TOOLING_DIAGNOSTIC_NOTE = 3
4189+
} swiftdriver_tooling_diagnostic_kind;
4190+
bool swift_getSingleFrontendInvocationFromDriverArgumentsV2(const char *, int, const char**, bool(int, const char**),
4191+
void(swiftdriver_tooling_diagnostic_kind, const char*), bool);
4192+
}
4193+
bool displayFrontendArgs(int FrontendArgC, const char ** FrontendArgV) {
4194+
llvm::outs() << "SwiftDriver (new) Frontend Arguments BEGIN\n";
4195+
for (int i = 0; i < FrontendArgC; ++i) {
4196+
llvm::outs() << FrontendArgV[i] << "\n";
4197+
}
4198+
llvm::outs() << "SwiftDriver (new) Frontend Arguments END\n";
4199+
//return CI.parseArgs(FrontendArgs, Diags);
4200+
return false;
4201+
}
4202+
void handleDiagnostic(swiftdriver_tooling_diagnostic_kind diagKind, const char * diagMessage) {
4203+
return;
4204+
}
4205+
41834206
static int doTestCreateCompilerInvocation(StringRef DriverPath,
41844207
ArrayRef<const char *> Args,
41854208
bool ForceNoOutputs) {
@@ -4201,6 +4224,18 @@ static int doTestCreateCompilerInvocation(StringRef DriverPath,
42014224
},
42024225
ForceNoOutputs);
42034226

4227+
{
4228+
const char **argList = (const char**)malloc(sizeof(const char*) * Args.size());
4229+
for (size_t i = 0; i < Args.size(); ++i) {
4230+
argList[i] = Args[i];
4231+
}
4232+
bool HadError = swift_getSingleFrontendInvocationFromDriverArgumentsV2(
4233+
DriverPath.str().c_str(), Args.size(), argList,
4234+
&displayFrontendArgs,
4235+
&handleDiagnostic,
4236+
ForceNoOutputs);
4237+
}
4238+
42044239
if (HadError) {
42054240
llvm::errs() << "error: unable to create a CompilerInvocation\n";
42064241
return 1;

0 commit comments

Comments
 (0)