diff --git a/include/swift/Option/CMakeLists.txt b/include/swift/Option/CMakeLists.txt index 524634a680a53..4b0b7d101a6bf 100644 --- a/include/swift/Option/CMakeLists.txt +++ b/include/swift/Option/CMakeLists.txt @@ -1,3 +1,3 @@ set(LLVM_TARGET_DEFINITIONS Options.td) swift_tablegen(Options.inc -gen-opt-parser-defs) -swift_add_public_tablegen_target(SwiftOptions) +swift_add_public_tablegen_target(SwiftOptionDefinitions) diff --git a/lib/Driver/CMakeLists.txt b/lib/Driver/CMakeLists.txt index b5d95832435cc..30cb8356fa850 100644 --- a/lib/Driver/CMakeLists.txt +++ b/lib/Driver/CMakeLists.txt @@ -20,7 +20,7 @@ set(swiftDriver_targetDefines) add_swift_host_library(swiftDriver STATIC ${swiftDriver_sources}) add_dependencies(swiftDriver - SwiftOptions) + SwiftOptionDefinitions) target_link_libraries(swiftDriver PRIVATE swiftAST swiftBasic diff --git a/lib/Frontend/CMakeLists.txt b/lib/Frontend/CMakeLists.txt index 63ec151388e5f..12b7895afe95a 100644 --- a/lib/Frontend/CMakeLists.txt +++ b/lib/Frontend/CMakeLists.txt @@ -23,7 +23,7 @@ add_swift_host_library(swiftFrontend STATIC Serialization.cpp SerializedDiagnosticConsumer.cpp) add_dependencies(swiftFrontend - SwiftOptions) + SwiftOptionDefinitions) target_link_libraries(swiftFrontend PRIVATE swiftAPIDigester swiftAST diff --git a/lib/FrontendTool/CMakeLists.txt b/lib/FrontendTool/CMakeLists.txt index e21505a2d6c57..5df3faa9dae8f 100644 --- a/lib/FrontendTool/CMakeLists.txt +++ b/lib/FrontendTool/CMakeLists.txt @@ -5,7 +5,7 @@ add_swift_host_library(swiftFrontendTool STATIC LoadedModuleTrace.cpp TBD.cpp) add_dependencies(swiftFrontendTool - SwiftOptions) + SwiftOptionDefinitions) target_link_libraries(swiftFrontendTool INTERFACE clangAPINotes clangBasic) diff --git a/lib/Option/CMakeLists.txt b/lib/Option/CMakeLists.txt index 8659377a63d0a..0c11865a8a33b 100644 --- a/lib/Option/CMakeLists.txt +++ b/lib/Option/CMakeLists.txt @@ -2,7 +2,7 @@ add_swift_host_library(swiftOption STATIC Options.cpp SanitizerOptions.cpp) add_dependencies(swiftOption - SwiftOptions) + SwiftOptionDefinitions) target_link_libraries(swiftOption PRIVATE swiftBasic) diff --git a/lib/Tooling/libSwiftScan/CMakeLists.txt b/lib/Tooling/libSwiftScan/CMakeLists.txt index cd68ea874a619..08237f952cb2d 100644 --- a/lib/Tooling/libSwiftScan/CMakeLists.txt +++ b/lib/Tooling/libSwiftScan/CMakeLists.txt @@ -10,6 +10,14 @@ add_swift_host_library(libSwiftScan SHARED SwiftCaching.cpp HAS_SWIFT_MODULES) +add_library(libSwiftScanDependencies INTERFACE) +target_link_libraries(libSwiftScanDependencies INTERFACE + swiftDependencyScan + swiftDriverTool + swiftStaticMirror + swiftRemoteInspection + swiftCompilerModules) + if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS) # Workaround for a linker crash related to autolinking: rdar://77839981 set_property(TARGET libSwiftScan APPEND_STRING PROPERTY @@ -21,11 +29,7 @@ add_dependencies(libSwiftScan swiftDependencyScan) target_link_libraries(libSwiftScan PRIVATE - swiftDependencyScan - swiftDriverTool - swiftStaticMirror - swiftRemoteInspection - swiftCompilerModules) + libSwiftScanDependencies) set_target_properties(libSwiftScan PROPERTIES diff --git a/tools/swift-ide-test/CMakeLists.txt b/tools/swift-ide-test/CMakeLists.txt index 3cc33b10db1b4..225a656483741 100644 --- a/tools/swift-ide-test/CMakeLists.txt +++ b/tools/swift-ide-test/CMakeLists.txt @@ -1,3 +1,26 @@ +# Early swift-driver is built adjacent to the compiler (swift build dir) +if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + set(driver_package_configuration_dir "release") +else() + set(driver_package_configuration_dir "debug") +endif() + +get_target_property(LIB_SCAN_SOURCE_DIR libSwiftScan SOURCE_DIR) + +set(LIB_SCAN_EXPORTED_SYMBOL_FILE + ${LIB_SCAN_SOURCE_DIR}/libSwiftScan.exports) + +message(STATUS "libSwiftScan: ${LIB_SCAN_SOURCE_DIR}") +message(STATUS "swift-driver: ${CMAKE_BINARY_DIR}/../earlyswiftdriver-${SWIFT_HOST_VARIANT}-${SWIFT_HOST_VARIANT_ARCH}/${driver_package_configuration_dir}/cmake/modules/") +message(STATUS "swift-tools-support-core: ${CMAKE_BINARY_DIR}/../earlyswiftdriver-${SWIFT_HOST_VARIANT}-${SWIFT_HOST_VARIANT_ARCH}/${driver_package_configuration_dir}/dependencies/swift-tools-support-core/cmake/modules/") + +set(SwiftDriver_DIR + "${CMAKE_BINARY_DIR}/../earlyswiftdriver-${SWIFT_HOST_VARIANT}-${SWIFT_HOST_VARIANT_ARCH}/${driver_package_configuration_dir}/cmake/modules/") +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/") +find_package(TSC CONFIG) +find_package(SwiftDriver CONFIG) + + add_swift_host_tool(swift-ide-test swift-ide-test.cpp ModuleAPIDiff.cpp @@ -6,14 +29,33 @@ add_swift_host_tool(swift-ide-test THINLTO_LD64_ADD_FLTO_CODEGEN_ONLY HAS_SWIFT_MODULES ) + +set_property( + TARGET swift-ide-test + APPEND PROPERTY INSTALL_RPATH "${CMAKE_BINARY_DIR}/../earlyswiftdriver-${SWIFT_HOST_VARIANT}-${SWIFT_HOST_VARIANT_ARCH}/${driver_package_configuration_dir}/lib/" +) +set_property( + TARGET swift-ide-test + 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/" +) + target_link_libraries(swift-ide-test PRIVATE swiftAST swiftDriver + SwiftDriver swiftFrontend swiftIDE swiftIDETool - swiftCompilerModules) + swiftCompilerModules + libSwiftScanDependencies) +target_sources(swift-ide-test + PRIVATE + $) + +# This is required because swift-driver in "integrated" mode depends on libSwiftScan symbols +# that have to be re-exported from the `libSwiftScan` library. +add_llvm_symbol_exports(swift-ide-test ${LIB_SCAN_EXPORTED_SYMBOL_FILE}) # If libxml2 is available, make it available for swift-ide-test. if(LLVM_ENABLE_LIBXML2) diff --git a/tools/swift-ide-test/swift-ide-test.cpp b/tools/swift-ide-test/swift-ide-test.cpp index 8ea7ceaf6bc3a..8d85f8e530414 100644 --- a/tools/swift-ide-test/swift-ide-test.cpp +++ b/tools/swift-ide-test/swift-ide-test.cpp @@ -4235,6 +4235,29 @@ static int doPrintUSRs(const CompilerInvocation &InitInvok, return 0; } +extern "C" { + typedef enum { + SWIFTDRIVER_TOOLING_DIAGNOSTIC_ERROR = 0, + SWIFTDRIVER_TOOLING_DIAGNOSTIC_WARNING = 1, + SWIFTDRIVER_TOOLING_DIAGNOSTIC_REMARK = 2, + SWIFTDRIVER_TOOLING_DIAGNOSTIC_NOTE = 3 + } swiftdriver_tooling_diagnostic_kind; + bool swift_getSingleFrontendInvocationFromDriverArgumentsV3( + const char *, int, const char **, bool(int, const char **), + void(swiftdriver_tooling_diagnostic_kind, const char *), bool, bool); +} +bool displayFrontendArgs(int FrontendArgC, const char ** FrontendArgV) { + llvm::outs() << "SwiftDriver (new) Frontend Arguments BEGIN\n"; + for (int i = 0; i < FrontendArgC; ++i) { + llvm::outs() << FrontendArgV[i] << "\n"; + } + llvm::outs() << "SwiftDriver (new) Frontend Arguments END\n"; + return false; +} +void handleDiagnostic(swiftdriver_tooling_diagnostic_kind diagKind, const char * diagMessage) { + return; +} + static int doTestCreateCompilerInvocation(StringRef DriverPath, ArrayRef Args, bool ForceNoOutputs) { @@ -4261,6 +4284,23 @@ static int doTestCreateCompilerInvocation(StringRef DriverPath, return 1; } + { + const char **argList = (const char**)malloc(sizeof(const char*) * Args.size()); + for (size_t i = 0; i < Args.size(); ++i) { + argList[i] = Args[i]; + } + + bool NewHadError = swift_getSingleFrontendInvocationFromDriverArgumentsV3( + DriverPath.str().c_str(), Args.size(), argList, &displayFrontendArgs, + &handleDiagnostic, + /*compilerIntegratedTooling=*/true, ForceNoOutputs); + if (NewHadError) { + llvm::errs() + << "error: unable to create a CompilerInvocation (new driver)\n"; + return 1; + } + } + return 0; }