swiftlang / swift

The Swift Programming Language
https://swift.org
Apache License 2.0
67.28k stars 10.33k forks source link

[SR-8927] Build ordering issue for libsourcekitdInProc.so #51433

Closed 6d44b555-049a-4a81-86f1-5537312bcad6 closed 5 years ago

6d44b555-049a-4a81-86f1-5537312bcad6 commented 5 years ago
Previous ID SR-8927
Radar None
Original Reporter @kevints
Type Bug
Status Resolved
Resolution Done
Environment swift commit f4db1dd
Additional Detail from JIRA | | | |------------------|-----------------| |Votes | 0 | |Component/s | Source Tooling | |Labels | Bug, CMake | |Assignee | None | |Priority | Medium | md5: 2cbd95cf26c7fec8107e39f87391ae4d

Issue Description:

It looks like libsourcekitdInProc.so tries to link in parallel with the libdispatch ExternalProject build. This causes a build failure since libdispatch.so doesn't yet exist.

FAILED: : && /usr/bin/clang++  -fPIC -Wno-unknown-warning-option -Werror=unguarded-availability-new -fPIC -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -std=c++11 -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wcovered-switch-default -Wno-class-memaccess -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -fdiagnostics-color -Werror=switch -Wdocumentation -Wimplicit-fallthrough -Wunreachable-code -Woverloaded-virtual -DOBJC_OLD_DISPATCH_PROTOTYPES=0 -g  -fuse-ld=gold   -target x86_64-unknown-linux-gnu -lpthread -latomic -ldl -fuse-ld=gold -shared -Wl,-soname,libsourcekitdInProc.so -o lib/libsourcekitdInProc.so tools/SourceKit/tools/sourcekitd/bin/InProc/CMakeFiles/sourcekitdInProc.dir/sourcekitdInProc.cpp.o -L/code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib lib/libSourceKitSwiftLang.a lib/libsourcekitdAPI.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMSupport.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMCoverage.a lib/libSourceKitSwiftLang.a lib/libSourceKitCore.a lib/libswiftDriver.a lib/libswiftFrontend.a lib/libswiftIDE.a lib/libswiftMigrator.a lib/libswiftFrontend.a lib/libswiftIDE.a lib/libswiftMigrator.a lib/libswiftIndex.a lib/libswiftParseSIL.a lib/libswiftIRGen.a lib/libswiftSILGen.a lib/libswiftSILOptimizer.a lib/libswiftSIL.a lib/libswiftLLVMPasses.a lib/libswiftSema.a lib/libswiftSerialization.a lib/libswiftClangImporter.a lib/libswiftParse.a lib/libswiftAST.a lib/libswiftMarkup.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangFrontendTool.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangCodeGen.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMCoverage.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMCoroutines.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangARCMigrate.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangStaticAnalyzerFrontend.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangStaticAnalyzerCheckers.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangStaticAnalyzerCore.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangCrossTU.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangIndex.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangFormat.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangToolingInclusions.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangToolingCore.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangASTMatchers.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangRewriteFrontend.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangFrontend.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangDriver.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangParse.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangSerialization.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangSema.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangAnalysis.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangEdit.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangRewrite.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangAST.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangLex.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangAPINotes.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libclangBasic.a lib/libswiftOption.a /code/build/Ninja-DebugAssert/cmark-linux-x86_64/src/libcmark.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangIndex.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangFormat.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangToolingCore.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangFrontendTool.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangFrontend.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangDriver.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangCodeGen.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangSerialization.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangParse.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangSema.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangAnalysis.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangEdit.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangRewriteFrontend.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangLex.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangAST.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangAPINotes.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMX86CodeGen.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMX86AsmParser.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMX86Desc.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMX86AsmPrinter.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMX86Disassembler.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMX86Info.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMX86Utils.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMARMCodeGen.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMARMAsmParser.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMARMDisassembler.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMARMDesc.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMARMAsmPrinter.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMARMInfo.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMARMUtils.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMAArch64CodeGen.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMAArch64AsmParser.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMAArch64Disassembler.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMAArch64Desc.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMAArch64AsmPrinter.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMAArch64Info.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMAArch64Utils.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMPowerPCCodeGen.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMPowerPCAsmParser.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMPowerPCDesc.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMPowerPCAsmPrinter.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMPowerPCDisassembler.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMPowerPCInfo.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMSystemZCodeGen.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMSystemZAsmParser.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMSystemZDisassembler.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMSystemZDesc.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMSystemZAsmPrinter.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMSystemZInfo.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMMipsCodeGen.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMAsmPrinter.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMGlobalISel.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMSelectionDAG.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMMipsAsmParser.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMMipsDesc.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMMipsAsmPrinter.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMMipsDisassembler.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMMCDisassembler.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMMipsInfo.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMDebugInfoDWARF.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMLTO.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMPasses.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMipo.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMInstrumentation.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMIRReader.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMAsmParser.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMLinker.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMCodeGen.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMBitWriter.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMTarget.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMScalarOpts.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMAggressiveInstCombine.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMInstCombine.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMVectorize.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMOption.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMObjCARCOpts.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMTransformUtils.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMAnalysis.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMObject.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMBitReader.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMMCParser.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMMC.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMDebugInfoCodeView.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMDebugInfoMSF.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMProfileData.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMCore.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMBinaryFormat.a lib/libSourceKitSupport.a lib/libswiftBasic.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMSupport.a -lz -lrt -ldl -ltinfo -lpthread -lm /code/build/Ninja-DebugAssert/llvm-linux-x86_64/lib/libLLVMDemangle.a lib/libswiftDemangling.a /usr/lib/x86_64-linux-gnu/libuuid.so lib/libswiftSyntax.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangRewrite.a /code/build/Ninja-DebugAssert/llvm-linux-x86_64/./lib/libclangBasic.a tools/SourceKit/libdispatch-prefix/lib/libdispatch.so tools/SourceKit/libdispatch-prefix/lib/libBlocksRuntime.so -Wl,-rpath,"\$ORIGIN/../lib/swift/linux:/usr/lib/swift/linux" && :
clang: error: no such file or directory: 'tools/SourceKit/libdispatch-prefix/lib/libdispatch.so'
[10/61] Performing install step for 'libdispatch'
belkadan commented 5 years ago

Ah, is that what's going on. cc @compnerd, @akyrtzi, Rostepher (JIRA User)

benlangmuir commented 5 years ago

From the ninja:

# Link the shared library lib/libsourcekitdInProc.so

build lib/libsourcekitdInProc.so: CXX_SHARED_LIBRARY_LINKER__sourcekitdInProc tools/SourceKit/tools/sourcekitd/bin/InProc/CMakeFiles/sourcekitdInProc.dir/sourcekitdInProc.cpp.o |

<snip>

tools/SourceKit/libdispatch-prefix/lib/libdispatch.so

And the command providing libdispatch-prefix/lib/libdispatch.so:

build tools/SourceKit/libdispatch-prefix/src/libdispatch-stamp/libdispatch-build tools/SourceKit/libdispatch-prefix/lib/libdispatch.so tools/SourceKit/libdispatch-prefix/lib/dispatch tools/SourceKit/libdispatch-prefix/lib/libBlocksRuntime.so tools/SourceKit/libdispatch-prefix/lib/BlocksRuntime: CUSTOM_COMMAND tools/SourceKit/libdispatch-prefix/src/libdispatch-stamp/libdispatch-configure
  COMMAND = cd /home/docker_user/src/s/build/buildbot_linux/swift-linux-x86_64/tools/SourceKit/libdispatch-prefix/src/libdispatch-build && /usr/local/bin/cmake --build .
  DESC = Performing build step for 'libdispatch'
  restat = 1

But that command just builds the library, it doesn't actually install it to libdispatch-prefix AFAICT.

I attempted to fix this by adding a dependency on the libdispatch-install step: https://github.com/apple/swift/pull/19921

compnerd commented 5 years ago

This has been working for a pretty long time.