diff --git a/Makefile b/Makefile index 877b73d1e..0f27d4a1a 100644 --- a/Makefile +++ b/Makefile @@ -32,14 +32,20 @@ HOSTCXX:=g++ HOSTAR:=ar # Base CFLAGS, without arch. We'll need it for luajit, because its Makefiles do some tricky stuff to differentiate HOST/TARGET -BASE_CFLAGS:=-O2 -ffast-math -pipe -fomit-frame-pointer -fno-stack-protector -U_FORTIFY_SOURCE +BASE_CFLAGS:=-O2 -ffast-math -pipe -fomit-frame-pointer # Use this for debugging: #BASE_CFLAGS:=-O0 -g -ARM_ARCH:=-march=armv6j -mtune=arm1136jf-s -mfpu=vfp +# Misc GCC tricks to ensure backward compatibility with the K2, even when using a fairly recent TC (Linaro/MG). +# NOTE: -mno-unaligned-access is needed for TC based on Linaro 4.6/4.7 or GCC 4.7, or weird crap happens on FW 2.x. We unfortunately can't set it by default, since it's a new flag. +# A possible workaround would be to set the alignment trap to fixup (echo 2 > /proc/cpu/alignment) in the launch script, but that's terribly ugly, and might severly nerf performance... +# That said, MG 2012.03 is still using GCC 4.6.3, so we're good ;). +ARM_BACKWARD_COMPAT_CFLAGS:=-fno-stack-protector -U_FORTIFY_SOURCE -D_GNU_SOURCE -fno-finite-math-only +ARM_BACKWARD_COMPAT_CXXFLAGS:=-fno-use-cxa-atexit +ARM_ARCH:=-march=armv6j -mtune=arm1136jf-s -mfpu=vfp -mfloat-abi=softfp -marm HOST_ARCH:=-march=native HOSTCFLAGS:=$(HOST_ARCH) $(BASE_CFLAGS) CFLAGS:=$(BASE_CFLAGS) -CXXFLAGS:=$(BASE_CFLAGS) -fno-use-cxa-atexit +CXXFLAGS:=$(BASE_CFLAGS) LDFLAGS:=-Wl,-O1 -Wl,--as-needed DYNAMICLIBSTDCPP:=-lstdc++ @@ -68,8 +74,8 @@ ifdef EMULATE_READER CFLAGS+= $(HOST_ARCH) CXXFLAGS+= $(HOST_ARCH) else - CFLAGS+= $(ARM_ARCH) - CXXFLAGS+= $(ARM_ARCH) + CFLAGS+= $(ARM_ARCH) $(ARM_BACKWARD_COMPAT_CFLAGS) + CXXFLAGS+= $(ARM_ARCH) $(ARM_BACKWARD_COMPAT_CFLAGS) $(ARM_BACKWARD_COMPAT_CXXFLAGS) endif # standard includes @@ -126,7 +132,10 @@ kpdfview: kpdfview.o einkfb.o pdf.o blitbuffer.o drawcontext.o input.o $(POPENNS $(CRENGINELIBS) \ $(STATICLIBSTDCPP) \ $(LDFLAGS) \ - -o $@ -lm -ldl -lpthread $(EMU_LDFLAGS) $(DYNAMICLIBSTDCPP) + -o $@ \ + -lm -ldl -lpthread \ + $(EMU_LDFLAGS) \ + $(DYNAMICLIBSTDCPP) slider_watcher.o: %.o: %.c $(CC) -c $(CFLAGS) $< -o $@ @@ -184,7 +193,7 @@ clean: rm -f *.o kpdfview slider_watcher cleanthirdparty: - $(MAKE) -C $(LUADIR) CC="$(HOSTCC)" HOST_CC="$(HOSTCC) -m32" CROSS="$(CHOST)-" clean + $(MAKE) -C $(LUADIR) CC="$(HOSTCC)" CFLAGS="$(BASE_CFLAGS)" distclean $(MAKE) -C $(MUPDFDIR) build="release" clean $(MAKE) -C $(CRENGINEDIR)/thirdparty/antiword clean test -d $(CRENGINEDIR)/thirdparty/chmlib && $(MAKE) -C $(CRENGINEDIR)/thirdparty/chmlib clean || echo warn: chmlib folder not found @@ -197,12 +206,12 @@ cleanthirdparty: $(MAKE) -C $(POPENNSDIR) clean $(MUPDFDIR)/fontdump.host: - $(MAKE) -C mupdf build="release" CC="$(HOSTCC)" CFLAGS="$(HOSTCFLAGS) -I../mupdf/fitz -I../mupdf/pdf" $(MUPDFTARGET)/fontdump + CFLAGS="$(HOSTCFLAGS)" $(MAKE) -C mupdf build="release" CC="$(HOSTCC)" $(MUPDFTARGET)/fontdump cp -a $(MUPDFLIBDIR)/fontdump $(MUPDFDIR)/fontdump.host $(MAKE) -C mupdf clean $(MUPDFDIR)/cmapdump.host: - $(MAKE) -C mupdf build="release" CC="$(HOSTCC)" CFLAGS="$(HOSTCFLAGS) -I../mupdf/fitz -I../mupdf/pdf" $(MUPDFTARGET)/cmapdump + CFLAGS="$(HOSTCFLAGS)" $(MAKE) -C mupdf build="release" CC="$(HOSTCC)" $(MUPDFTARGET)/cmapdump cp -a $(MUPDFLIBDIR)/cmapdump $(MUPDFDIR)/cmapdump.host $(MAKE) -C mupdf clean @@ -213,9 +222,9 @@ $(MUPDFLIBS) $(THIRDPARTYLIBS): $(MUPDFDIR)/cmapdump.host $(MUPDFDIR)/fontdump.h $(DJVULIBS): mkdir -p $(DJVUDIR)/build ifdef EMULATE_READER - cd $(DJVUDIR)/build && ../configure --disable-desktopfiles --disable-shared --enable-static --disable-xmltools --disable-largefile + cd $(DJVUDIR)/build && CC="$(HOSTCC)" CXX="$(HOSTCXX)" CFLAGS="$(HOSTCFLAGS)" CXXFLAGS="$(HOSTCFLAGS)" LDFLAGS="$(LDFLAGS)" ../configure --disable-desktopfiles --disable-shared --enable-static --disable-xmltools --disable-largefile else - cd $(DJVUDIR)/build && ../configure --disable-desktopfiles --disable-shared --enable-static --host=$(CHOST) --disable-xmltools --disable-largefile + cd $(DJVUDIR)/build && CC="$(CC)" CXX="$(CXX)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" ../configure --disable-desktopfiles --disable-shared --enable-static --host=$(CHOST) --disable-xmltools --disable-largefile endif $(MAKE) -C $(DJVUDIR)/build @@ -226,10 +235,10 @@ $(CRENGINELIBS): $(LUALIB): ifdef EMULATE_READER - $(MAKE) -C $(LUADIR) + $(MAKE) -C $(LUADIR) BUILDMODE=static else # To recap: build its TARGET_CC from CROSS+CC, so we need HOSTCC in CC. Build its HOST/TARGET_CFLAGS based on CFLAGS, so we need a neutral CFLAGS without arch - $(MAKE) -C $(LUADIR) CC="$(HOSTCC)" HOST_CC="$(HOSTCC) -m32" CFLAGS="$(BASE_CFLAGS)" HOST_CFLAGS="$(HOSTCFLAGS)" TARGET_CFLAGS="$(CFLAGS)" CROSS="$(CHOST)-" TARGET_FLAGS="-DLUAJIT_NO_LOG2 -DLUAJIT_NO_EXP2" + $(MAKE) -C $(LUADIR) BUILDMODE=static CC="$(HOSTCC)" HOST_CC="$(HOSTCC) -m32" CFLAGS="$(BASE_CFLAGS)" HOST_CFLAGS="$(HOSTCFLAGS)" TARGET_CFLAGS="$(CFLAGS)" CROSS="$(CHOST)-" TARGET_FLAGS="-DLUAJIT_NO_LOG2 -DLUAJIT_NO_EXP2" endif $(POPENNSLIB): diff --git a/README.md b/README.md index 4ca2e4952..ee48f0504 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ Follow these steps: * install libDjvuLibre sources into subfolder "djvulibre" * install CREngine sources into subfolder "kpvcrlib/crengine" * install LuaJit sources into subfolder "luajit-2.0" + * install popen_noshell sources into subfolder "popen-noshell" * automatically fetch thirdparty sources with Makefile: * make sure you have wget, unzip, git and svn installed @@ -58,7 +59,7 @@ Device emulation The code also features a device emulation. You need SDL headers and library for this. It allows to develop on a standard PC and saves precious development time. It might also compose the most unfriendly desktop PDF reader, depending -on your view. +on your view. If you are using Ubuntu, simply install `libsdl-dev1.2` package. diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index 2828ad1d4..1697fc0e8 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -31,9 +31,11 @@ function CreDocument:engineInit() -- we need to initialize the CRE font list local fonts = Font:getFontList() for _k, _v in ipairs(fonts) do - local ok, err = pcall(cre.registerFont, Font.fontdir..'/'.._v) - if not ok then - DEBUG(err) + if _v ~= "Dingbats.cff" and _v ~= "StandardSymL.cff" then + local ok, err = pcall(cre.registerFont, Font.fontdir..'/'.._v) + if not ok then + Debug(err) + end end end diff --git a/input.c b/input.c index d781c5b10..06e1ce785 100644 --- a/input.c +++ b/input.c @@ -43,6 +43,7 @@ #define NUM_FDS 4 int inputfds[4] = { -1, -1, -1, -1 }; +#ifndef EMULATE_READER pid_t slider_pid = -1; struct popen_noshell_pass_to_pclose pclose_arg; @@ -54,6 +55,7 @@ void slider_handler(int sig) kill(pclose_arg.pid, SIGINT); } } +#endif int findFreeFdSlot() { int i;