As the lines in version.jl hint at, the issue has to do with libllvm_version_string
.
In my case, I found the following in base/build.h
:
const libllvm_version_string = ""
This indicates a failure of getting LLVM_CONFIG_HOST
to run.
ifeq ($(USE_BLAS64), 1) @echo "const USE_BLAS64 = true" >> $@ else @echo "const USE_BLAS64 = false" >> $@ endif ifeq ($(USE_GPL_LIBS), 1) @echo "const USE_GPL_LIBS = true" >> $@ else @echo "const USE_GPL_LIBS = false" >> $@ endif @echo "const libllvm_version_string = \"$$($(LLVM_CONFIG_HOST) --version)\"" >> $@ @echo "const VERSION_STRING = \"$(JULIA_VERSION)\"" >> $@ @echo "const TAGGED_RELEASE_BANNER = \"$(TAGGED_RELEASE_BANNER)\"" >> $@ ifeq ($(OS),WINNT) @printf 'const SYSCONFDIR = "%s"\n' '$(subst /,\\,$(sysconfdir_rel))' >> $@ @printf 'const DATAROOTDIR = "%s"\n' '$(subst /,\\,$(datarootdir_rel))' >> $@ @printf 'const DOCDIR = "%s"\n' '$(subst /,\\,$(docdir_rel))' >> $@ @printf 'const LIBDIR = "%s"\n' '$(subst /,\\,$(libdir_rel))' >> $@ @printf 'const LIBEXECDIR = "%s"\n' '$(subst /,\\,$(libexecdir_rel))' >> $@ @printf 'const PRIVATE_LIBDIR = "%s"\n' '$(subst /,\\,$(private_libdir_rel))' >> $@ @printf 'const INCLUDEDIR = "%s"\n' '$(subst /,\\,$(includedir_rel))' >> $@
Indeed, we see that llvm-config.exe
(in the julia source tree) produces no output and silently fails.
$ cat VERSION
1.7.0-DEV
$ usr/tools/llvm-config.exe --version
$ echo $?
127
$ ldd usr/tools/llvm-config.exe
ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffc5e420000)
KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ffc5d010000)
KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ffc5b570000)
msvcrt.dll => /cygdrive/c/WINDOWS/System32/msvcrt.dll (0x7ffc5cef0000)
libstdc++-6.dll => /cygdrive/c/Users/kittisopikulm/AppData/Local/Programs/Julia 1.5.0/bin/libstdc++-6.dll (0x6fc40000)
LLVM.dll => /cygdrive/c/Users/kittisopikulm/AppData/Local/Programs/Julia 1.5.0/bin/LLVM.dll (0x66740000)
The last two lines indicate that libstdc++-6.dll
and LLVM.dll
are getting dynamically linked from by Julia 1.5 install. This is because the Julia 1.5 installer added it to my Windows path:
$ echo $PATH
/usr/local/bin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/Users/kittisopikulm/AppData/Local/Programs/Julia 1.5.0/bin
If we prepend usr/bin
in the Julia repo to the path, then the results look much more reasonable.
$ PATH="usr/bin:$PATH" usr/tools/llvm-config.exe --version
11.0.0jl
$ PATH="usr/bin:$PATH" ldd usr/tools/llvm-config.exe
ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffc5e420000)
KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ffc5d010000)
KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ffc5b570000)
msvcrt.dll => /cygdrive/c/WINDOWS/System32/msvcrt.dll (0x7ffc5cef0000)
libstdc++-6.dll => /cygdrive/c/Users/kittisopikulm/source/repos/julia/usr/bin/libstdc++-6.dll (0x6fc40000)
LLVM.dll => /cygdrive/c/Users/kittisopikulm/source/repos/julia/usr/bin/LLVM.dll (0x66740000)
ADVAPI32.dll => /cygdrive/c/WINDOWS/System32/ADVAPI32.dll (0x7ffc5e330000)
sechost.dll => /cygdrive/c/WINDOWS/System32/sechost.dll (0x7ffc5ca20000)
libgcc_s_seh-1.dll => /cygdrive/c/Users/kittisopikulm/source/repos/julia/usr/bin/libgcc_s_seh-1.dll (0x61440000)
libwinpthread-1.dll => /cygdrive/c/Users/kittisopikulm/source/repos/julia/usr/bin/libwinpthread-1.dll (0x64940000)
RPCRT4.dll => /cygdrive/c/WINDOWS/System32/RPCRT4.dll (0x7ffc5e1b0000)
libgcc_s_seh-1.dll => /cygdrive/c/Users/kittisopikulm/source/repos/julia/usr/bin/libgcc_s_seh-1.dll (0x1460000)
ole32.dll => /cygdrive/c/WINDOWS/System32/ole32.dll (0x7ffc5cd90000)
combase.dll => /cygdrive/c/WINDOWS/System32/combase.dll (0x7ffc5d5a0000)
ucrtbase.dll => /cygdrive/c/WINDOWS/System32/ucrtbase.dll (0x7ffc5bc10000)
bcryptPrimitives.dll => /cygdrive/c/WINDOWS/System32/bcryptPrimitives.dll (0x7ffc5b9c0000)
GDI32.dll => /cygdrive/c/WINDOWS/System32/GDI32.dll (0x7ffc5d500000)
win32u.dll => /cygdrive/c/WINDOWS/System32/win32u.dll (0x7ffc5c4a0000)
gdi32full.dll => /cygdrive/c/WINDOWS/System32/gdi32full.dll (0x7ffc5b820000)
msvcp_win.dll => /cygdrive/c/WINDOWS/System32/msvcp_win.dll (0x7ffc5b3a0000)
USER32.dll => /cygdrive/c/WINDOWS/System32/USER32.dll (0x7ffc5d0d0000)
SHELL32.dll => /cygdrive/c/WINDOWS/System32/SHELL32.dll (0x7ffc5d9b0000)
cfgmgr32.dll => /cygdrive/c/WINDOWS/System32/cfgmgr32.dll (0x7ffc5b440000)
shcore.dll => /cygdrive/c/WINDOWS/System32/shcore.dll (0x7ffc5e0a0000)
windows.storage.dll => /cygdrive/c/WINDOWS/System32/windows.storage.dll (0x7ffc5bd10000)
profapi.dll => /cygdrive/c/WINDOWS/System32/profapi.dll (0x7ffc5b370000)
powrprof.dll => /cygdrive/c/WINDOWS/System32/powrprof.dll (0x7ffc5b320000)
UMPDC.dll => /cygdrive/c/WINDOWS/System32/UMPDC.dll (0x7ffc5b2d0000)
shlwapi.dll => /cygdrive/c/WINDOWS/System32/shlwapi.dll (0x7ffc5e150000)
kernel.appcore.dll => /cygdrive/c/WINDOWS/System32/kernel.appcore.dll (0x7ffc5b2e0000)
cryptsp.dll => /cygdrive/c/WINDOWS/System32/cryptsp.dll (0x7ffc5baa0000)
The short term fix is to remove any Julia bin directories from your PATH. The long term fix is to have the Makefile prepend rather than append the usr/bin
path as I detailed in
Prepend build_bindir to LLVM_CONFIG_PATH_FIX rather than append by mkitti · Pull Request #39275 · JuliaLang/julia · GitHub .