On Thu, 2017-03-09 at 00:42 +0100, Adriaan de Groot wrote: > In some cases, we end up with shared-libs that are too big to include > debug > info; webkit2, webengine come to mind. Here's one way to mess with > the linking > step (bear in mind, I haven't played at *all* with the consequences > this has > nor how variable-scope affects generation). > > Consider > > add_library(foo SHARED foo.c) > > Build this in verbose mode: > cmake . > make foo VERBOSE=1 > See how the compiler is invoked at the end to link the library? > > > Now consider this: > > set(CMAKE_C_CREATE_SHARED_LIBRARY > "<CMAKE_LINKER> <CMAKE_SHARED_LIBRARY_C_FLAGS> > <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> > <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> > <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") > add_library(foo SHARED foo.c) > > This messes with the command that CMake uses -- and later expands -- > to create > shared libraries from C code; the standard definition is in > ./Modules/CMakeCInformation.cmake , and uses <CMAKE_C_COMPILER> while > setting > the variable ourselves lets us choose the linker instead. Note that > this > *won't* compile, since the flags for the linker are seriously > different from > what the C compiler expects (in particular, you'll see -Wl,-soname in > there > where the linker invoked directly wants -soname). > > > Probably by massaging this variable in a suitable manner you can > stuff in any > particular tool you want. > > [ade]
Hi, I'm interested in this because of webkitgtk. Like Adriaan said above we can't currently build it with debug support. This is not a problem on Linux because binutils have something called thin archives. I don't know anything about it apart from that it works :) So I was looking into using binutils from ports to build webkitgtk when debug is enabled. With the CMAKE_AR and CMAKE_RANLIB variables I can set the binutils ar and ranlib. However the problem is that for some reason cmake doesn't have a LINKER variable, which results in it using ld from base which doesn't understand thin archives. I tried CMAKE_LINKER a while back and that didn't seem to work. My question is now does cmake have a variable, or another way, that I can set so it uses ld from binutils instead of ld from base? -Koop