def compileInterpolatableTTFs(
    ufos,
    preProcessorClass=TTFInterpolatablePreProcessor,
    outlineCompilerClass=OutlineTTFCompiler,
    featureCompilerClass=None,
    featureWriters=None,
    glyphOrder=None,
    useProductionNames=None,
    cubicConversionError=None,
    reverseDirection=True,
    inplace=False,
    layerNames=None,
    skipExportGlyphs=None,
):
    from ufo2ft.util import _LazyFontName
    if layerNames is None:
        layerNames = [None] * len(ufos)
    assert len(ufos) == len(layerNames)
    if skipExportGlyphs is None:
        skipExportGlyphs = set()
        for ufo in ufos:
            skipExportGlyphs.update(ufo.lib.get("public.skipExportGlyphs", []))
    logger.info("Pre-processing glyphs")
    preProcessor = preProcessorClass(
        ufos,
        inplace=inplace,
        conversionError=cubicConversionError,
        reverseDirection=reverseDirection,
        layerNames=layerNames,
        skipExportGlyphs=skipExportGlyphs,
    )
    glyphSets = preProcessor.process()
    for ufo, glyphSet, layerName in zip(ufos, glyphSets, layerNames):
        fontName = _LazyFontName(ufo)
        if layerName is not None:
            logger.info("Building OpenType tables for %s-%s", fontName, layerName)
        else:
            logger.info("Building OpenType tables for %s", fontName)
        outlineCompiler = outlineCompilerClass(
            ufo,
            glyphSet=glyphSet,
            glyphOrder=glyphOrder,
            tables=SPARSE_TTF_MASTER_TABLES if layerName else None,
        )
        ttf = outlineCompiler.compile()
        if layerName is None:
            compileFeatures(
                ufo,
                ttf,
                glyphSet=glyphSet,
                featureWriters=featureWriters,
                featureCompilerClass=featureCompilerClass,
            )
        postProcessor = PostProcessor(ttf, ufo, glyphSet=glyphSet)
        ttf = postProcessor.process(useProductionNames)
        if layerName is not None:
            ttf["post"].underlinePosition = -0x8000
            ttf["post"].underlineThickness = -0x8000
        yield ttf