transmutation 0.3.2

High-performance document conversion engine for AI/LLM embeddings - 27 formats supported
cmake_minimum_required(VERSION 3.12)
project(docling_ffi LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# Add ROOT_PATH definition for docling-parse resources
add_definitions(-DROOT_PATH="${CMAKE_CURRENT_SOURCE_DIR}/../docling-parse")

# Path to docling-parse installation
set(DOCLING_PARSE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../docling-parse")
set(DOCLING_EXTERNALS "${DOCLING_PARSE_ROOT}/externals")
set(DOCLING_BUILD "${DOCLING_PARSE_ROOT}/build_linux_x86_docling")

# Find docling-parse static libraries
set(PARSE_V1_LIB "${DOCLING_BUILD}/libparse_v1.a")
set(PARSE_V2_LIB "${DOCLING_BUILD}/libparse_v2.a")

# Verify libraries exist
if(NOT EXISTS "${PARSE_V1_LIB}")
    message(FATAL_ERROR "libparse_v1.a not found at ${PARSE_V1_LIB}")
endif()
if(NOT EXISTS "${PARSE_V2_LIB}")
    message(FATAL_ERROR "libparse_v2.a not found at ${PARSE_V2_LIB}")
endif()

# Find external dependencies (all built as part of docling-parse)
set(QPDF_LIB "${DOCLING_BUILD}/extlib_qpdf/src/extlib_qpdf-build/libqpdf/libqpdf.a")
set(JPEG_LIB "${DOCLING_BUILD}/extlib_jpeg/src/extlib_jpeg/libjpeg.a")
set(LOGURU_LIB "${DOCLING_BUILD}/_deps/logurugitrepo-build/libloguru.a")

# Verify external libraries exist
if(NOT EXISTS "${QPDF_LIB}")
    message(FATAL_ERROR "libqpdf.a not found at ${QPDF_LIB}")
endif()
if(NOT EXISTS "${JPEG_LIB}")
    message(FATAL_ERROR "libjpeg.a not found at ${JPEG_LIB}")
endif()
if(NOT EXISTS "${LOGURU_LIB}")
    message(FATAL_ERROR "libloguru.a not found at ${LOGURU_LIB}")
endif()

# Create FFI library
add_library(docling_ffi SHARED 
    docling_ffi.cpp
)

# Include directories
target_include_directories(docling_ffi PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${DOCLING_PARSE_ROOT}/src
    ${DOCLING_EXTERNALS}/include
    ${DOCLING_BUILD}/_deps/logurugitrepo-src
    ${DOCLING_BUILD}/_deps/jsongitrepo-src/include
    ${DOCLING_BUILD}/_deps/utf8gitrepo-src/source
)

# Link libraries
target_link_libraries(docling_ffi PRIVATE
    ${PARSE_V1_LIB}
    ${PARSE_V2_LIB}
    ${QPDF_LIB}
    ${JPEG_LIB}
    ${LOGURU_LIB}
    z  # zlib
    dl
    pthread
    stdc++
)

# Installation
install(TARGETS docling_ffi 
    LIBRARY DESTINATION lib
    RUNTIME DESTINATION bin
)

install(FILES docling_ffi.h DESTINATION include)