Skip to content

Commit df45a82

Browse files
committed
Build script: add -s for static build (WIP)
This is a working progress and doesn't produce a valid build yet. Note that I don't plan to include static libs in the weekly builds. The static builds will only by available via the build script. See: #36, #84, #180, #201 Also relevant: #219 The test build doesn't currently work and returns errors like: ``` /usr/bin/ld: unknown architecture of input file `/data/pdfium-binaries/staging/lib/libpdfium.a(fpdf_formfill.o)' is incompatible with i386:x86-64 output ``` I managed to make it pass by installing `lld` and passing `CMAKE_EXE_LINKER_FLAGS=-Wl,-m,elf_x86_64,-fuse-ld=lld`, but the executable crashed, so I prefered not to include this change.
1 parent 5000bc7 commit df45a82

5 files changed

Lines changed: 91 additions & 8 deletions

File tree

build.sh

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ Options:
2424
-b branch = Chromium branch (default=main)
2525
-g 0-10 = Go immediately to step n (default=0)
2626
-d = debug build
27+
-s = static build (experimental)
2728
-j = enable v8"
2829
exit
2930
fi
3031

31-
while getopts "b:djmg:" OPTION
32+
while getopts "b:djmsg:" OPTION
3233
do
3334
case $OPTION in
3435
b)
@@ -43,6 +44,10 @@ do
4344
export PDFium_ENABLE_V8=true
4445
;;
4546

47+
s)
48+
export PDFium_BUILD_TYPE="static"
49+
;;
50+
4651
g)
4752
START_STEP="$OPTARG"
4853
;;

patches/PDFiumStaticConfig.cmake

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# PDFium Package Configuration for CMake
2+
#
3+
# To use PDFium in your CMake project:
4+
#
5+
# 1. set the environment variable PDFium_DIR to the folder containing this file.
6+
# 2. in your CMakeLists.txt, add
7+
# find_package(PDFium)
8+
# 3. then link your executable with PDFium
9+
# target_link_libraries(my_exe pdfium)
10+
11+
include(FindPackageHandleStandardArgs)
12+
13+
find_path(PDFium_INCLUDE_DIR
14+
NAMES "fpdfview.h"
15+
PATHS "${CMAKE_CURRENT_LIST_DIR}"
16+
PATH_SUFFIXES "include"
17+
)
18+
19+
set(PDFium_VERSION "#VERSION#")
20+
21+
if(WIN32)
22+
find_file(PDFium_LIBRARY
23+
NAMES "pdfium.lib"
24+
PATHS "${CMAKE_CURRENT_LIST_DIR}"
25+
PATH_SUFFIXES "lib")
26+
27+
add_library(pdfium STATIC IMPORTED)
28+
set_target_properties(pdfium
29+
PROPERTIES
30+
IMPORTED_LOCATION "${PDFium_LIBRARY}"
31+
INTERFACE_INCLUDE_DIRECTORIES "${PDFium_INCLUDE_DIR};${PDFium_INCLUDE_DIR}/cpp"
32+
)
33+
34+
find_package_handle_standard_args(PDFium
35+
REQUIRED_VARS PDFium_LIBRARY PDFium_INCLUDE_DIR
36+
VERSION_VAR PDFium_VERSION
37+
)
38+
else()
39+
find_library(PDFium_LIBRARY
40+
NAMES "pdfium"
41+
PATHS "${CMAKE_CURRENT_LIST_DIR}"
42+
PATH_SUFFIXES "lib")
43+
44+
add_library(pdfium STATIC IMPORTED)
45+
set_target_properties(pdfium
46+
PROPERTIES
47+
IMPORTED_LOCATION "${PDFium_LIBRARY}"
48+
INTERFACE_INCLUDE_DIRECTORIES "${PDFium_INCLUDE_DIR};${PDFium_INCLUDE_DIR}/cpp"
49+
)
50+
51+
find_package_handle_standard_args(PDFium
52+
REQUIRED_VARS PDFium_LIBRARY PDFium_INCLUDE_DIR
53+
VERSION_VAR PDFium_VERSION
54+
)
55+
endif()

steps/03-patch.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ OS="${PDFium_TARGET_OS:?}"
66
TARGET_CPU="${PDFium_TARGET_CPU:?}"
77
TARGET_ENVIRONMENT="${PDFium_TARGET_ENVIRONMENT:-}"
88
ENABLE_V8=${PDFium_ENABLE_V8:-false}
9+
BUILD_TYPE=${PDFium_BUILD_TYPE:-shared}
910

1011
apply_patch() {
1112
local FILE="$1"
@@ -15,7 +16,7 @@ apply_patch() {
1516

1617
pushd "${SOURCE}"
1718

18-
[ "$OS" != "emscripten" ] && apply_patch "$PATCHES/shared_library.patch"
19+
[ "$BUILD_TYPE" == "shared" ] && [ "$OS" != "emscripten" ] && apply_patch "$PATCHES/shared_library.patch"
1920
apply_patch "$PATCHES/public_headers.patch"
2021

2122
[ "$ENABLE_V8" == "true" ] && apply_patch "$PATCHES/v8/pdfium.patch"

steps/05-configure.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ TARGET_CPU=${PDFium_TARGET_CPU:?}
77
TARGET_ENVIRONMENT=${PDFium_TARGET_ENVIRONMENT:-}
88
ENABLE_V8=${PDFium_ENABLE_V8:-false}
99
IS_DEBUG=${PDFium_IS_DEBUG:-false}
10+
BUILD_TYPE=${PDFium_BUILD_TYPE:-shared}
1011

1112
mkdir -p "$BUILD"
1213

@@ -26,6 +27,10 @@ mkdir -p "$BUILD"
2627
echo "v8_enable_i18n_support = false"
2728
fi
2829

30+
if [ "$BUILD_TYPE" == "static" ]; then
31+
echo "pdf_is_complete_lib = true"
32+
fi
33+
2934
case "$OS" in
3035
android)
3136
echo "clang_use_chrome_plugins = false"

steps/07-stage.sh

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ IS_DEBUG=${PDFium_IS_DEBUG:-false}
44
OS=${PDFium_TARGET_OS:?}
55
VERSION=${PDFium_VERSION:-}
66
PATCHES="$PWD/patches"
7+
BUILD_TYPE=${PDFium_BUILD_TYPE:-shared}
78

89
SOURCE=${PDFium_SOURCE_DIR:-pdfium}
910
BUILD=${PDFium_BUILD_DIR:-pdfium/out}
@@ -16,7 +17,15 @@ mkdir -p "$STAGING"
1617
rm -rf "$STAGING"/*
1718
mkdir -p "$STAGING_LIB"
1819

19-
sed "s/#VERSION#/${VERSION:-0.0.0.0}/" <"$PATCHES/PDFiumConfig.cmake" >"$STAGING/PDFiumConfig.cmake"
20+
case "$BUILD_TYPE" in
21+
shared)
22+
CMAKE_CONFIG_FILE="PDFiumConfig.cmake"
23+
;;
24+
static)
25+
CMAKE_CONFIG_FILE="PDFiumStaticConfig.cmake"
26+
;;
27+
esac
28+
sed "s/#VERSION#/${VERSION:-0.0.0.0}/" <"$PATCHES/$CMAKE_CONFIG_FILE" >"$STAGING/PDFiumConfig.cmake"
2029

2130
cp LICENSE "$STAGING"
2231
cat >>"$STAGING/LICENSE" <<END
@@ -30,29 +39,37 @@ rm -f "$STAGING/include/DEPS"
3039
rm -f "$STAGING/include/README"
3140
rm -f "$STAGING/include/PRESUBMIT.py"
3241

33-
case "$OS" in
34-
android|linux)
42+
case "$OS-$BUILD_TYPE" in
43+
android-shared|linux-shared)
3544
mv "$BUILD/libpdfium.so" "$STAGING_LIB"
3645
;;
3746

38-
mac|ios)
47+
android-static|linux-static|mac-static|ios-static)
48+
mv "$BUILD/obj/libpdfium.a" "$STAGING_LIB"
49+
;;
50+
51+
mac-shared|ios-shared)
3952
mv "$BUILD/libpdfium.dylib" "$STAGING_LIB"
4053
;;
4154

42-
emscripten)
55+
emscripten-*)
4356
mv "$BUILD/pdfium.html" "$STAGING_LIB"
4457
mv "$BUILD/pdfium.js" "$STAGING_LIB"
4558
mv "$BUILD/pdfium.wasm" "$STAGING_LIB"
4659
rm -rf "$STAGING/include/cpp"
4760
rm "$STAGING/PDFiumConfig.cmake"
4861
;;
4962

50-
win)
63+
win-shared)
5164
mv "$BUILD/pdfium.dll.lib" "$STAGING_LIB"
5265
mkdir -p "$STAGING_BIN"
5366
mv "$BUILD/pdfium.dll" "$STAGING_BIN"
5467
[ "$IS_DEBUG" == "true" ] && mv "$BUILD/pdfium.dll.pdb" "$STAGING_BIN"
5568
;;
69+
70+
win-shared)
71+
mv "$BUILD/obj/pdfium.lib" "$STAGING_LIB"
72+
;;
5673
esac
5774

5875
if [ -n "$VERSION" ]; then

0 commit comments

Comments
 (0)