Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
vendor/
Dockerfile
docker-compose.yml
compose.yml
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/.phpunit.cache
/tests/resources/generated
/vendor/
/lib-headers/
/lib/
17 changes: 11 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
.PHONY: dump-header
dump-header: build
docker compose cp php-pdfium:/usr/lib-pdfium/include/pdfium.h ./include/pdfium.h
dump-header:
docker compose up -d php-pdfium --remove-orphans --build && docker compose cp php-pdfium:/usr/lib-pdfium/include/pdfium.h ./include/pdfium.h

# Use this only to get include headers from precompiled pdfium lib
.PHONY: dump-lib-headers
dump-lib-headers: build
mkdir -p ./lib-headers/pdfium && docker compose cp php-pdfium:/usr/lib-pdfium/include ./lib-headers/pdfium/.
mkdir -p ./lib/pdfium && docker compose cp php-pdfium:/usr/lib-pdfium/include ./lib/pdfium/include/.

.PHONY: test
test:
docker-compose run --rm php-pdfium ./vendor/bin/phpunit
docker compose run --rm php-pdfium ./vendor/bin/phpunit

.PHONY: test-ci
test-ci:
docker buildx bake -f docker-compose.ci.yml && docker compose -f docker-compose.ci.yml run --rm php-pdfium sh -c "composer install --prefer-dist --no-progress && ls -l && ./vendor/bin/phpunit"
docker compose -f compose.ci.yml run --build --rm php-pdfium sh -c "composer install --prefer-dist --no-progress && ls -l && ./vendor/bin/phpunit"

.PHONY: build
build:
docker buildx bake
docker buildx bake php-pdfium

.PHONY: build-pdfium-lib
build-pdfium-lib:
docker buildx bake pdfium-lib && docker compose up pdfium-lib
2 changes: 1 addition & 1 deletion docker-compose.ci.yml → compose.ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ services:
image: phpdfium:ci
build:
context: ./
dockerfile: ./Dockerfile
dockerfile: ./docker/php-ffi/Dockerfile
target: ci
26 changes: 26 additions & 0 deletions compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@

services:
php-pdfium:
image: phpdfium:dev
build:
context: ./
dockerfile: ./docker/php-ffi/Dockerfile
target: precompiled # Switch to compiled to use a custom pdfium local build
x-bake:
platforms:
# - linux/amd64 # If switching to compiled, this should be the same as the pdfium-lib build
- linux/arm64
volumes:
- ./:/usr/php-pdfium

# A specific image to build the pdfium library ourselves
pdfium-lib:
image: pdfiumlib:dev
volumes:
- ./lib/pdfium:/home/ubuntu/pdfium-binaries/staging
build:
context: ./
dockerfile: ./docker/libpdfium/Dockerfile
x-bake:
platforms:
- linux/amd64 # Pdfium lib build only supports amd64 platform, arm64 build is still possible through cross compilation
14 changes: 0 additions & 14 deletions docker-compose.yml

This file was deleted.

19 changes: 19 additions & 0 deletions docker/libpdfium/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
FROM ubuntu:24.04

ENV OS=linux
ENV CPU=arm64

RUN apt-get update && apt-get install -y \
git \
sudo \
curl \
python3 \
file \
lsb-base \
lsb-release

RUN git clone https://github.com/bblanchon/pdfium-binaries.git /home/ubuntu/pdfium-binaries

WORKDIR /home/ubuntu/pdfium-binaries

CMD ./build.sh ${OS} ${CPU}
28 changes: 21 additions & 7 deletions Dockerfile → docker/php-ffi/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,39 @@ ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/do
RUN chmod +x /usr/local/bin/install-php-extensions && \
install-php-extensions ffi

# Translate TARGETPLATFORM to architecture format
RUN ARCH=$(echo ${TARGETPLATFORM} | cut -d'/' -f2 | sed 's/amd/x/') && \
mkdir -p /usr/lib-pdfium && cd /usr/lib-pdfium && curl -L https://github.com/bblanchon/pdfium-binaries/releases/latest/download/pdfium-linux-${ARCH}.tgz | tar -xz \
&& cp lib/libpdfium.so /usr/local/lib/libpdfium.so && ldconfig

# Test libvips integration
RUN ARCH=$(echo ${TARGETPLATFORM} | cut -d'/' -f2 | sed 's/amd/x/' | sed 's/arm64/arm64v8/') && \
mkdir -p /usr/lib-vips && cd /usr/lib-vips && curl -L https://github.com/lovell/sharp-libvips/releases/download/v8.16.1/libvips-8.16.1-linux-${ARCH}.tar.gz | tar -xz \
&& cp lib/libvips-cpp.so.* /usr/local/lib/libvips.so.42 && ldconfig

RUN mkdir -p /usr/lib-pdfium

ENV VIPSHOME=/usr/local

WORKDIR /usr/php-pdfium

FROM base AS precompiled
ARG TARGETPLATFORM

# Translate TARGETPLATFORM to architecture format
RUN ARCH=$(echo ${TARGETPLATFORM} | cut -d'/' -f2 | sed 's/amd/x/') && \
mkdir -p /usr/lib-pdfium && cd /usr/lib-pdfium && curl -L https://github.com/bblanchon/pdfium-binaries/releases/latest/download/pdfium-linux-${ARCH}.tgz | tar -xz \
&& cp lib/libpdfium.so /usr/local/lib/libpdfium.so && ldconfig

COPY --link ./include/header.h /usr/lib-pdfium/include/header.h

RUN echo "#define FFI_LIB \"libpdfium.so\"" > /usr/lib-pdfium/include/pdfium.h && gcc -P -E /usr/lib-pdfium/include/header.h >> /usr/lib-pdfium/include/pdfium.h

WORKDIR /usr/php-pdfium
FROM base AS compiled

COPY ./lib/pdfium /usr/lib-pdfium/

COPY ./include/header.h /usr/lib-pdfium/include/header.h
RUN echo "#define FFI_LIB \"libpdfium.so\"" > /usr/lib-pdfium/include/pdfium.h && gcc -P -E /usr/lib-pdfium/include/header.h >> /usr/lib-pdfium/include/pdfium.h

RUN cp /usr/lib-pdfium/lib/libpdfium.so /usr/local/lib/libpdfium.so && ldconfig

FROM base AS ci
FROM precompiled AS ci

COPY --from=composer /usr/bin/composer /usr/bin/composer
RUN apt-get update && apt-get install zip -y
Expand Down