<div dir="ltr">Do you know why it uses gold only for a particular link invocation?</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 29, 2017 at 5:11 PM, Davide Italiano <span dir="ltr"><<a href="mailto:davide@freebsd.org" target="_blank">davide@freebsd.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Wed, Jan 11, 2017 at 2:55 PM, Rui Ueyama via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: ruiu<br>
> Date: Wed Jan 11 16:55:35 2017<br>
> New Revision: 291719<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=291719&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=291719&view=rev</a><br>
> Log:<br>
> Add -Wl,-color-diagnostics if a linker supports the option.<br>
><br>
> Differential Revision: <a href="https://reviews.llvm.org/D28046" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D28046</a><br>
><br>
> Added:<br>
>     llvm/trunk/cmake/modules/<wbr>CheckLinkerFlag.cmake<br>
> Modified:<br>
>     llvm/trunk/cmake/modules/<wbr>HandleLLVMOptions.cmake<br>
><br>
> Added: llvm/trunk/cmake/modules/<wbr>CheckLinkerFlag.cmake<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/CheckLinkerFlag.cmake?rev=291719&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/cmake/<wbr>modules/CheckLinkerFlag.cmake?<wbr>rev=291719&view=auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/cmake/modules/<wbr>CheckLinkerFlag.cmake (added)<br>
> +++ llvm/trunk/cmake/modules/<wbr>CheckLinkerFlag.cmake Wed Jan 11 16:55:35 2017<br>
> @@ -0,0 +1,8 @@<br>
> +include(CheckCXXCompilerFlag)<br>
> +<br>
> +function(check_linker_flag flag out_var)<br>
> +  set(OLD_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")<br>
> +  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}")<br>
> +  check_cxx_compiler_flag("" ${out_var})<br>
> +  set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})<br>
> +endfunction()<br>
><br>
> Modified: llvm/trunk/cmake/modules/<wbr>HandleLLVMOptions.cmake<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/HandleLLVMOptions.cmake?rev=291719&r1=291718&r2=291719&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/cmake/<wbr>modules/HandleLLVMOptions.<wbr>cmake?rev=291719&r1=291718&r2=<wbr>291719&view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/cmake/modules/<wbr>HandleLLVMOptions.cmake (original)<br>
> +++ llvm/trunk/cmake/modules/<wbr>HandleLLVMOptions.cmake Wed Jan 11 16:55:35 2017<br>
> @@ -597,6 +597,14 @@ if (UNIX AND<br>
>    append("-fcolor-diagnostics" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)<br>
>  endif()<br>
><br>
> +# lld doesn't print colored diagnostics when invoked from Ninja<br>
> +if (UNIX AND CMAKE_GENERATOR STREQUAL "Ninja")<br>
> +  include(CheckLinkerFlag)<br>
> +  check_linker_flag("-Wl,-color-<wbr>diagnostics" LINKER_SUPPORTS_COLOR_<wbr>DIAGNOSTICS)<br>
> +  append_if(LINKER_SUPPORTS_<wbr>COLOR_DIAGNOSTICS "-Wl,-color-diagnostics"<br>
> +    CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)<br>
> +endif()<br>
> +<br>
>  # Add flags for add_dead_strip().<br>
>  # FIXME: With MSVS, consider compiling with /Gy and linking with /OPT:REF?<br>
>  # But MinSizeRel seems to add that automatically, so maybe disable these<br>
><br>
<br>
</div></div>This has the unfortunate side effect of breaking the swift build on FreeBSD.<br>
The link of `swift-demangle` fails with `unknown option -color-diagnostic`.<br>
It's the result of a series of events:<br>
<br>
1) lld is used as system linker:<br>
$ ld --version<br>
LLD (not GNU) 5.0.0<br>
$ ld --help |grep colo<br>
  --color-diagnostics=<value><br>
                          Use colors in diagnostics<br>
  --color-diagnostics     Use colors in diagnostics<br>
  --no-color-diagnostics  Do not use colors in diagnostics<br>
<br>
The particular build uses gold (so it passes around -fuse-ld=gold).<br>
Once that CMake check is hit, we think it passes (as it's tested with<br>
lld) but then we switch to gold and it fails.<br>
I'm not sure whether it's an issue in the `swift` build system or in<br>
your patch, but I wanted to make you aware of this.<br>
<br>
Thanks,<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Davide<br>
<br>
"There are no solved problems; there are only problems that are more<br>
or less solved" -- Henri Poincare<br>
</font></span></blockquote></div><br></div>