I went down a rabbit hole and pulled myself back out. I narrowed it down to the following.
We are using cmake to check if the linker supports ‘-Wl,—as-needed'. The test compile (and link?) command cmake builds using ‘cmake -G Xcode’ does not fail. The command from ‘cmake -G’ has been narrowed down to the following: $ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang \ -Qunused-arguments \ -DWS_LD_FLAG_VALID0 \ -Wl,--as-needed \ -c src.c \ -o src.o $ The following modified command generates an error: $ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang \ -Qunused-arguments \ -DWS_LD_FLAG_VALID0 \ -Wl,--as-needed \ src.c ld: unknown option: --as-needed clang: error: linker command failed with exit code 1 (use -v to see invocation) $ It appears the linker isn’t called when the -c and the -o options are present. The following warning is generated when the ‘-Qunused-arguments’ is removed. clang: warning: -Wl,--as-needed: 'linker' input unused The cmake logic in CMakeLists.txt is basically: SET(CMAKE_REQUIRED_FLAGS "${_FLAG}") CHECK_C_SOURCE_RUNS(“int main() { return 0;}" ${_RESULT}) where _FLAG is set to ‘-DWS_LD_FLAG_VALID0 -Wl,—-as-needed’ So, how/where is the clang compile/link command generated and why isn’t it being setup for clang to link? > On Jan 20, 2016, at 3:22 PM, Guy Harris <g...@alum.mit.edu> wrote: > > On Jan 20, 2016, at 11:09 AM, David Morsberger <d...@morsberger.com> wrote: > >> This is what I am also tracking down. It has to do with the way cmake is >> instantiating the compiler. The --serialized-diagnostics option is what >> appears to be hiding the error. > > --serialize-diagnostics takes an argument, which is the name of a file to > which the diagnostics are written, in a binary format. > > Clang documentation sucks. Srsly. The man page doesn't enumerate the -W > options; the website: > > > http://clang.llvm.org/docs/UsersManual.html#options-to-control-error-and-warning-messages > > does, but I'm not sure how to get the manual for an *arbitrary* version of > Clang (the GCC folks are kind enough to provide online manuals, complete with > listings of compiler flags, for multiple versions), and the word "serialize" > appears nowhere on that page. > > It might be that, when the tests are done, ld is being run directly, rather > than by the gcc/clang driver, and that -as-needed isn't getting passed to it. > It obviously is getting passed when the actual *build* is done. > > Perhaps when CMake was being designed, its designers should have looked at > the documentation for another configuration system - I think it's called > "autoconf" or something such as that - and noticed that it offered not only > macros to try compiling a file ("compiling" as in "turning a source file into > an object file, without trying to link anything"), but macros to try > *linking* things, which can come in handy if, say, to pick a purely > *hypothetical* example, you're trying to see whether a given linker flag > works. > > Or perhaps they mistakenly had the attitude that "we take care of all the > platform details, so you don't have to". > ___________________________________________________________________________ > Sent via: Wireshark-dev mailing list <wireshark-dev@wireshark.org> > Archives: https://www.wireshark.org/lists/wireshark-dev > Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev > mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe
___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev@wireshark.org> Archives: https://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe