diff --git a/.gitignore b/.gitignore index fe4454f7..69d6f85e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,21 +3,8 @@ a.out.wasm a.out.js.mem a.out a.wasm -src/.deps/ src/WebIDLGrammar.pkl src/parser.out -src/Makefile -src/Makefile.in -src/aclocal.m4 -src/autom4te.cache/ -src/compile -src/config.log -src/config.status -src/configure -src/configure~ -src/depcomp -src/install-sh -src/missing lib/expat/xmlwf/xmlwf dist .libs/ diff --git a/Dockerfile b/Dockerfile index fd01e480..4f9592d7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM emscripten/emsdk:2.0.20 +FROM docker.io/emscripten/emsdk:2.0.34 RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ diff --git a/Makefile b/Makefile index 553633fd..91148b8a 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,9 @@ BASE_DIR:=$(dir $(realpath $(firstword $(MAKEFILE_LIST)))) DIST_DIR:=$(BASE_DIR)dist/libraries -GLOBAL_CFLAGS:=-O3 -s ENVIRONMENT=web,webview +GLOBAL_CFLAGS:=-O3 +GLOBAL_LDFLAGS:=-s ENVIRONMENT=web,webview,worker -s NO_EXIT_RUNTIME=1 +export LDFLAGS = $(GLOBAL_LDFLAGS) all: subtitleoctopus @@ -24,10 +26,7 @@ $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure CFLAGS=" \ -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ - -s NO_FILESYSTEM=1 \ - -s NO_EXIT_RUNTIME=1 \ -DFRIBIDI_ENTRY=extern \ - -s MODULARIZE=1 \ " \ --prefix="$(DIST_DIR)" \ --host=x86-none-linux \ @@ -50,9 +49,6 @@ $(DIST_DIR)/lib/libexpat.a: build/lib/expat/configured -DCMAKE_C_FLAGS=" \ -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ - -s NO_FILESYSTEM=1 \ - -s NO_EXIT_RUNTIME=1 \ - -s MODULARIZE=1 \ " \ -DCMAKE_INSTALL_PREFIX=$(DIST_DIR) \ -DEXPAT_BUILD_DOCS=off \ @@ -112,9 +108,6 @@ build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotli CFLAGS=" \ -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ - -s NO_FILESYSTEM=1 \ - -s NO_EXIT_RUNTIME=1 \ - -s MODULARIZE=1 \ " \ --prefix="$$(pwd)/dist_hb" \ --host=x86-none-linux \ @@ -145,20 +138,13 @@ $(DIST_DIR)/lib/libharfbuzz.a: build/lib/freetype/build_hb/dist_hb/lib/libfreety CFLAGS=" \ -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ - -s NO_FILESYSTEM=1 \ -DHB_NO_MT \ - -s NO_EXIT_RUNTIME=1 \ - -s MODULARIZE=1 \ " \ CXXFLAGS=" \ -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ - -s NO_FILESYSTEM=1 \ -DHB_NO_MT \ - -s NO_EXIT_RUNTIME=1 \ - -s MODULARIZE=1 \ " \ - LDFLAGS="" \ --prefix="$(DIST_DIR)" \ --host=x86-none-linux \ --build=x86_64 \ @@ -178,14 +164,11 @@ $(DIST_DIR)/lib/libharfbuzz.a: build/lib/freetype/build_hb/dist_hb/lib/libfreety # Freetype with Harfbuzz $(DIST_DIR)/lib/libfreetype.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/libbrotlidec.a cd build/lib/freetype && \ - EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \ + EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig:$(BASE_DIR)build/lib/freetype/build_hb/dist_hb/lib/pkgconfig \ emconfigure ./configure \ CFLAGS=" \ -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ - -s NO_FILESYSTEM=1 \ - -s NO_EXIT_RUNTIME=1 \ - -s MODULARIZE=1 \ " \ --prefix="$(DIST_DIR)" \ --host=x86-none-linux \ @@ -217,8 +200,6 @@ $(DIST_DIR)/lib/libfontconfig.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/l -s USE_PTHREADS=0 \ -DEMSCRIPTEN \ $(GLOBAL_CFLAGS) \ - -s NO_EXIT_RUNTIME=1 \ - -s MODULARIZE=1 \ " \ --prefix="$(DIST_DIR)" \ --host=x86-none-linux \ @@ -247,8 +228,6 @@ $(DIST_DIR)/lib/libass.a: $(DIST_DIR)/lib/libfontconfig.a $(DIST_DIR)/lib/libhar CFLAGS=" \ -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ - -s NO_EXIT_RUNTIME=1 \ - -s MODULARIZE=1 \ " \ --prefix="$(DIST_DIR)" \ --host=x86-none-linux \ @@ -274,28 +253,17 @@ OCTP_DEPS = \ $(DIST_DIR)/lib/libfontconfig.a \ $(DIST_DIR)/lib/libass.a -# Require a patch to fix some errors -src/SubOctpInterface.cpp: src/SubtitleOctopus.idl - cd src && \ - python3 ../build/webidl_binder.py SubtitleOctopus.idl SubOctpInterface - -src/Makefile: src/SubOctpInterface.cpp - cd src && \ - autoreconf -fi && \ - EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \ - emconfigure ./configure --host=x86-none-linux --build=x86_64 CFLAGS="$(GLOBAL_CFLAGS)" - -src/subtitles-octopus-worker.bc: $(OCTP_DEPS) src/Makefile src/SubtitleOctopus.cpp src/SubOctpInterface.cpp - cd src && \ - emmake make -j8 && \ - mv subtitlesoctopus.bc subtitles-octopus-worker.bc +src/subtitles-octopus-worker.bc: $(OCTP_DEPS) all-src +.PHONY: all-src +all-src: + PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \ + $(MAKE) -C src all # Dist Files EMCC_COMMON_ARGS = \ - $(GLOBAL_CFLAGS) \ + $(GLOBAL_LDFLAGS) \ -s EXPORTED_FUNCTIONS="['_main', '_malloc']" \ -s EXPORTED_RUNTIME_METHODS="['ccall', 'cwrap', 'getValue', 'FS_createPreloadedFile', 'FS_createPath']" \ - -s NO_EXIT_RUNTIME=1 \ --use-preload-plugins \ --preload-file assets/default.woff2 \ --preload-file assets/fonts.conf \ diff --git a/build/patches/fontconfig/0002-disable-pthreads.patch b/build/patches/fontconfig/0001-disable-pthreads.patch similarity index 90% rename from build/patches/fontconfig/0002-disable-pthreads.patch rename to build/patches/fontconfig/0001-disable-pthreads.patch index 7e529378..455eb4e7 100644 --- a/build/patches/fontconfig/0002-disable-pthreads.patch +++ b/build/patches/fontconfig/0001-disable-pthreads.patch @@ -1,8 +1,8 @@ diff --git a/configure.ac b/configure.ac -index 394c281..1cb2f74 100644 +index 26b974a..b73d132 100644 --- a/configure.ac +++ b/configure.ac -@@ -681,22 +681,8 @@ if $fc_cv_have_solaris_atomic_ops; then +@@ -712,22 +712,8 @@ if $fc_cv_have_solaris_atomic_ops; then AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations]) fi diff --git a/build/patches/fontconfig/0003-fix-fcstats-emscripten.patch b/build/patches/fontconfig/0003-fix-fcstats-emscripten.patch deleted file mode 100644 index c55e4f27..00000000 --- a/build/patches/fontconfig/0003-fix-fcstats-emscripten.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff --git a/src/fcstat.c b/src/fcstat.c -index 5aa1643..2a5ae3b 100644 ---- a/src/fcstat.c -+++ b/src/fcstat.c -@@ -398,6 +398,8 @@ FcFStatFs (int fd, FcStatFS *statb) - } - - return ret; -+# elif EMSCRIPTEN -+ return ret; - # else - # error "BUG: No way to figure out with fstatfs()" - # endif -@@ -418,17 +420,24 @@ FcFStatFs (int fd, FcStatFS *statb) - FcBool - FcIsFsMmapSafe (int fd) - { -+#ifdef EMSCRIPTEN -+ return FcFalse; -+#else - FcStatFS statb; - - if (FcFStatFs (fd, &statb) < 0) - return FcTrue; - - return !statb.is_remote_fs; -+#endif - } - - FcBool - FcIsFsMtimeBroken (const FcChar8 *dir) - { -+#ifdef EMSCRIPTEN -+ return FcFalse; -+#else - int fd = FcOpen ((const char *) dir, O_RDONLY); - - if (fd != -1) -@@ -444,6 +453,7 @@ FcIsFsMtimeBroken (const FcChar8 *dir) - } - - return FcFalse; -+#endif - } - - #define __fcstat__ diff --git a/build/patches/freetype/0001-disable-exports.patch b/build/patches/freetype/0001-disable-exports.patch deleted file mode 100644 index 77867572..00000000 --- a/build/patches/freetype/0001-disable-exports.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/builds/freetype.mk b/builds/freetype.mk -index 111483069..734c3139a 100644 ---- a/builds/freetype.mk -+++ b/builds/freetype.mk -@@ -169,7 +169,7 @@ FT_CFLAGS = $(CPPFLAGS) \ - - # Include the `exports' rules file. - # --include $(TOP_DIR)/builds/exports.mk -+#include $(TOP_DIR)/builds/exports.mk - - - # Initialize the list of objects. -diff --git a/builds/unix/unix-cc.in b/builds/unix/unix-cc.in -index 5675866ea..5e77e3eff 100644 ---- a/builds/unix/unix-cc.in -+++ b/builds/unix/unix-cc.in -@@ -115,7 +115,6 @@ CCexe := $(CCraw_build) # used to compile `apinames' only - # - LINK_LIBRARY = $(LIBTOOL) --mode=link $(CCraw) -o $@ $(OBJECTS_LIST) \ - -rpath $(libdir) -version-info $(version_info) \ -- $(LDFLAGS) -no-undefined \ -- -export-symbols $(EXPORTS_LIST) -+ $(LDFLAGS) -no-undefined - - # EOF diff --git a/build/patches/harfbuzz/0002-disable-dependency-build.patch b/build/patches/harfbuzz/0002-disable-dependency-build.patch deleted file mode 100644 index 18834911..00000000 --- a/build/patches/harfbuzz/0002-disable-dependency-build.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff --git a/src/harfbuzz.pc.in b/src/harfbuzz.pc.in -index 661251c2..394f2735 100644 ---- a/src/harfbuzz.pc.in -+++ b/src/harfbuzz.pc.in -@@ -9,5 +9,4 @@ Version: %VERSION% - - Libs: -L${libdir} -lharfbuzz - Libs.private: -lm %libs_private% --Requires.private: %requires_private% - Cflags: -I${includedir}/harfbuzz diff --git a/build/patches/libass/.gitkeep b/build/patches/libass/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/fontconfig b/lib/fontconfig index e291fda7..d37f9722 160000 --- a/lib/fontconfig +++ b/lib/fontconfig @@ -1 +1 @@ -Subproject commit e291fda7d42e5d64379555097a066d9c2c4efce3 +Subproject commit d37f97223a4715176c0889e91685dc796457e25f diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 00000000..d1dc2509 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,22 @@ +# If needed, override the following variables via `make VARNAME=VAL ...` +# Note: we only compile and not(!) link here, thus -c +CXX = em++ -c +CXXFLAGS = -O3 -g4 +LIBASS_CXXFLAGS = $(shell pkg-config --static --cflags "libass >= 0.14.0") +LOCAL_CXXFLAGS = -Wall -Wno-deprecated $(LIBASS_CXXFLAGS) + +all: subtitles-octopus-worker.bc + +SubOctpInterface.cpp: SubtitleOctopus.idl ../build/webidl_binder.py + @# Our version of WebIDL contains JSO-specific patches + python3 ../build/webidl_binder.py SubtitleOctopus.idl SubOctpInterface + +subtitles-octopus-worker.bc: SubtitleOctopus.cpp libass.cpp SubOctpInterface.cpp + @# All later dependencies are already included into the first by CPP + $(CXX) $(LOCAL_CXXFLAGS) $(CXXFLAGS) -o $@ $< + +clean: + rm -f subtitles-octopus-worker.bc + rm -f SubOctpInterface.cpp WebIDLGrammar.pkl parser.out + +.PHONY: all clean diff --git a/src/Makefile.am b/src/Makefile.am deleted file mode 100644 index e9011e95..00000000 --- a/src/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -AM_CXXFLAGS = -Wall - -# Fix for Emscripten 2 build llvm bitcode instead of js -AM_LDFLAGS = -r -EXEEXT = .bc - -noinst_PROGRAMS = subtitlesoctopus -subtitlesoctopus_SOURCES = SubtitleOctopus.cpp diff --git a/src/configure.ac b/src/configure.ac deleted file mode 100644 index 94c0d1bc..00000000 --- a/src/configure.ac +++ /dev/null @@ -1,20 +0,0 @@ -AC_INIT([subtitlesoctopus], [1.1]) -AM_INIT_AUTOMAKE([-Wall -Werror foreign]) -AC_CONFIG_FILES([Makefile]) -AC_PROG_CXX - -AC_HEADER_STDC -AC_HEADER_STDBOOL -AC_CHECK_HEADERS([stdint.h unistd.h iconv.h]) - -PKG_CHECK_MODULES([LIBASS], libass >= 0.9.1,[],[ - AC_MSG_WARN([libass not found via pkg-config]) - #LIBASS_LIBS="-lass" -]) - -pkg_requires="libass >= 0.9.1" - -AC_SUBST([LIBASS_CXXFLAGS]) -AC_SUBST([LIBASS_LIBS]) - -AC_OUTPUT