Hadrian isn't "flavour change"-proof
Summary
Changing from a flavour to another while using the same build root should just rebuild everything needed, that's affected by the flavour change, but instead falls over while taking care of stage 2 GHC's dynamic libHSrts library files.
Steps to reproduce
$ hadrian/build.sh -j --flavour=quickest
$ hadrian/build.sh -j
Expected behaviour
The first command succeeds and builds a complete stage 2 quickest
-flavoured GHC. The second command succeeds and builds a complete stage default
-flavoured GHC.
Actual behaviour
The first command succeeds, but the second one fails.
$ hadrian/build.sh -j
[...]
| Run Ghc CompileCWithGhc Stage1: rts/Linker.c => _build/stage1/rts/build/c/Linker.thr_l_dyn_o
| Run Ghc LinkHs Stage1: _build/stage1/rts/build/c/Adjustor.thr_debug_dyn_o (and 115 more) => _build/stage1/rts/build/libHSrts-1.0_thr_debug-ghc8.9.0.20190506.so
Warning: -rtsopts and -with-rtsopts have no effect with -shared.
Call hs_init_ghc() from your main() function to set these options.
| Run Ghc CompileCWithGhc Stage1: rts/RtsSymbols.c => _build/stage1/rts/build/c/RtsSymbols.thr_l_dyn_o
| Run Ghc CompileCWithGhc Stage1: rts/RtsSymbols.c => _build/stage1/rts/build/c/RtsSymbols.thr_dyn_o
/nix/store/0y7jmqnj48ikjh37n3dl9kqw9hnn68nq-binutils-2.31.1/bin/ld: cannot find -lffi
collect2: error: ld returned 1 exit status
`cc' failed in phase `Linker'. (Exit code: 1)
| Run Ar Pack Stage1: _build/stage1/rts/build/c/Adjustor.debug_p_o (and 113 more) => _build/stage1/rts/build/libHSrts-1.0_debug_p.a
Error when running Shake build system:
at action, called at src/Rules.hs:69:19 in main:Rules
at need, called at src/Rules.hs:91:5 in main:Rules
* Depends on: _build/stage1/bin/hp2ps
at need, called at src/Utilities.hs:71:18 in main:Utilities
* Depends on: _build/stage1/rts/build/libHSrts-1.0_thr_debug-ghc8.9.0.20190506.so
* Raised the exception:
user error (Development.Shake.cmd, system command failed
Command line: _build/stage0/bin/ghc -Wall -hisuf thr_debug_dyn_hi -osuf thr_debug_dyn_o -hcsuf thr_debug_dyn_hc -fPIC -dynamic -optc-DTHREADED_RTS -optc-DDEBUG -hide-all-packages -no-user-package-db '-package-db _build/stage1/lib/package.conf.d' '-this-unit-id rts-1.0' -i -i_build/stage1/rts/build -i_build/stage1/rts/build/autogen -irts/. -Iincludes -I_build/generated -I_build/stage1/rts/build -I/nix/store/y4xqavb0x22l72whp70vy76vcvf2wmz6-ghc-build-environment/include -I_build/stage1/rts/build/build -I_build/stage1/rts/build/../includes -I_build/stage1/rts/build/includes -I_build/stage1/rts/build/includes/dist-derivedconstants/header -Irts/build -Irts/../includes -Irts/includes -Irts/includes/dist-derivedconstants/header -I_build/generated -optc-I_build/generated -optP-include -optP_build/stage1/rts/build/autogen/cabal_macros.h -ghcversion-file=_build/generated/ghcversion.h -outputdir _build/stage1/rts/build -dynamic -shared -dynload deploy -optl-Wl,-rpath,$ORIGIN -optl-Wl,-zorigin -no-auto-link-packages -rtsopts -lm -lrt -ldl -lpthread -lnuma -L_build/stage1/rts/build -lffi -Wnoncanonical-monad-instances -optc-Werror=unused-but-set-variable -optc-Wno-error=inline _build/stage1/rts/build/c/Adjustor.thr_debug_dyn_o _build/stage1/rts/build/c/Arena.thr_debug_dyn_o _build/stage1/rts/build/c/Capability.thr_debug_dyn_o _build/stage1/rts/build/c/CheckUnload.thr_debug_dyn_o _build/stage1/rts/build/c/ClosureFlags.thr_debug_dyn_o _build/stage1/rts/build/c/Disassembler.thr_debug_dyn_o _build/stage1/rts/build/c/FileLock.thr_debug_dyn_o _build/stage1/rts/build/c/Globals.thr_debug_dyn_o _build/stage1/rts/build/c/Hash.thr_debug_dyn_o _build/stage1/rts/build/c/Heap.thr_debug_dyn_o _build/stage1/rts/build/c/Hpc.thr_debug_dyn_o _build/stage1/rts/build/c/HsFFI.thr_debug_dyn_o _build/stage1/rts/build/c/Inlines.thr_debug_dyn_o _build/stage1/rts/build/c/Interpreter.thr_debug_dyn_o _build/stage1/rts/build/c/LdvProfile.thr_debug_dyn_o _build/stage1/rts/build/c/Libdw.thr_debug_dyn_o _build/stage1/rts/build/c/LibdwPool.thr_debug_dyn_o _build/stage1/rts/build/c/Linker.thr_debug_dyn_o _build/stage1/rts/build/c/Messages.thr_debug_dyn_o _build/stage1/rts/build/c/OldARMAtomic.thr_debug_dyn_o _build/stage1/rts/build/c/PathUtils.thr_debug_dyn_o _build/stage1/rts/build/c/Pool.thr_debug_dyn_o _build/stage1/rts/build/c/Printer.thr_debug_dyn_o _build/stage1/rts/build/c/ProfHeap.thr_debug_dyn_o _build/stage1/rts/build/c/ProfilerReport.thr_debug_dyn_o _build/stage1/rts/build/c/ProfilerReportJson.thr_debug_dyn_o _build/stage1/rts/build/c/Profiling.thr_debug_dyn_o _build/stage1/rts/build/c/Proftimer.thr_debug_dyn_o _build/stage1/rts/build/c/RaiseAsync.thr_debug_dyn_o _build/stage1/rts/build/c/RetainerProfile.thr_debug_dyn_o _build/stage1/rts/build/c/RetainerSet.thr_debug_dyn_o _build/stage1/rts/build/c/RtsAPI.thr_debug_dyn_o _build/stage1/rts/build/c/RtsDllMain.thr_debug_dyn_o _build/stage1/rts/build/c/RtsFlags.thr_debug_dyn_o _build/stage1/rts/build/c/RtsMain.thr_debug_dyn_o _build/stage1/rts/build/c/RtsMessages.thr_debug_dyn_o _build/stage1/rts/build/c/RtsStartup.thr_debug_dyn_o _build/stage1/rts/build/c/RtsSymbolInfo.thr_debug_dyn_o _build/stage1/rts/build/c/RtsSymbols.thr_debug_dyn_o _build/stage1/rts/build/c/RtsUtils.thr_debug_dyn_o _build/stage1/rts/build/c/STM.thr_debug_dyn_o _build/stage1/rts/build/c/Schedule.thr_debug_dyn_o _build/stage1/rts/build/c/Sparks.thr_debug_dyn_o _build/stage1/rts/build/c/StableName.thr_debug_dyn_o _build/stage1/rts/build/c/StablePtr.thr_debug_dyn_o _build/stage1/rts/build/c/StaticPtrTable.thr_debug_dyn_o _build/stage1/rts/build/c/Stats.thr_debug_dyn_o _build/stage1/rts/build/c/StgCRun.thr_debug_dyn_o _build/stage1/rts/build/c/StgPrimFloat.thr_debug_dyn_o _build/stage1/rts/build/c/Task.thr_debug_dyn_o _build/stage1/rts/build/c/ThreadLabels.thr_debug_dyn_o _build/stage1/rts/build/c/ThreadPaused.thr_debug_dyn_o _build/stage1/rts/build/c/Threads.thr_debug_dyn_o _build/stage1/rts/build/c/Ticky.thr_debug_dyn_o _build/stage1/rts/build/c/Timer.thr_debug_dyn_o _build/stage1/rts/build/c/TopHandler.thr_debug_dyn_o _build/stage1/rts/build/c/Trace.thr_debug_dyn_o _build/stage1/rts/build/c/WSDeque.thr_debug_dyn_o _build/stage1/rts/build/c/Weak.thr_debug_dyn_o _build/stage1/rts/build/c/eventlog/EventLog.thr_debug_dyn_o _build/stage1/rts/build/c/eventlog/EventLogWriter.thr_debug_dyn_o _build/stage1/rts/build/c/hooks/FlagDefaults.thr_debug_dyn_o _build/stage1/rts/build/c/hooks/LongGCSync.thr_debug_dyn_o _build/stage1/rts/build/c/hooks/MallocFail.thr_debug_dyn_o _build/stage1/rts/build/c/hooks/OnExit.thr_debug_dyn_o _build/stage1/rts/build/c/hooks/OutOfHeap.thr_debug_dyn_o _build/stage1/rts/build/c/hooks/StackOverflow.thr_debug_dyn_o _build/stage1/rts/build/c/linker/CacheFlush.thr_debug_dyn_o _build/stage1/rts/build/c/linker/Elf.thr_debug_dyn_o _build/stage1/rts/build/c/linker/LoadArchive.thr_debug_dyn_o _build/stage1/rts/build/c/linker/M32Alloc.thr_debug_dyn_o _build/stage1/rts/build/c/linker/MachO.thr_debug_dyn_o _build/stage1/rts/build/c/linker/PEi386.thr_debug_dyn_o _build/stage1/rts/build/c/linker/SymbolExtras.thr_debug_dyn_o _build/stage1/rts/build/c/linker/elf_got.thr_debug_dyn_o _build/stage1/rts/build/c/linker/elf_plt.thr_debug_dyn_o _build/stage1/rts/build/c/linker/elf_plt_aarch64.thr_debug_dyn_o _build/stage1/rts/build/c/linker/elf_plt_arm.thr_debug_dyn_o _build/stage1/rts/build/c/linker/elf_reloc.thr_debug_dyn_o _build/stage1/rts/build/c/linker/elf_reloc_aarch64.thr_debug_dyn_o _build/stage1/rts/build/c/linker/elf_util.thr_debug_dyn_o _build/stage1/rts/build/c/sm/BlockAlloc.thr_debug_dyn_o _build/stage1/rts/build/c/sm/CNF.thr_debug_dyn_o _build/stage1/rts/build/c/sm/Compact.thr_debug_dyn_o _build/stage1/rts/build/c/sm/Evac.thr_debug_dyn_o _build/stage1/rts/build/c/sm/Evac_thr.thr_debug_dyn_o _build/stage1/rts/build/c/sm/GC.thr_debug_dyn_o _build/stage1/rts/build/c/sm/GCAux.thr_debug_dyn_o _build/stage1/rts/build/c/sm/GCUtils.thr_debug_dyn_o _build/stage1/rts/build/c/sm/MBlock.thr_debug_dyn_o _build/stage1/rts/build/c/sm/MarkWeak.thr_debug_dyn_o _build/stage1/rts/build/c/sm/Sanity.thr_debug_dyn_o _build/stage1/rts/build/c/sm/Scav.thr_debug_dyn_o _build/stage1/rts/build/c/sm/Scav_thr.thr_debug_dyn_o _build/stage1/rts/build/c/sm/Storage.thr_debug_dyn_o _build/stage1/rts/build/c/sm/Sweep.thr_debug_dyn_o _build/stage1/rts/build/c/xxhash.thr_debug_dyn_o _build/stage1/rts/build/c/fs.thr_debug_dyn_o _build/stage1/rts/build/c/posix/GetEnv.thr_debug_dyn_o _build/stage1/rts/build/c/posix/GetTime.thr_debug_dyn_o _build/stage1/rts/build/c/posix/Itimer.thr_debug_dyn_o _build/stage1/rts/build/c/posix/OSMem.thr_debug_dyn_o _build/stage1/rts/build/c/posix/OSThreads.thr_debug_dyn_o _build/stage1/rts/build/c/posix/Select.thr_debug_dyn_o _build/stage1/rts/build/c/posix/Signals.thr_debug_dyn_o _build/stage1/rts/build/c/posix/TTY.thr_debug_dyn_o _build/stage1/rts/build/cmm/Apply.thr_debug_dyn_o _build/stage1/rts/build/cmm/Compact.thr_debug_dyn_o _build/stage1/rts/build/cmm/Exception.thr_debug_dyn_o _build/stage1/rts/build/cmm/HeapStackCheck.thr_debug_dyn_o _build/stage1/rts/build/cmm/PrimOps.thr_debug_dyn_o _build/stage1/rts/build/cmm/StgMiscClosures.thr_debug_dyn_o _build/stage1/rts/build/cmm/StgStartup.thr_debug_dyn_o _build/stage1/rts/build/cmm/StgStdThunks.thr_debug_dyn_o _build/stage1/rts/build/cmm/Updates.thr_debug_dyn_o _build/stage1/rts/build/cmm/AutoApply.thr_debug_dyn_o -o _build/stage1/rts/build/libHSrts-1.0_thr_debug-ghc8.9.0.20190506.so -O2 -H32m -this-unit-id rts -XHaskell98 -ghcversion-file=/home/alp/ghc/_build/generated/ghcversion.h -Irts -Wno-deprecated-flags -Wcpp-undef
Exit code: 1
Stderr:
Warning: -rtsopts and -with-rtsopts have no effect with -shared.
Call hs_init_ghc() from your main() function to set these options.
/nix/store/0y7jmqnj48ikjh37n3dl9kqw9hnn68nq-binutils-2.31.1/bin/ld: cannot find -lffi
collect2: error: ld returned 1 exit status
`cc' failed in phase `Linker'. (Exit code: 1)
Environment
- GHC version used: 8.4.4 as the boot compiler
Optional:
- Operating System: (NixOS) Linux, OS X
- System Architecture: x86_64
Notes
-
@int-index reported a similar failure (copying a dynamic library fails because it already exists, in his case) when executing a workflow like "building, rebasing and building again". His error:
| Creating file link: _build/stage1/lib/x86_64-osx-ghc-8.9.0.20190503/libHSrts-ghc8.9.0.20190503.dylib -> libHSrts-1.0-ghc8.9.0.20190503.dylib Error when running Shake build system: at action, called at src/Rules.hs:69:19 in main:Rules at need, called at src/Rules.hs:91:5 in main:Rules * Depends on: _build/stage1/lib/package.conf.d/rts-1.0.conf at need, called at src/Rules/Rts.hs:31:9 in main:Rules.Rts * Depends on: _build/stage1/lib/x86_64-osx-ghc-8.9.0.20190503/libHSrts-ghc8.9.0.20190503.dylib * Raised the exception: _build/stage1/lib/x86_64-osx-ghc-8.9.0.20190503/libHSrts-ghc8.9.0.20190503.dylib: createFileLink:createSymbolicLink: already exists (File exists)
-
It looks like !888 (merged) by @DavidEichmann touches Hadrian code related to those dynamic RTS libraries, so perhaps it will work around the error above and fail later or who knows, succeed!