Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TheOneric] Build cleanup #43

Merged
merged 20 commits into from
Dec 26, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 0 additions & 13 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
246 changes: 62 additions & 184 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,245 +4,136 @@
BASE_DIR:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
DIST_DIR:=$(BASE_DIR)dist/libraries

GLOBAL_CFLAGS:=-O3
GLOBAL_LDFLAGS:=-O3 -s ENVIRONMENT=web,webview,worker -s NO_EXIT_RUNTIME=1
export LDFLAGS = $(GLOBAL_LDFLAGS)
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)

all: subtitleoctopus

subtitleoctopus: dist

.PHONY: all subtitleoctopus dist

include functions.mk

# Fribidi
# 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 && \
emconfigure ./configure \
CFLAGS=" \
-s USE_PTHREADS=0 \
$(GLOBAL_CFLAGS) \
-DFRIBIDI_ENTRY=extern \
" \
--prefix="$(DIST_DIR)" \
--host=x86-none-linux \
--build=x86_64 \
--enable-static \
--disable-shared \
--disable-dependency-tracking \
--disable-debug \
&& \
emmake make -C lib/ install && \
emmake make install-pkgconfigDATA
$(call CONFIGURE_AUTO) --disable-debug && \
$(JSO_MAKE) -C lib/ fribidi-unicode-version.h && \
$(JSO_MAKE) -C lib/ install && \
$(JSO_MAKE) install-pkgconfigDATA

# Expat
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
cd build/lib/expat && \
emcmake cmake \
-DCMAKE_C_FLAGS=" \
-s USE_PTHREADS=0 \
$(GLOBAL_CFLAGS) \
" \
-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
$(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)
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

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=" \
$(GLOBAL_CFLAGS) \
" \
-DCMAKE_INSTALL_PREFIX=$(DIST_DIR) \
. \
&& \
emmake make -j8 && \
cp -r ./c/include $(DIST_DIR)
$(call CONFIGURE_CMAKE) && \
$(JSO_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/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

$(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)
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/configure: lib/freetype $(wildcard $(BASE_DIR)build/patches/freetype/*.patch)
$(call PREPARE_SRC_PATCHED,freetype)
cd build/lib/freetype && $(RECONF_AUTO)

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 \
emconfigure ../configure \
CFLAGS=" \
-s USE_PTHREADS=0 \
$(GLOBAL_CFLAGS) \
" \
$(call CONFIGURE_AUTO,..) \
--prefix="$$(pwd)/dist_hb" \
--host=x86-none-linux \
--build=x86_64 \
--enable-static \
--disable-shared \
\
--with-brotli=yes \
--without-zlib \
--without-bzip2 \
--without-png \
--without-harfbuzz \
&& \
emmake make -j8 && \
emmake make install
$(JSO_MAKE) install

# 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 && \
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 \
" \
--prefix="$(DIST_DIR)" \
--host=x86-none-linux \
--build=x86_64 \
--enable-static \
--disable-shared \
--disable-dependency-tracking \
\
--without-cairo \
--without-fontconfig \
--without-icu \
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)" \
$(call CONFIGURE_AUTO) \
--with-freetype \
--without-glib \
&& \
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
cd build/lib/freetype && \
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)" \
--host=x86-none-linux \
--build=x86_64 \
--enable-static \
--disable-shared \
\
EM_PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):$(BASE_DIR)build/lib/freetype/build_hb/dist_hb/lib/pkgconfig \
$(call CONFIGURE_AUTO) \
--with-brotli=yes \
--without-zlib \
--without-bzip2 \
--without-png \
--with-harfbuzz \
&& \
emmake make -j8 && \
emmake make install
$(JSO_MAKE) install

# 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 && \
EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \
emconfigure ./configure \
CFLAGS=" \
-s USE_PTHREADS=0 \
-DEMSCRIPTEN \
$(GLOBAL_CFLAGS) \
" \
--prefix="$(DIST_DIR)" \
--host=x86-none-linux \
--build=x86_64 \
--disable-shared \
--enable-static \
$(call CONFIGURE_AUTO) \
--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 --

# 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
cd build/lib/libass && \
EM_PKG_CONFIG_PATH=$(DIST_DIR)/lib/pkgconfig \
emconfigure ../../../lib/libass/configure \
CFLAGS=" \
-s USE_PTHREADS=0 \
$(GLOBAL_CFLAGS) \
" \
--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 && \
emmake make install
$(JSO_MAKE) install

# SubtitleOctopus.js
OCTP_DEPS = \
Expand All @@ -255,25 +146,14 @@ 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:
$(MAKE) -C src all

# 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 \
Expand All @@ -283,10 +163,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

Expand Down Expand Up @@ -377,3 +253,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
Loading