Skip to content
  • Ben Wagner's avatar
    Build FreeType and HarfBuzz together. · 7619f01f
    Ben Wagner authored
    The effect of this change is to hide the FreeType and HarfBuzz builds
    from the rest of the build except for a new component library named
    'freetype_harfbuzz'. All existing users of the 'freetype' and 'harfbuzz'
    targets will instead depend on the 'freetype_harfbuzz' target. The
    'freetype_harfbuzz' component will depend on the appropriate source sets
    or export the system packages for both FreeType and HarfBuzz.
    
    The reason for this change is that the full FreeType and HarfBuzz
    libraries we desire are circularly dependent. Before this change the
    build attempted to work around this by building HarfBuzz as a static
    library which also pulled in a small bootstrap FreeType static library.
    However, this causes ODR violations in component build, and potentially
    in the non-component build as well. Recent changes in FreeType cause
    FreeType to act incorrectly in these circumstances, so these ODR issues
    are preventing FreeType from rolling.
    
    A different approach would be to
    1) Compile all the sources.
    2) Link the base libraries.
    3) Link the complete libraries against the base libraries.
    4) Create the final libraries from the complete libraries by
    re-targeting the dependent library names directly.
    
    This last step can in theory be done for ELF using a tool like
    
    patchelf --replace-needed <other complete library path>
                              <other final library path>
                              <complete library>
    
    that outputs to <final library path> instead of updating in place.
    However, even if there were such a tool for dlls, this is something
    which would be needed on any platform. As a result, this only seems
    promising if all linkers supported this sort of re-writing.
    
    BUG=chromium:768938
    
    Change-Id: I488dc8cde8f6a8f88903d25f13ecd61fd2d74a3f
    Reviewed-on: https://chromium-review.googlesource.com/696241
    
    
    Reviewed-by: default avatarMike West <mkwst@chromium.org>
    Reviewed-by: default avatarDirk Pranke <dpranke@chromium.org>
    Reviewed-by: default avatarDominik Röttsches <drott@chromium.org>
    Reviewed-by: default avatarElliot Glaysher <erg@chromium.org>
    Reviewed-by: default avatarAlex Clarke <alexclarke@chromium.org>
    Reviewed-by: default avatarBrett Wilson <brettw@chromium.org>
    Commit-Queue: Ben Wagner <bungeman@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#507381}
    7619f01f