From 104495e693c01bba21863315aa7dfb7f112bd9e4 Mon Sep 17 00:00:00 2001 From: Quinton Miller Date: Sat, 16 Dec 2023 01:02:58 +0800 Subject: [PATCH] Windows: Do not use `%LLVM_CONFIG%` when linking dynamically --- src/llvm/lib_llvm.cr | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/src/llvm/lib_llvm.cr b/src/llvm/lib_llvm.cr index a4c55f2473a4..27966a7de012 100644 --- a/src/llvm/lib_llvm.cr +++ b/src/llvm/lib_llvm.cr @@ -1,19 +1,34 @@ {% begin %} -lib LibLLVM - LLVM_CONFIG = {{ env("LLVM_CONFIG") || `#{__DIR__}/ext/find-llvm-config`.stringify }} -end -{% end %} + {% if flag?(:win32) && flag?(:preview_dll) %} + {% config = nil %} + {% for dir in Crystal::LIBRARY_PATH.split(';') %} + {% config ||= read_file?("#{dir.id}/llvm_VERSION") %} + {% end %} -{% begin %} - {% unless flag?(:win32) %} - @[Link("stdc++")] + {% unless config %} + {% raise "Cannot determine LLVM configuration; ensure the file `llvm_VERSION` exists under `CRYSTAL_LIBRARY_PATH`" %} + {% end %} + + {% lines = config.lines.map(&.chomp) %} + {% llvm_version = lines[0] %} + {% llvm_targets = lines[1] %} + {% llvm_ldflags = lines[2] %} + {% extra_lib = "llvm" %} + {% else %} + {% llvm_config = env("LLVM_CONFIG") || `#{__DIR__}/ext/find-llvm-config`.stringify %} + {% llvm_version = `#{llvm_config.id} --version`.stringify %} + {% llvm_targets = env("LLVM_TARGETS") || `#{llvm_config.id} --targets-built`.stringify %} + {% llvm_ldflags = `#{llvm_config.id} --libs --system-libs --ldflags#{" --link-static".id if flag?(:static)}#{" 2> /dev/null".id unless flag?(:win32)}`.stringify %} + {% extra_lib = flag?(:win32) ? nil : "stdc++" %} + {% end %} + + {% if extra_lib %} + @[Link({{ extra_lib }})] {% end %} - @[Link(ldflags: {{"`#{LibLLVM::LLVM_CONFIG} --libs --system-libs --ldflags#{" --link-static".id if flag?(:static)}#{" 2> /dev/null".id unless flag?(:win32)}`"}})] + @[Link(ldflags: {{ llvm_ldflags.strip }})] lib LibLLVM - VERSION = {{`#{LibLLVM::LLVM_CONFIG} --version`.chomp.stringify.gsub(/git/, "")}} - BUILT_TARGETS = {{ ( - env("LLVM_TARGETS") || `#{LibLLVM::LLVM_CONFIG} --targets-built` - ).strip.downcase.split(' ').map(&.id.symbolize) }} + VERSION = {{ llvm_version.strip.gsub(/git/, "") }} + BUILT_TARGETS = {{ llvm_targets.strip.downcase.split(' ').map(&.id.symbolize) }} end {% end %}