Skip to content

Commit

Permalink
Disable ARM ASM in MuPDF.
Browse files Browse the repository at this point in the history
It's potentially crashy, and impossible to debug.
c.f., https://bugs.ghostscript.com/show_bug.cgi?id=698879
      koreader#816

Also, honor debug builds in MuPDF (as it enforces CFLAGS).
  • Loading branch information
NiLuJe committed Feb 16, 2019
1 parent ce93b34 commit 63ae8d8
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 5 deletions.
19 changes: 14 additions & 5 deletions thirdparty/mupdf/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@ enable_language(C)
assert_var_defined(HOSTCFLAGS)
assert_var_defined(HOSTCC)
assert_var_defined(OS)
set(BUILD_CMD_GENERATE sh -c "env CFLAGS=\"${HOSTCFLAGS}\" $(MAKE) -j${PARALLEL_JOBS} generate build=\"release\" CC=\"${HOSTCC}\" verbose=1")
if($ENV{KODEBUG})
set(MUPDF_BUILD_TYPE "debug")
else()
set(MUPDF_BUILD_TYPE "release")
endif()
set(BUILD_CMD_GENERATE sh -c "env CFLAGS=\"${HOSTCFLAGS}\" $(MAKE) -j${PARALLEL_JOBS} generate build=\"${MUPDF_BUILD_TYPE}\" CC=\"${HOSTCC}\" verbose=\"yes\"")

assert_var_defined(LDFLAGS)
assert_var_defined(XCFLAGS)
Expand All @@ -20,8 +25,8 @@ assert_var_defined(XCFLAGS)
set(XCFLAGS "${XCFLAGS} -DFZ_PLOTTERS_CMYK=0 -DFZ_ENABLE_JS=0")
set(STATIC_BUILD_CMD "$(MAKE) -j${PARALLEL_JOBS}")
set(STATIC_BUILD_CMD "${STATIC_BUILD_CMD} LDFLAGS=\"${LDFLAGS}\" XCFLAGS=\"${XCFLAGS}\"")
set(STATIC_BUILD_CMD "${STATIC_BUILD_CMD} CC=\"${CC}\" CXX=\"${CXX}\" AR=\"${AR}\" build=\"release\" MUDRAW= MUTOOL= CURL_LIB= OS=${OS}")
set(STATIC_BUILD_CMD "${STATIC_BUILD_CMD} verbose=1 FREETYPE_DIR=nonexisting JPEG_DIR=nonexisting ZLIB_DIR=nonexisting CROSSCOMPILE=yes")
set(STATIC_BUILD_CMD "${STATIC_BUILD_CMD} CC=\"${CC}\" CXX=\"${CXX}\" AR=\"${AR}\" build=\"${MUPDF_BUILD_TYPE}\" MUDRAW= MUTOOL= CURL_LIB= OS=${OS}")
set(STATIC_BUILD_CMD "${STATIC_BUILD_CMD} verbose=\"yes\" FREETYPE_DIR=nonexisting JPEG_DIR=nonexisting ZLIB_DIR=nonexisting CROSSCOMPILE=\"yes\"")
set(STATIC_BUILD_CMD sh -c "${STATIC_BUILD_CMD} third libs")

# by default, mupdf compiles to a static library:
Expand All @@ -46,7 +51,7 @@ else()
set(LINK_OPTS "${LINK_OPTS} -Wl,--whole-archive ${MUPDF_LIB_STATIC}")
set(LINK_OPTS "${LINK_OPTS} -Wl,--no-whole-archive ${MUPDF_THIRDPARTY_LIBS}")
set(LINK_OPTS "${LINK_OPTS} -Wl,-soname=${MUPDF_SONAME}")
set(LINK_OPTS "${LINK_OPTS} build/release/libmupdfthird.a")
set(LINK_OPTS "${LINK_OPTS} build/${MUPDF_BUILD_TYPE}/libmupdfthird.a")
endif()
set(SHARED_BUILD_STR "${CC} -shared ${CFLAGS} ${LINK_OPTS} ${AES_LIB} ${ZLIB} ${JPEG_LIB} ${FREETYPE_LIB} -o ${MUPDF_LIB} -lm")

Expand All @@ -62,6 +67,10 @@ set(PATCH_CMD1 sh -c "patch -N -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/external_fonts.
set(PATCH_CMD2 sh -c "patch -N -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/encrypted_zip.patch || true")
# use libjpeg as a shared library
set(PATCH_CMD3 sh -c "patch -N -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/libjpeg_shared.patch || true")
# Disable potentially crashy ARM ASM (it's 7 years old, and hell to debug)
# NOTE: There's also a few ARCH_UNALIGNED_OK checks, but we never did pass that define.
# (FWIW, we *could*, on anything not kindle-legacy).
set(PATCH_CMD4 sh -c "patch -N -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/no_arm_asm.patch || true")

# TODO: ignore shared git submodules built outside of mupdf by ourselves
# https://git.ghostscript.com/mupdf.git is slow, so we use the official mirror on GitHub
Expand All @@ -78,7 +87,7 @@ ExternalProject_Add(
${PROJECT_NAME}
DOWNLOAD_COMMAND ${CMAKE_COMMAND} -P ${GIT_CLONE_SCRIPT_FILENAME}
BUILD_IN_SOURCE 1
PATCH_COMMAND COMMAND ${PATCH_CMD1} COMMAND ${PATCH_CMD2} COMMAND ${PATCH_CMD3}
PATCH_COMMAND COMMAND ${PATCH_CMD1} COMMAND ${PATCH_CMD2} COMMAND ${PATCH_CMD3} COMMAND ${PATCH_CMD4}
# skip configure
CONFIGURE_COMMAND ""
BUILD_COMMAND ${BUILD_CMD_GENERATE} COMMAND ${STATIC_BUILD_CMD} COMMAND ${SHARED_BUILD_CMD}
Expand Down
18 changes: 18 additions & 0 deletions thirdparty/mupdf/no_arm_asm.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
diff --git a/include/mupdf/fitz/system.h b/include/mupdf/fitz/system.h
index c480bd7c..8190fc36 100644
--- a/include/mupdf/fitz/system.h
+++ b/include/mupdf/fitz/system.h
@@ -47,11 +47,13 @@ typedef unsigned __int64 uint64_t;
Spot architectures where we have optimisations.
*/

+/*
#if defined(__arm__) || defined(__thumb__)
#ifndef ARCH_ARM
#define ARCH_ARM
#endif
#endif
+*/

/*
Some differences in libc can be smoothed over

0 comments on commit 63ae8d8

Please sign in to comment.