From f8ea6aaafabdee76405859ec1dcb1858c88b1835 Mon Sep 17 00:00:00 2001 From: Oneric Date: Fri, 1 Apr 2022 20:39:44 +0200 Subject: [PATCH 01/20] src/make: suppress deprecation warnings We knowingly expose deprecated API. Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/b2fd3e7ecb80277853606918348e287ffa044f64 --- src/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.am b/src/Makefile.am index e9011e95..d02fb099 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,4 @@ -AM_CXXFLAGS = -Wall +AM_CXXFLAGS = -Wall -Wno-deprecated # Fix for Emscripten 2 build llvm bitcode instead of js AM_LDFLAGS = -r From 6f3e5c322ce1d82ea0f1ac0f1a5d90c5de91daa4 Mon Sep 17 00:00:00 2001 From: Oneric Date: Mon, 4 Apr 2022 19:02:45 +0200 Subject: [PATCH 02/20] src: use a custom Makefile We are bound to one toolchain and most results of the config-time checks were ignored anyway. This is more concise and doesn't require a configuration step. Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/25bd9261ab114dcb6fe6163998ee3fb4d3d33dd1 --- .gitignore | 13 ------------- Makefile | 20 +++++--------------- src/Makefile | 21 +++++++++++++++++++++ src/Makefile.am | 8 -------- src/configure.ac | 20 -------------------- 5 files changed, 26 insertions(+), 56 deletions(-) create mode 100644 src/Makefile delete mode 100644 src/Makefile.am delete mode 100644 src/configure.ac 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/Makefile b/Makefile index e0ff6a86..7782acfd 100644 --- a/Makefile +++ b/Makefile @@ -255,21 +255,11 @@ 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 = \ diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 00000000..84917f57 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,21 @@ +# If needed, override the following variables via `make VARNAME=VAL ...` +CXX = em++ -r +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 d02fb099..00000000 --- a/src/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -AM_CXXFLAGS = -Wall -Wno-deprecated - -# 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 From 20d39b3be6f7ce0f0873650d42a642565851fcd7 Mon Sep 17 00:00:00 2001 From: Oneric Date: Thu, 7 Apr 2022 19:04:06 +0200 Subject: [PATCH 03/20] src/make: use -c to compile instead of -r The build currently warns about building an executable with an object-file extension and recommends to use -c, -shared or -r eventhough we already use -r. I'm not sure what -r is supposed to do, but -c only compiles and not links the input which should be exactly what we want here and using -c gets rid of the warning without any apparent negative effects. Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/3ce06434407e7d1757d618a21224dfd317ad788a --- src/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 84917f57..d1dc2509 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,5 +1,6 @@ # If needed, override the following variables via `make VARNAME=VAL ...` -CXX = em++ -r +# 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) From 991ce0a05f505ed191d9df2d41f5ad0ded0fff64 Mon Sep 17 00:00:00 2001 From: Oneric Date: Fri, 27 May 2022 17:17:02 +0200 Subject: [PATCH 04/20] make: mark non-file targets as .PHONY Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/2348874632e5eaaa60e7621417570dbec4917585 --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7782acfd..02fea48c 100644 --- a/Makefile +++ b/Makefile @@ -9,9 +9,10 @@ GLOBAL_LDFLAGS:=-O3 -s ENVIRONMENT=web,webview,worker -s NO_EXIT_RUNTIME=1 export LDFLAGS = $(GLOBAL_LDFLAGS) all: subtitleoctopus - subtitleoctopus: dist +.PHONY: all subtitleoctopus dist + include functions.mk # Fribidi @@ -367,3 +368,5 @@ $(foreach subm, $(SUBMODULES), $(eval $(call TR_GIT_SM_RESET,$(subm)))) server: # Node http server npm i -g http-server http-server + +.PHONY: clean clean-dist clean-libs clean-octopus git-checkout git-smreset server From db2f75f366877015ffb2a6ee9504c9b2015476a0 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 21 May 2022 19:53:37 +0200 Subject: [PATCH 05/20] make: disable pthreads in global flags Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/cd33db7e4ae686b4d0de53125cb630817a7b752d --- Makefile | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 02fea48c..2717ca52 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ BASE_DIR:=$(dir $(realpath $(firstword $(MAKEFILE_LIST)))) DIST_DIR:=$(BASE_DIR)dist/libraries -GLOBAL_CFLAGS:=-O3 +GLOBAL_CFLAGS:=-O3 -s USE_PTHREADS=0 GLOBAL_LDFLAGS:=-O3 -s ENVIRONMENT=web,webview,worker -s NO_EXIT_RUNTIME=1 export LDFLAGS = $(GLOBAL_LDFLAGS) @@ -27,7 +27,6 @@ $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure cd build/lib/fribidi && \ emconfigure ./configure \ CFLAGS=" \ - -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ -DFRIBIDI_ENTRY=extern \ " \ @@ -50,7 +49,6 @@ $(DIST_DIR)/lib/libexpat.a: build/lib/expat/configured cd build/lib/expat && \ emcmake cmake \ -DCMAKE_C_FLAGS=" \ - -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ " \ -DCMAKE_INSTALL_PREFIX=$(DIST_DIR) \ @@ -109,7 +107,6 @@ build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotli EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \ emconfigure ../configure \ CFLAGS=" \ - -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ " \ --prefix="$$(pwd)/dist_hb" \ @@ -139,12 +136,10 @@ $(DIST_DIR)/lib/libharfbuzz.a: build/lib/freetype/build_hb/dist_hb/lib/libfreety 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) \ -DHB_NO_MT \ " \ CXXFLAGS=" \ - -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ -DHB_NO_MT \ " \ @@ -170,7 +165,6 @@ $(DIST_DIR)/lib/libfreetype.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/lib 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) \ " \ --prefix="$(DIST_DIR)" \ @@ -200,7 +194,6 @@ $(DIST_DIR)/lib/libfontconfig.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/l EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \ emconfigure ./configure \ CFLAGS=" \ - -s USE_PTHREADS=0 \ -DEMSCRIPTEN \ $(GLOBAL_CFLAGS) \ " \ @@ -229,7 +222,6 @@ $(DIST_DIR)/lib/libass.a: $(DIST_DIR)/lib/libfontconfig.a $(DIST_DIR)/lib/libhar EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \ emconfigure ../../../lib/libass/configure \ CFLAGS=" \ - -s USE_PTHREADS=0 \ $(GLOBAL_CFLAGS) \ " \ --prefix="$(DIST_DIR)" \ From 3a10525d503153ab69aa61c298f1990a5fe6a68c Mon Sep 17 00:00:00 2001 From: Oneric Date: Sun, 22 May 2022 21:22:56 +0200 Subject: [PATCH 06/20] make: remove no-op macro define Possibly it did something in older versions, in current ones only the compiler set __EMSCRIPTEN__ macro is used in checks. Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/e240038da7ed822d156ccd981e057ad4a96ec80e --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index 2717ca52..3d8af356 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,6 @@ $(DIST_DIR)/lib/libfontconfig.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/l EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \ emconfigure ./configure \ CFLAGS=" \ - -DEMSCRIPTEN \ $(GLOBAL_CFLAGS) \ " \ --prefix="$(DIST_DIR)" \ From 3133ff4334489fc653d4aa1bcb307c71cfbb7d77 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 28 May 2022 00:31:41 +0200 Subject: [PATCH 07/20] make: drop redundant extern for fribidi Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/1ad143424dd9b2f6fa22cdd964d45b1934e148b4 --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index 3d8af356..3ef26e53 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,6 @@ $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure emconfigure ./configure \ CFLAGS=" \ $(GLOBAL_CFLAGS) \ - -DFRIBIDI_ENTRY=extern \ " \ --prefix="$(DIST_DIR)" \ --host=x86-none-linux \ From 67fdfcb9e0b1ad7585aa9b36d44f2fa56edee0e0 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 28 May 2022 00:34:42 +0200 Subject: [PATCH 08/20] make: use regular install for brotli The last released version of brotli we use, blocks the install target when building with emscripten, which is why we currently need to manually copy files of interest to their installed location. This adds complexity and is prone to failure with future changes. Upstream no longer blocks installations with emscripten since https://github.com/google/brotli/commit/ce222e317e36aa362e83fc50c7a6226d238e03fd from 23.06.2021. We could just bump the brotli version to latest master, but then our already existing patch would need updating and from a quick look it appears as if other things changed as well which might not all be compatible with our baseline target out of the box. AN eventual new release with release notes will hopefully detail the changes in a more accessible form. As a safe option, just backport the upstream commit as another patch. We still need to normalise the static library names though. Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/ab214a6fe25a8bf8ce7d7b8637b7ebf8a53f9d19 --- Makefile | 19 ++--- ...tream_Enable-install-with-emscripten.patch | 71 +++++++++++++++++++ 2 files changed, 77 insertions(+), 13 deletions(-) create mode 100644 build/patches/brotli/0002-upstream_Enable-install-with-emscripten.patch diff --git a/Makefile b/Makefile index 3ef26e53..d86c2321 100644 --- a/Makefile +++ b/Makefile @@ -70,7 +70,8 @@ build/lib/brotli/configured: lib/brotli $(wildcard $(BASE_DIR)build/patches/brot $(foreach file, $(wildcard $(BASE_DIR)build/patches/brotli/*.patch), patch -d "$(BASE_DIR)build/lib/brotli" -Np1 -i $(file) && ) true touch build/lib/brotli/configured -build/lib/brotli/libbrotlidec.pc: build/lib/brotli/configured +$(DIST_DIR)/lib/libbrotlidec.a: $(DIST_DIR)/lib/libbrotlicommon.a +$(DIST_DIR)/lib/libbrotlicommon.a: build/lib/brotli/configured cd build/lib/brotli && \ emcmake cmake \ -DCMAKE_C_FLAGS=" \ @@ -80,19 +81,11 @@ build/lib/brotli/libbrotlidec.pc: build/lib/brotli/configured . \ && \ emmake make -j8 && \ - cp -r ./c/include $(DIST_DIR) - -$(DIST_DIR)/lib/libbrotlicommon.a: build/lib/brotli/libbrotlidec.pc - cd build/lib/brotli && \ - mkdir -p $(DIST_DIR)/lib/pkgconfig && \ - cp libbrotlicommon.pc $(DIST_DIR)/lib/pkgconfig && \ - cp libbrotlicommon-static.a $(DIST_DIR)/lib/libbrotlicommon.a + emmake make install + # Normalise static lib names + cd $(DIST_DIR)/lib/ && \ + for lib in *-static.a ; do mv "$$lib" "$${lib%-static.a}.a" ; done -$(DIST_DIR)/lib/libbrotlidec.a: build/lib/brotli/libbrotlidec.pc $(DIST_DIR)/lib/libbrotlicommon.a - cd build/lib/brotli && \ - mkdir -p $(DIST_DIR)/lib/pkgconfig && \ - cp libbrotlidec.pc $(DIST_DIR)/lib/pkgconfig && \ - cp libbrotlidec-static.a $(DIST_DIR)/lib/libbrotlidec.a # Freetype without Harfbuzz build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotlidec.a $(wildcard $(BASE_DIR)build/patches/freetype/*.patch) diff --git a/build/patches/brotli/0002-upstream_Enable-install-with-emscripten.patch b/build/patches/brotli/0002-upstream_Enable-install-with-emscripten.patch new file mode 100644 index 00000000..5bae29f4 --- /dev/null +++ b/build/patches/brotli/0002-upstream_Enable-install-with-emscripten.patch @@ -0,0 +1,71 @@ +Backported from: https://github.com/google/brotli/commit/ce222e317e36aa362e83fc50c7a6226d238e03fd +From: Dirk Lemstra +Date: Wed, 23 Jun 2021 10:12:21 +0200 +Subject: [PATCH] Enabled install when building with emscripten. (#906) + +* Enabled install when building with emscripten. + +* Also install the pkg-config files. +--- + CMakeLists.txt | 18 ++++++++---------- + 1 file changed, 8 insertions(+), 10 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4ff3401..6999292 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -219,19 +219,20 @@ add_executable(brotli ${BROTLI_CLI_C}) + target_link_libraries(brotli ${BROTLI_LIBRARIES_STATIC}) + + # Installation +-if(NOT BROTLI_EMSCRIPTEN) + if(NOT BROTLI_BUNDLED_MODE) + install( + TARGETS brotli + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + ) + +- install( +- TARGETS ${BROTLI_LIBRARIES_CORE} +- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" +- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" +- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" +- ) ++ if(NOT BROTLI_EMSCRIPTEN) ++ install( ++ TARGETS ${BROTLI_LIBRARIES_CORE} ++ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" ++ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ++ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ ) ++ endif() # BROTLI_EMSCRIPTEN + + install( + TARGETS ${BROTLI_LIBRARIES_CORE_STATIC} +@@ -245,7 +246,6 @@ if(NOT BROTLI_BUNDLED_MODE) + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + ) + endif() # BROTLI_BUNDLED_MODE +-endif() # BROTLI_EMSCRIPTEN + + # Tests + +@@ -405,7 +405,6 @@ transform_pc_file("scripts/libbrotlidec.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libb + + transform_pc_file("scripts/libbrotlienc.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libbrotlienc.pc" "${BROTLI_VERSION}") + +-if(NOT BROTLI_EMSCRIPTEN) + if(NOT BROTLI_BUNDLED_MODE) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libbrotlicommon.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +@@ -414,7 +413,6 @@ if(NOT BROTLI_BUNDLED_MODE) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libbrotlienc.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + endif() # BROTLI_BUNDLED_MODE +-endif() # BROTLI_EMSCRIPTEN + + if (ENABLE_COVERAGE STREQUAL "yes") + SETUP_TARGET_FOR_COVERAGE(coverage test coverage) +-- +2.30.2 + From 578511836ea9e1089fbc3aa87d7c5e66fe301e68 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 28 May 2022 01:34:31 +0200 Subject: [PATCH 09/20] make: macroise source setup Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/b91a88e35d32b14054b1d5f1fde885b7cc098f91 --- Makefile | 40 +++++++++++++++------------------------- functions.mk | 22 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index d86c2321..bb3dfe46 100644 --- a/Makefile +++ b/Makefile @@ -17,11 +17,8 @@ include functions.mk # Fribidi build/lib/fribidi/configure: lib/fribidi $(wildcard $(BASE_DIR)build/patches/fribidi/*.patch) - rm -rf build/lib/fribidi - mkdir -p build/lib - cp -r lib/fribidi build/lib/fribidi - $(foreach file, $(wildcard $(BASE_DIR)build/patches/fribidi/*.patch), patch -d "$(BASE_DIR)build/lib/fribidi" -Np1 -i $(file) && ) true - cd build/lib/fribidi && NOCONFIGURE=1 ./autogen.sh + $(call PREPARE_SRC_PATCHED,fribidi) + cd build/lib/fribidi && $(RECONF_AUTO) $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure cd build/lib/fribidi && \ @@ -41,7 +38,7 @@ $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure emmake make install-pkgconfigDATA build/lib/expat/configured: lib/expat - mkdir -p build/lib/expat + $(call PREPARE_SRC_VPATH,expat) touch build/lib/expat/configured $(DIST_DIR)/lib/libexpat.a: build/lib/expat/configured @@ -65,9 +62,7 @@ $(DIST_DIR)/lib/libexpat.a: build/lib/expat/configured build/lib/brotli/js/decode.js: build/lib/brotli/configured build/lib/brotli/js/polyfill.js: build/lib/brotli/configured build/lib/brotli/configured: lib/brotli $(wildcard $(BASE_DIR)build/patches/brotli/*.patch) - rm -rf build/lib/brotli - cp -r lib/brotli build/lib/brotli - $(foreach file, $(wildcard $(BASE_DIR)build/patches/brotli/*.patch), patch -d "$(BASE_DIR)build/lib/brotli" -Np1 -i $(file) && ) true + $(call PREPARE_SRC_PATCHED,brotli) touch build/lib/brotli/configured $(DIST_DIR)/lib/libbrotlidec.a: $(DIST_DIR)/lib/libbrotlicommon.a @@ -87,13 +82,13 @@ $(DIST_DIR)/lib/libbrotlicommon.a: build/lib/brotli/configured for lib in *-static.a ; do mv "$$lib" "$${lib%-static.a}.a" ; done +build/lib/freetype/configure: lib/freetype $(wildcard $(BASE_DIR)build/patches/freetype/*.patch) + $(call PREPARE_SRC_PATCHED,freetype) + cd build/lib/freetype && $(RECONF_AUTO) + # Freetype without Harfbuzz -build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotlidec.a $(wildcard $(BASE_DIR)build/patches/freetype/*.patch) - rm -rf build/lib/freetype - cp -r lib/freetype build/lib/freetype - $(foreach file, $(wildcard $(BASE_DIR)build/patches/freetype/*.patch), patch -d "$(BASE_DIR)build/lib/freetype" -Np1 -i $(file) && ) true +build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotlidec.a build/lib/freetype/configure cd build/lib/freetype && \ - NOCONFIGURE=1 ./autogen.sh && \ mkdir -p build_hb && \ cd build_hb && \ EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \ @@ -118,10 +113,8 @@ build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotli # Harfbuzz build/lib/harfbuzz/configure: lib/harfbuzz $(wildcard $(BASE_DIR)build/patches/harfbuzz/*.patch) - rm -rf build/lib/harfbuzz - cp -r lib/harfbuzz build/lib/harfbuzz - $(foreach file, $(wildcard $(BASE_DIR)build/patches/harfbuzz/*.patch), patch -d "$(BASE_DIR)build/lib/harfbuzz" -Np1 -i $(file) && ) true - cd build/lib/harfbuzz && NOCONFIGURE=1 ./autogen.sh + $(call PREPARE_SRC_PATCHED,harfbuzz) + cd build/lib/harfbuzz && $(RECONF_AUTO) $(DIST_DIR)/lib/libharfbuzz.a: build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a build/lib/harfbuzz/configure cd build/lib/harfbuzz && \ @@ -176,10 +169,8 @@ $(DIST_DIR)/lib/libfreetype.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/lib # Fontconfig build/lib/fontconfig/configure: lib/fontconfig $(wildcard $(BASE_DIR)build/patches/fontconfig/*.patch) - rm -rf build/lib/fontconfig - cp -r lib/fontconfig build/lib/fontconfig - $(foreach file, $(wildcard $(BASE_DIR)build/patches/fontconfig/*.patch), patch -d "$(BASE_DIR)build/lib/fontconfig" -Np1 -i $(file) && ) true - cd build/lib/fontconfig && NOCONFIGURE=1 ./autogen.sh + $(call PREPARE_SRC_PATCHED,fontconfig) + cd build/lib/fontconfig && $(RECONF_AUTO) $(DIST_DIR)/lib/libfontconfig.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/libexpat.a $(DIST_DIR)/lib/libfribidi.a $(DIST_DIR)/lib/libfreetype.a build/lib/fontconfig/configure cd build/lib/fontconfig && \ @@ -203,9 +194,8 @@ $(DIST_DIR)/lib/libfontconfig.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/l # libass -- build/lib/libass/configured: lib/libass - rm -rf build/lib/libass - cd lib/libass && NOCONFIGURE=1 ./autogen.sh - mkdir -p build/lib/libass + cd lib/libass && $(RECONF_AUTO) + $(call PREPARE_SRC_VPATH,libass) touch build/lib/libass/configured $(DIST_DIR)/lib/libass.a: $(DIST_DIR)/lib/libfontconfig.a $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/libexpat.a $(DIST_DIR)/lib/libfribidi.a $(DIST_DIR)/lib/libfreetype.a $(DIST_DIR)/lib/libbrotlidec.a build/lib/libass/configured diff --git a/functions.mk b/functions.mk index 65ae2016..80e92ee8 100644 --- a/functions.mk +++ b/functions.mk @@ -5,6 +5,28 @@ # Special macros of the name TR_... create targets (and always take arguments) # and thus also need to be $(eval ...)'ed +## Build stuff + +# @arg1: name of submodule +define PREPARE_SRC_PATCHED + rm -rf build/lib/$(1) + mkdir -p build/lib + cp -r lib/$(1) build/lib/$(1) + $(foreach file, $(wildcard $(BASE_DIR)build/patches/$(1)/*.patch), \ + patch -d "$(BASE_DIR)build/lib/$(1)" -Np1 -i $(file) && \ + ) : +endef + +# @arg1: name of submodule +define PREPARE_SRC_VPATH + rm -rf build/lib/$(1) + mkdir -p build/lib/$(1) + touch build/lib/$(1)/configured +endef + +# All projects we build have autogen.sh, otherwise we could also fallback to `autoreconf -ivf .` +RECONF_AUTO := NOCONFIGURE=1 ./autogen.sh + ## Clean and git related From 2f82c5259c8ada4d6d90d9f5e1010c2a9da2988e Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 28 May 2022 02:33:24 +0200 Subject: [PATCH 10/20] make: export pkg-config path globally Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/7823300715690bd24d8581ff93059373162a3d1f --- Makefile | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index bb3dfe46..f4f2b709 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,9 @@ GLOBAL_CFLAGS:=-O3 -s USE_PTHREADS=0 GLOBAL_LDFLAGS:=-O3 -s ENVIRONMENT=web,webview,worker -s NO_EXIT_RUNTIME=1 export LDFLAGS = $(GLOBAL_LDFLAGS) +export PKG_CONFIG_PATH = $(DIST_DIR)/lib/pkgconfig +export EM_PKG_CONFIG_PATH = $(PKG_CONFIG_PATH) + all: subtitleoctopus subtitleoctopus: dist @@ -91,7 +94,6 @@ build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotli cd build/lib/freetype && \ mkdir -p build_hb && \ cd build_hb && \ - EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \ emconfigure ../configure \ CFLAGS=" \ $(GLOBAL_CFLAGS) \ @@ -118,7 +120,7 @@ build/lib/harfbuzz/configure: lib/harfbuzz $(wildcard $(BASE_DIR)build/patches/h $(DIST_DIR)/lib/libharfbuzz.a: build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a build/lib/harfbuzz/configure cd build/lib/harfbuzz && \ - EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig:$(BASE_DIR)build/lib/freetype/build_hb/dist_hb/lib/pkgconfig \ + EM_PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):$(BASE_DIR)build/lib/freetype/build_hb/dist_hb/lib/pkgconfig \ emconfigure ./configure \ CFLAGS=" \ $(GLOBAL_CFLAGS) \ @@ -147,7 +149,7 @@ $(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:$(BASE_DIR)build/lib/freetype/build_hb/dist_hb/lib/pkgconfig \ + EM_PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):$(BASE_DIR)build/lib/freetype/build_hb/dist_hb/lib/pkgconfig \ emconfigure ./configure \ CFLAGS=" \ $(GLOBAL_CFLAGS) \ @@ -174,7 +176,6 @@ build/lib/fontconfig/configure: lib/fontconfig $(wildcard $(BASE_DIR)build/patch $(DIST_DIR)/lib/libfontconfig.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/libexpat.a $(DIST_DIR)/lib/libfribidi.a $(DIST_DIR)/lib/libfreetype.a build/lib/fontconfig/configure cd build/lib/fontconfig && \ - EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \ emconfigure ./configure \ CFLAGS=" \ $(GLOBAL_CFLAGS) \ @@ -200,7 +201,6 @@ build/lib/libass/configured: lib/libass $(DIST_DIR)/lib/libass.a: $(DIST_DIR)/lib/libfontconfig.a $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/libexpat.a $(DIST_DIR)/lib/libfribidi.a $(DIST_DIR)/lib/libfreetype.a $(DIST_DIR)/lib/libbrotlidec.a build/lib/libass/configured cd build/lib/libass && \ - EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \ emconfigure ../../../lib/libass/configure \ CFLAGS=" \ $(GLOBAL_CFLAGS) \ @@ -232,7 +232,6 @@ OCTP_DEPS = \ 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 From 67458fedb9dd166b4c8a17101c00d1fd51d60191 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 28 May 2022 02:34:01 +0200 Subject: [PATCH 11/20] make: remove superfluous dependency disables emscripten already sets PKG_CONFIG_LIBDIR preventing non-wasm libraries installed in the system to be detected (and it doesn't provide a way for us to set _LIBDIR ourselves). Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/e88b1645e0c2c500efbff3bd9e4fabbaa1cc025f --- Makefile | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Makefile b/Makefile index f4f2b709..e3ee6830 100644 --- a/Makefile +++ b/Makefile @@ -105,9 +105,6 @@ build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotli --disable-shared \ \ --with-brotli=yes \ - --without-zlib \ - --without-bzip2 \ - --without-png \ --without-harfbuzz \ && \ emmake make -j8 && \ @@ -137,11 +134,7 @@ $(DIST_DIR)/lib/libharfbuzz.a: build/lib/freetype/build_hb/dist_hb/lib/libfreety --disable-shared \ --disable-dependency-tracking \ \ - --without-cairo \ - --without-fontconfig \ - --without-icu \ --with-freetype \ - --without-glib \ && \ cd src && \ emmake make -j8 install-libLTLIBRARIES install-pkgincludeHEADERS install-pkgconfigDATA @@ -161,9 +154,6 @@ $(DIST_DIR)/lib/libfreetype.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/lib --disable-shared \ \ --with-brotli=yes \ - --without-zlib \ - --without-bzip2 \ - --without-png \ --with-harfbuzz \ && \ emmake make -j8 && \ From 5c5e19426bac0c775888ca9c6426aa35b10db1c2 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 28 May 2022 02:43:29 +0200 Subject: [PATCH 12/20] make: export CFLAGS globally autoconf and cmake will pick up the variable from the environment. Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/0559838d43da74963e4298d69be1c6c3c5a0c822 --- Makefile | 33 ++++----------------------------- 1 file changed, 4 insertions(+), 29 deletions(-) diff --git a/Makefile b/Makefile index e3ee6830..3bda3008 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,8 @@ DIST_DIR:=$(BASE_DIR)dist/libraries GLOBAL_CFLAGS:=-O3 -s USE_PTHREADS=0 GLOBAL_LDFLAGS:=-O3 -s ENVIRONMENT=web,webview,worker -s NO_EXIT_RUNTIME=1 export LDFLAGS = $(GLOBAL_LDFLAGS) +export CFLAGS = $(GLOBAL_CFLAGS) +export CXXFLAGS = $(GLOBAL_CFLAGS) export PKG_CONFIG_PATH = $(DIST_DIR)/lib/pkgconfig export EM_PKG_CONFIG_PATH = $(PKG_CONFIG_PATH) @@ -26,9 +28,6 @@ build/lib/fribidi/configure: lib/fribidi $(wildcard $(BASE_DIR)build/patches/fri $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure cd build/lib/fribidi && \ emconfigure ./configure \ - CFLAGS=" \ - $(GLOBAL_CFLAGS) \ - " \ --prefix="$(DIST_DIR)" \ --host=x86-none-linux \ --build=x86_64 \ @@ -47,9 +46,6 @@ build/lib/expat/configured: lib/expat $(DIST_DIR)/lib/libexpat.a: build/lib/expat/configured cd build/lib/expat && \ emcmake cmake \ - -DCMAKE_C_FLAGS=" \ - $(GLOBAL_CFLAGS) \ - " \ -DCMAKE_INSTALL_PREFIX=$(DIST_DIR) \ -DEXPAT_BUILD_DOCS=off \ -DEXPAT_SHARED_LIBS=off \ @@ -72,9 +68,6 @@ $(DIST_DIR)/lib/libbrotlidec.a: $(DIST_DIR)/lib/libbrotlicommon.a $(DIST_DIR)/lib/libbrotlicommon.a: build/lib/brotli/configured cd build/lib/brotli && \ emcmake cmake \ - -DCMAKE_C_FLAGS=" \ - $(GLOBAL_CFLAGS) \ - " \ -DCMAKE_INSTALL_PREFIX=$(DIST_DIR) \ . \ && \ @@ -95,9 +88,6 @@ build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotli mkdir -p build_hb && \ cd build_hb && \ emconfigure ../configure \ - CFLAGS=" \ - $(GLOBAL_CFLAGS) \ - " \ --prefix="$$(pwd)/dist_hb" \ --host=x86-none-linux \ --build=x86_64 \ @@ -118,15 +108,9 @@ build/lib/harfbuzz/configure: lib/harfbuzz $(wildcard $(BASE_DIR)build/patches/h $(DIST_DIR)/lib/libharfbuzz.a: build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a build/lib/harfbuzz/configure cd build/lib/harfbuzz && \ EM_PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):$(BASE_DIR)build/lib/freetype/build_hb/dist_hb/lib/pkgconfig \ + CFLAGS="-DHB_NO_MT $(CFLAGS)" \ + CXXFLAGS="-DHB_NO_MT $(CFLAGS)" \ emconfigure ./configure \ - CFLAGS=" \ - $(GLOBAL_CFLAGS) \ - -DHB_NO_MT \ - " \ - CXXFLAGS=" \ - $(GLOBAL_CFLAGS) \ - -DHB_NO_MT \ - " \ --prefix="$(DIST_DIR)" \ --host=x86-none-linux \ --build=x86_64 \ @@ -144,9 +128,6 @@ $(DIST_DIR)/lib/libfreetype.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/lib cd build/lib/freetype && \ EM_PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):$(BASE_DIR)build/lib/freetype/build_hb/dist_hb/lib/pkgconfig \ emconfigure ./configure \ - CFLAGS=" \ - $(GLOBAL_CFLAGS) \ - " \ --prefix="$(DIST_DIR)" \ --host=x86-none-linux \ --build=x86_64 \ @@ -167,9 +148,6 @@ build/lib/fontconfig/configure: lib/fontconfig $(wildcard $(BASE_DIR)build/patch $(DIST_DIR)/lib/libfontconfig.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/libexpat.a $(DIST_DIR)/lib/libfribidi.a $(DIST_DIR)/lib/libfreetype.a build/lib/fontconfig/configure cd build/lib/fontconfig && \ emconfigure ./configure \ - CFLAGS=" \ - $(GLOBAL_CFLAGS) \ - " \ --prefix="$(DIST_DIR)" \ --host=x86-none-linux \ --build=x86_64 \ @@ -192,9 +170,6 @@ build/lib/libass/configured: lib/libass $(DIST_DIR)/lib/libass.a: $(DIST_DIR)/lib/libfontconfig.a $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/libexpat.a $(DIST_DIR)/lib/libfribidi.a $(DIST_DIR)/lib/libfreetype.a $(DIST_DIR)/lib/libbrotlidec.a build/lib/libass/configured cd build/lib/libass && \ emconfigure ../../../lib/libass/configure \ - CFLAGS=" \ - $(GLOBAL_CFLAGS) \ - " \ --prefix="$(DIST_DIR)" \ --host=x86-none-linux \ --build=x86_64 \ From 8ce704eca7cfa7932cb9dc3d3fc8a8b82e61bde1 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 28 May 2022 02:57:06 +0200 Subject: [PATCH 13/20] make: macroise configuration To be more concise and to keep config flags from drifting apart (they already varied slightly between submodules). Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/85817b32a986d09f6351749dc09ae16afcd0fbe1 --- Makefile | 59 +++++++--------------------------------------------- functions.mk | 16 ++++++++++++++ 2 files changed, 24 insertions(+), 51 deletions(-) diff --git a/Makefile b/Makefile index 3bda3008..a62901cb 100644 --- a/Makefile +++ b/Makefile @@ -27,15 +27,7 @@ build/lib/fribidi/configure: lib/fribidi $(wildcard $(BASE_DIR)build/patches/fri $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure cd build/lib/fribidi && \ - emconfigure ./configure \ - --prefix="$(DIST_DIR)" \ - --host=x86-none-linux \ - --build=x86_64 \ - --enable-static \ - --disable-shared \ - --disable-dependency-tracking \ - --disable-debug \ - && \ + $(call CONFIGURE_AUTO) && \ emmake make -C lib/ install && \ emmake make install-pkgconfigDATA @@ -45,15 +37,13 @@ build/lib/expat/configured: lib/expat $(DIST_DIR)/lib/libexpat.a: build/lib/expat/configured cd build/lib/expat && \ - emcmake cmake \ - -DCMAKE_INSTALL_PREFIX=$(DIST_DIR) \ + $(call CONFIGURE_CMAKE,$(BASE_DIR)lib/expat/expat) \ -DEXPAT_BUILD_DOCS=off \ -DEXPAT_SHARED_LIBS=off \ -DEXPAT_BUILD_EXAMPLES=off \ -DEXPAT_BUILD_FUZZERS=off \ -DEXPAT_BUILD_TESTS=off \ -DEXPAT_BUILD_TOOLS=off \ - $(BASE_DIR)lib/expat/expat \ && \ emmake make -j8 && \ emmake make install @@ -67,10 +57,7 @@ build/lib/brotli/configured: lib/brotli $(wildcard $(BASE_DIR)build/patches/brot $(DIST_DIR)/lib/libbrotlidec.a: $(DIST_DIR)/lib/libbrotlicommon.a $(DIST_DIR)/lib/libbrotlicommon.a: build/lib/brotli/configured cd build/lib/brotli && \ - emcmake cmake \ - -DCMAKE_INSTALL_PREFIX=$(DIST_DIR) \ - . \ - && \ + $(call CONFIGURE_CMAKE) && \ emmake make -j8 && \ emmake make install # Normalise static lib names @@ -87,13 +74,8 @@ build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotli cd build/lib/freetype && \ mkdir -p build_hb && \ cd build_hb && \ - emconfigure ../configure \ + $(call CONFIGURE_AUTO,..) \ --prefix="$$(pwd)/dist_hb" \ - --host=x86-none-linux \ - --build=x86_64 \ - --enable-static \ - --disable-shared \ - \ --with-brotli=yes \ --without-harfbuzz \ && \ @@ -110,14 +92,7 @@ $(DIST_DIR)/lib/libharfbuzz.a: build/lib/freetype/build_hb/dist_hb/lib/libfreety EM_PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):$(BASE_DIR)build/lib/freetype/build_hb/dist_hb/lib/pkgconfig \ CFLAGS="-DHB_NO_MT $(CFLAGS)" \ CXXFLAGS="-DHB_NO_MT $(CFLAGS)" \ - emconfigure ./configure \ - --prefix="$(DIST_DIR)" \ - --host=x86-none-linux \ - --build=x86_64 \ - --enable-static \ - --disable-shared \ - --disable-dependency-tracking \ - \ + $(call CONFIGURE_AUTO) \ --with-freetype \ && \ cd src && \ @@ -127,13 +102,7 @@ $(DIST_DIR)/lib/libharfbuzz.a: build/lib/freetype/build_hb/dist_hb/lib/libfreety $(DIST_DIR)/lib/libfreetype.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/libbrotlidec.a cd build/lib/freetype && \ EM_PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):$(BASE_DIR)build/lib/freetype/build_hb/dist_hb/lib/pkgconfig \ - emconfigure ./configure \ - --prefix="$(DIST_DIR)" \ - --host=x86-none-linux \ - --build=x86_64 \ - --enable-static \ - --disable-shared \ - \ + $(call CONFIGURE_AUTO) \ --with-brotli=yes \ --with-harfbuzz \ && \ @@ -147,12 +116,7 @@ build/lib/fontconfig/configure: lib/fontconfig $(wildcard $(BASE_DIR)build/patch $(DIST_DIR)/lib/libfontconfig.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/libexpat.a $(DIST_DIR)/lib/libfribidi.a $(DIST_DIR)/lib/libfreetype.a build/lib/fontconfig/configure cd build/lib/fontconfig && \ - emconfigure ./configure \ - --prefix="$(DIST_DIR)" \ - --host=x86-none-linux \ - --build=x86_64 \ - --disable-shared \ - --enable-static \ + $(call CONFIGURE_AUTO) \ --disable-docs \ --with-default-fonts=/fonts \ && \ @@ -169,15 +133,8 @@ build/lib/libass/configured: lib/libass $(DIST_DIR)/lib/libass.a: $(DIST_DIR)/lib/libfontconfig.a $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/libexpat.a $(DIST_DIR)/lib/libfribidi.a $(DIST_DIR)/lib/libfreetype.a $(DIST_DIR)/lib/libbrotlidec.a build/lib/libass/configured cd build/lib/libass && \ - emconfigure ../../../lib/libass/configure \ - --prefix="$(DIST_DIR)" \ - --host=x86-none-linux \ - --build=x86_64 \ - --disable-shared \ - --enable-static \ + $(call CONFIGURE_AUTO,../../../lib/libass) \ --disable-asm \ - \ - --enable-harfbuzz \ --enable-fontconfig \ && \ emmake make -j8 && \ diff --git a/functions.mk b/functions.mk index 80e92ee8..f083b61b 100644 --- a/functions.mk +++ b/functions.mk @@ -27,6 +27,22 @@ endef # All projects we build have autogen.sh, otherwise we could also fallback to `autoreconf -ivf .` RECONF_AUTO := NOCONFIGURE=1 ./autogen.sh +# @arg1: path to source directory; defaults to current working directory +define CONFIGURE_AUTO + emconfigure $(or $(1),.)/configure \ + --prefix="$(DIST_DIR)" \ + --host=x86-none-linux \ + --build=x86_64 \ + --enable-static \ + --disable-shared \ + --disable-debug +endef + +# @arg1: path to source directory; defaults to current working directory +define CONFIGURE_CMAKE + emcmake cmake -S "$(or $(1),.)" -DCMAKE_INSTALL_PREFIX="$(DIST_DIR)" +endef + ## Clean and git related From 9d3ea2a31b65420255789d0d414b0bd45632f3e9 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 28 May 2022 03:04:47 +0200 Subject: [PATCH 14/20] make: adjust number of jobs to available threads Previously some builds used a hardcoded number of 8 and others didn't set it at all falling back to a single threaded build. This still isn't ideal though. What we actually want is to fix up or Makefile to allow builders to pass the number of jobs to the toplevel and then a buildserver can distribute the available jobs across the targets allowing inter-target parallelism. For now, this already is a clear improvement. The fribidi build appears to have a borked dependency on generated sources when running from a subdir, which resulted in parallel builds sometimes failing. To fix this the relevant header is now generated explicitly before other build steps. Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/89e899a4626684a5a16c0cb6b509aaeff16e10d1 --- Makefile | 33 +++++++++++++++++---------------- functions.mk | 2 ++ 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index a62901cb..3dfc716d 100644 --- a/Makefile +++ b/Makefile @@ -28,8 +28,9 @@ build/lib/fribidi/configure: lib/fribidi $(wildcard $(BASE_DIR)build/patches/fri $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure cd build/lib/fribidi && \ $(call CONFIGURE_AUTO) && \ - emmake make -C lib/ install && \ - emmake make install-pkgconfigDATA + $(JSO_MAKE) -C lib/ fribidi-unicode-version.h && \ + $(JSO_MAKE) -C lib/ install && \ + $(JSO_MAKE) install-pkgconfigDATA build/lib/expat/configured: lib/expat $(call PREPARE_SRC_VPATH,expat) @@ -45,8 +46,8 @@ $(DIST_DIR)/lib/libexpat.a: build/lib/expat/configured -DEXPAT_BUILD_TESTS=off \ -DEXPAT_BUILD_TOOLS=off \ && \ - emmake make -j8 && \ - emmake make install + $(JSO_MAKE) && \ + $(JSO_MAKE) install build/lib/brotli/js/decode.js: build/lib/brotli/configured build/lib/brotli/js/polyfill.js: build/lib/brotli/configured @@ -58,8 +59,8 @@ $(DIST_DIR)/lib/libbrotlidec.a: $(DIST_DIR)/lib/libbrotlicommon.a $(DIST_DIR)/lib/libbrotlicommon.a: build/lib/brotli/configured cd build/lib/brotli && \ $(call CONFIGURE_CMAKE) && \ - emmake make -j8 && \ - emmake make install + $(JSO_MAKE) && \ + $(JSO_MAKE) install # Normalise static lib names cd $(DIST_DIR)/lib/ && \ for lib in *-static.a ; do mv "$$lib" "$${lib%-static.a}.a" ; done @@ -79,8 +80,8 @@ build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotli --with-brotli=yes \ --without-harfbuzz \ && \ - emmake make -j8 && \ - emmake make install + $(JSO_MAKE) && \ + $(JSO_MAKE) install # Harfbuzz build/lib/harfbuzz/configure: lib/harfbuzz $(wildcard $(BASE_DIR)build/patches/harfbuzz/*.patch) @@ -96,7 +97,7 @@ $(DIST_DIR)/lib/libharfbuzz.a: build/lib/freetype/build_hb/dist_hb/lib/libfreety --with-freetype \ && \ cd src && \ - emmake make -j8 install-libLTLIBRARIES install-pkgincludeHEADERS install-pkgconfigDATA + $(JSO_MAKE) install-libLTLIBRARIES install-pkgincludeHEADERS install-pkgconfigDATA # Freetype with Harfbuzz $(DIST_DIR)/lib/libfreetype.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/libbrotlidec.a @@ -106,8 +107,8 @@ $(DIST_DIR)/lib/libfreetype.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/lib --with-brotli=yes \ --with-harfbuzz \ && \ - emmake make -j8 && \ - emmake make install + $(JSO_MAKE) && \ + $(JSO_MAKE) install # Fontconfig build/lib/fontconfig/configure: lib/fontconfig $(wildcard $(BASE_DIR)build/patches/fontconfig/*.patch) @@ -120,9 +121,9 @@ $(DIST_DIR)/lib/libfontconfig.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/l --disable-docs \ --with-default-fonts=/fonts \ && \ - emmake make -C src/ install && \ - emmake make -C fontconfig/ install && \ - emmake make install-pkgconfigDATA + $(JSO_MAKE) -C src/ install && \ + $(JSO_MAKE) -C fontconfig/ install && \ + $(JSO_MAKE) install-pkgconfigDATA # libass -- @@ -137,8 +138,8 @@ $(DIST_DIR)/lib/libass.a: $(DIST_DIR)/lib/libfontconfig.a $(DIST_DIR)/lib/libhar --disable-asm \ --enable-fontconfig \ && \ - emmake make -j8 && \ - emmake make install + $(JSO_MAKE) && \ + $(JSO_MAKE) install # SubtitleOctopus.js OCTP_DEPS = \ diff --git a/functions.mk b/functions.mk index f083b61b..b80abe7a 100644 --- a/functions.mk +++ b/functions.mk @@ -43,6 +43,8 @@ define CONFIGURE_CMAKE emcmake cmake -S "$(or $(1),.)" -DCMAKE_INSTALL_PREFIX="$(DIST_DIR)" endef +# FIXME: Propagate jobserver info with $(MAKE) and set up our makefile for fully parallel builds +JSO_MAKE := emmake make -j "$(shell nproc)" ## Clean and git related From f71d90af09681a3dc8511caa6f96feb28968655b Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 28 May 2022 18:50:34 +0200 Subject: [PATCH 15/20] cosmetic/make: remove comment with unused flags They appear to have been commented out since the first public release and it's not clear what they were intended for or if they'd even still work with current emscripten. Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/4370e7b52bd29987b8a0d80fb23c34a04b73c38f --- Makefile | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Makefile b/Makefile index 3dfc716d..7a5e977a 100644 --- a/Makefile +++ b/Makefile @@ -169,10 +169,6 @@ EMCC_COMMON_ARGS = \ -s NO_FILESYSTEM=0 \ --no-heap-copy \ -o $@ - #--js-opts 0 -g4 \ - #--closure 1 \ - #--memory-init-file 0 \ - #-s OUTLINING_LIMIT=20000 \ dist: src/subtitles-octopus-worker.bc dist/js/subtitles-octopus-worker.js dist/js/subtitles-octopus-worker-legacy.js dist/js/subtitles-octopus.js dist/js/COPYRIGHT From 9afa163b8f7967c4ba04207d6002d425639ba97c Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 28 May 2022 18:55:18 +0200 Subject: [PATCH 16/20] make: put uniform comments before dependency builds Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/e341e1bcd5817cf93ec845cf14cc3229eb010120 --- Makefile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 7a5e977a..f2586fd8 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ subtitleoctopus: dist include functions.mk -# Fribidi +# FriBidi build/lib/fribidi/configure: lib/fribidi $(wildcard $(BASE_DIR)build/patches/fribidi/*.patch) $(call PREPARE_SRC_PATCHED,fribidi) cd build/lib/fribidi && $(RECONF_AUTO) @@ -32,6 +32,7 @@ $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure $(JSO_MAKE) -C lib/ install && \ $(JSO_MAKE) install-pkgconfigDATA +# Expat build/lib/expat/configured: lib/expat $(call PREPARE_SRC_VPATH,expat) touch build/lib/expat/configured @@ -49,6 +50,7 @@ $(DIST_DIR)/lib/libexpat.a: build/lib/expat/configured $(JSO_MAKE) && \ $(JSO_MAKE) install +# Brotli build/lib/brotli/js/decode.js: build/lib/brotli/configured build/lib/brotli/js/polyfill.js: build/lib/brotli/configured build/lib/brotli/configured: lib/brotli $(wildcard $(BASE_DIR)build/patches/brotli/*.patch) @@ -66,11 +68,11 @@ $(DIST_DIR)/lib/libbrotlicommon.a: build/lib/brotli/configured for lib in *-static.a ; do mv "$$lib" "$${lib%-static.a}.a" ; done +# Freetype without Harfbuzz build/lib/freetype/configure: lib/freetype $(wildcard $(BASE_DIR)build/patches/freetype/*.patch) $(call PREPARE_SRC_PATCHED,freetype) cd build/lib/freetype && $(RECONF_AUTO) -# Freetype without Harfbuzz build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotlidec.a build/lib/freetype/configure cd build/lib/freetype && \ mkdir -p build_hb && \ @@ -125,8 +127,8 @@ $(DIST_DIR)/lib/libfontconfig.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/l $(JSO_MAKE) -C fontconfig/ install && \ $(JSO_MAKE) install-pkgconfigDATA -# libass -- +# libass build/lib/libass/configured: lib/libass cd lib/libass && $(RECONF_AUTO) $(call PREPARE_SRC_VPATH,libass) From 3aa82178ad5235016a665981f05fecf72cae2e02 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 28 May 2022 19:02:58 +0200 Subject: [PATCH 17/20] cosmetic/make: drop GLOBAL_* variables in favour of only * The latter is required as it's picked up by buildsystems, the former is only used once by us and can easily be replaced by the latter. Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/e2e315834e6c1b99ae80af04ca9d86354d643cb9 --- Makefile | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index f2586fd8..ee796424 100644 --- a/Makefile +++ b/Makefile @@ -4,12 +4,9 @@ BASE_DIR:=$(dir $(realpath $(firstword $(MAKEFILE_LIST)))) DIST_DIR:=$(BASE_DIR)dist/libraries -GLOBAL_CFLAGS:=-O3 -s USE_PTHREADS=0 -GLOBAL_LDFLAGS:=-O3 -s ENVIRONMENT=web,webview,worker -s NO_EXIT_RUNTIME=1 -export LDFLAGS = $(GLOBAL_LDFLAGS) -export CFLAGS = $(GLOBAL_CFLAGS) -export CXXFLAGS = $(GLOBAL_CFLAGS) - +export LDFLAGS = -O3 -s ENVIRONMENT=web,webview,worker -s NO_EXIT_RUNTIME=1 +export CFLAGS = -O3 -s USE_PTHREADS=0 +export CXXFLAGS = $(CFLAGS) export PKG_CONFIG_PATH = $(DIST_DIR)/lib/pkgconfig export EM_PKG_CONFIG_PATH = $(PKG_CONFIG_PATH) @@ -161,7 +158,7 @@ all-src: # Dist Files EMCC_COMMON_ARGS = \ - $(GLOBAL_LDFLAGS) \ + $(LDFLAGS) \ -s EXPORTED_FUNCTIONS="['_main', '_malloc']" \ -s EXPORTED_RUNTIME_METHODS="['ccall', 'cwrap', 'getValue', 'FS_createPreloadedFile', 'FS_createPath']" \ --use-preload-plugins \ From 6617fe771da87c734648c863e283901993bf23a8 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sun, 29 May 2022 00:06:27 +0200 Subject: [PATCH 18/20] cosmetic/make: drop superfluous default target make Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/d95ddf5bef284884dedcf7b3388f924cb496d996 --- Makefile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Makefile b/Makefile index ee796424..b8257eb7 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,6 @@ $(DIST_DIR)/lib/libexpat.a: build/lib/expat/configured -DEXPAT_BUILD_TESTS=off \ -DEXPAT_BUILD_TOOLS=off \ && \ - $(JSO_MAKE) && \ $(JSO_MAKE) install # Brotli @@ -58,7 +57,6 @@ $(DIST_DIR)/lib/libbrotlidec.a: $(DIST_DIR)/lib/libbrotlicommon.a $(DIST_DIR)/lib/libbrotlicommon.a: build/lib/brotli/configured cd build/lib/brotli && \ $(call CONFIGURE_CMAKE) && \ - $(JSO_MAKE) && \ $(JSO_MAKE) install # Normalise static lib names cd $(DIST_DIR)/lib/ && \ @@ -79,7 +77,6 @@ build/lib/freetype/build_hb/dist_hb/lib/libfreetype.a: $(DIST_DIR)/lib/libbrotli --with-brotli=yes \ --without-harfbuzz \ && \ - $(JSO_MAKE) && \ $(JSO_MAKE) install # Harfbuzz @@ -106,7 +103,6 @@ $(DIST_DIR)/lib/libfreetype.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/lib --with-brotli=yes \ --with-harfbuzz \ && \ - $(JSO_MAKE) && \ $(JSO_MAKE) install # Fontconfig @@ -137,7 +133,6 @@ $(DIST_DIR)/lib/libass.a: $(DIST_DIR)/lib/libfontconfig.a $(DIST_DIR)/lib/libhar --disable-asm \ --enable-fontconfig \ && \ - $(JSO_MAKE) && \ $(JSO_MAKE) install # SubtitleOctopus.js From 44abd8ef193b5170e529c95c52845f4beb1d4c4a Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 3 Dec 2022 20:33:33 +0100 Subject: [PATCH 19/20] make: limit --disable-debug to fribidi It is the only project actually recognising this option. Cherry-picked from: https://github.com/libass/JavascriptSubtitlesOctopus/commit/190b28158673422a3761f95c201ef3c3b463d5f4 --- Makefile | 2 +- functions.mk | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index b8257eb7..29c50a25 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ build/lib/fribidi/configure: lib/fribidi $(wildcard $(BASE_DIR)build/patches/fri $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure cd build/lib/fribidi && \ - $(call CONFIGURE_AUTO) && \ + $(call CONFIGURE_AUTO) --disable-debug && \ $(JSO_MAKE) -C lib/ fribidi-unicode-version.h && \ $(JSO_MAKE) -C lib/ install && \ $(JSO_MAKE) install-pkgconfigDATA diff --git a/functions.mk b/functions.mk index b80abe7a..cdb5050d 100644 --- a/functions.mk +++ b/functions.mk @@ -34,8 +34,7 @@ define CONFIGURE_AUTO --host=x86-none-linux \ --build=x86_64 \ --enable-static \ - --disable-shared \ - --disable-debug + --disable-shared endef # @arg1: path to source directory; defaults to current working directory From 6fb73112f07da55239a59e2c6a5690a40b32bebc Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Mon, 26 Dec 2022 12:00:20 +0300 Subject: [PATCH 20/20] make: remove redundant 'touch configured' PREPARE_SRC_VPATH is supposed to prepare the source, so leave the creation of the 'configured' file to the actual Makefile target. --- functions.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/functions.mk b/functions.mk index cdb5050d..c27963a0 100644 --- a/functions.mk +++ b/functions.mk @@ -21,7 +21,6 @@ endef define PREPARE_SRC_VPATH rm -rf build/lib/$(1) mkdir -p build/lib/$(1) - touch build/lib/$(1)/configured endef # All projects we build have autogen.sh, otherwise we could also fallback to `autoreconf -ivf .`