• Mike Hommey's avatar
    Bug 1077151 - Always use expandlibs descriptors when they exist. r=mshal · 8c10235d
    Mike Hommey authored
    Currently, when there is both an expandlibs descriptor and an actual static
    library, expandlibs picks the static library. This has the side effect that
    if there are object files in the static library that aren't directly used,
    they're dropped when linking, even when they export symbols that would be
    exported in the final linked binary.
    
    In most cases in the code base, files are not dropped that way. The most
    notable counter-example is xpcomglue, where actually not dropping files
    leads to link failure because of missing symbols those files reference
    (yes, that would tend to say the glue is broken in some way).
    
    On the opposite side, there is mozglue, which does have both a descriptor
    and a static library (the latter being necessary for the SDK), and that
    linking as a static library drops files that shouldn't be dropped (like
    jemalloc). We're currently relying on -Wl,--whole-archive for those files
    not to be dropped, but that won't really be possible without much hassle
    in a world where mozglue dependencies live in moz.build land.
    
    Switching expandlibs to use descriptors when they exist, even when there
    is a static library (so, the opposite of the current behavior) allows to
    drop -Wl,--whole-archive and prepare for a better future. However, as
    mentioned, xpcomglue does still require to be linked through the static
    library, so we need to make it a static library only.
    
    To achieve that, we make NO_EXPAND_LIBS now actually mean no expandlibs
    and use that to build the various different xpcomglues.
    8c10235d