|
dnf -y groupinstall "Development Tools" |
|
dnf -y install ragel byacc flex |
|
|
|
# some other dev-tools might also need to be installed, |
|
# such as meson or whatever, |
|
# install them as required, I didn't list them all here |
|
|
|
|
|
cd $HOME |
|
|
|
###################### |
|
##### setup Emscripten |
|
###################### |
|
|
|
git clone --depth 1 --branch 3.1.35 https://github.com/emscripten-core/emsdk.git |
|
cd emsdk |
|
./emsdk install latest |
|
./emsdk activate latest |
|
|
|
###################### |
|
##### setup ENVs |
|
###################### |
|
|
|
source $HOME/emsdk/emsdk_env.sh |
|
|
|
export MAKEFLAGS="-j$(nproc)" |
|
export magicdir=${HOME}/magic/ |
|
export magicprefix=${magicdir}/build |
|
export EM_PKG_CONFIG_PATH=${magicprefix}/lib/pkgconfig/ |
|
export PKG_CONFIG_PATH=${magicprefix}/lib/pkgconfig/ |
|
export EM_PKG_CONFIG_LIBDIR=${magicprefix}/lib/ |
|
export PKG_CONFIG_LIBDIR=${magicprefix}/lib/ |
|
export CHOST="wasm32-unknown-linux" |
|
export ax_cv_c_float_words_bigendian=no |
|
|
|
###################### |
|
##### setup meson |
|
###################### |
|
|
|
export MESON_CROSS="${magicdir}/emscripten-crossfile.meson" |
|
|
|
cat > "${magicdir}/emscripten-crossfile.meson" <<END |
|
[binaries] |
|
c = 'emcc' |
|
cpp = 'em++' |
|
ld = 'wasm-ld' |
|
ar = 'emar' |
|
ranlib = 'emranlib' |
|
pkgconfig = ['emconfigure', 'pkg-config'] |
|
|
|
# https://docs.gtk.org/glib/cross-compiling.html#cross-properties |
|
[properties] |
|
growing_stack = true |
|
have_c99_vsnprintf = true |
|
have_c99_snprintf = true |
|
have_unix98_printf = true |
|
|
|
# Ensure that '-s PTHREAD_POOL_SIZE=*' is not injected into .pc files |
|
[built-in options] |
|
c_thread_count = 0 |
|
cpp_thread_count = 0 |
|
|
|
[host_machine] |
|
system = 'emscripten' |
|
cpu_family = 'wasm32' |
|
cpu = 'wasm32' |
|
endian = 'little' |
|
END |
|
|
|
mkdir ${magicdir} |
|
mkdir ${magicprefix} |
|
|
|
###################### |
|
##### zlib |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 --branch v1.2.13 https://github.com/madler/zlib.git |
|
cd ${magicdir}/zlib |
|
|
|
emconfigure ./configure --static --prefix=${magicprefix} && \ |
|
emmake make && \ |
|
emmake make install |
|
|
|
###################### |
|
##### libpng |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 --branch v1.6.39 https://github.com/glennrp/libpng.git |
|
cd ${magicdir}/libpng |
|
|
|
emconfigure ./configure --host=${CHOST} --prefix=${magicprefix} --enable-shared=no --disable-dependency-tracking CFLAGS='-s USE_PTHREADS' LDFLAGS='-lpthread' && \ |
|
emmake make clean && \ |
|
emmake make && \ |
|
emmake make install |
|
|
|
###################### |
|
##### pixman |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 --branch pixman-0.42.2 git://anongit.freedesktop.org/git/pixman |
|
cd ${magicdir}/pixman |
|
|
|
./autogen.sh && \ |
|
emconfigure ./configure --host=${CHOST} --prefix=${magicprefix} --enable-shared=no --disable-dependency-tracking CFLAGS='-s USE_PTHREADS' LDFLAGS='-lpthread' && \ |
|
emmake make clean && \ |
|
emmake make && \ |
|
emmake make install |
|
|
|
###################### |
|
##### freetype |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 --branch VER-2-13-0 https://gitlab.freedesktop.org/freetype/freetype.git |
|
cd ${magicdir}/freetype |
|
|
|
./autogen.sh && \ |
|
emconfigure ./configure --host=${CHOST} --prefix=${magicprefix} --enable-shared=no --disable-dependency-tracking CFLAGS='-s USE_PTHREADS' LDFLAGS='-lpthread' && \ |
|
emmake make clean && \ |
|
emmake make && \ |
|
emmake make install |
|
|
|
###################### |
|
##### expat |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 --branch R_2_5_0 https://github.com/libexpat/libexpat.git |
|
cd ${magicdir}/libexpat/expat |
|
|
|
./buildconf.sh && |
|
emconfigure ./configure --without-docbook --host=${CHOST} --prefix=${magicprefix} --enable-shared=no --disable-dependency-tracking CFLAGS='-s USE_PTHREADS' LDFLAGS='-lpthread' && \ |
|
emmake make && \ |
|
emmake make install |
|
|
|
###################### |
|
##### fontconfig |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 --branch 2.14.2 https://gitlab.freedesktop.org/fontconfig/fontconfig.git |
|
cd ${magicdir}/fontconfig |
|
|
|
emconfigure ./autogen.sh --prefix=${magicprefix} && \ |
|
emconfigure ./configure --host=${CHOST} --cache-file=enabled --disable-docs --disable-docbook --prefix=${magicprefix} --enable-shared=no --disable-dependency-tracking CFLAGS='-s USE_PTHREADS -pthread' LDFLAGS='-lpthread' && \ |
|
emmake make clean && \ |
|
emmake make && \ |
|
cp fc-cache/fc-cache fc-cache/fc-cache-bak && \ |
|
chmod +x fc-cache/fc-cache && \ |
|
echo 'exit 0' > fc-cache/fc-cache && \ |
|
emmake make install |
|
|
|
###################### |
|
##### libffi |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 https://github.com/libffi/libffi.git |
|
cd ${magicdir}/libffi |
|
# the latest source code of libffi has already got emscripten support |
|
# https://github.com/libffi/libffi/pull/763 |
|
# but not released yet, so ... the latest commit for me is ac598b7 |
|
git checkout ac598b7 |
|
|
|
./autogen.sh && \ |
|
emconfigure ./configure --host=${CHOST} --prefix=${magicprefix} --enable-static --disable-shared --disable-dependency-tracking --disable-builddir --disable-multi-os-directory --disable-raw-api --disable-structs --disable-docs && \ |
|
emmake make && \ |
|
emmake make install SUBDIRS='include' |
|
|
|
###################### |
|
##### glib |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 --branch wasm-calm-2.76.1 https://github.com/VitoVan/glib.git |
|
cd ${magicdir}/glib |
|
|
|
CFLAGS='-s USE_PTHREADS' LDFLAGS='-lpthread' meson setup _build --prefix=${magicprefix} --cross-file=$MESON_CROSS --default-library=static --buildtype=release \ |
|
--force-fallback-for=pcre2,gvdb -Dselinux=disabled -Dxattr=false -Dlibmount=disabled -Dnls=disabled \ |
|
-Dtests=false -Dglib_assert=false -Dglib_checks=false && \ |
|
meson install -C _build |
|
|
|
###################### |
|
##### cairo |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 --branch 1.17.8 https://gitlab.freedesktop.org/cairo/cairo.git |
|
cd ${magicdir}/cairo |
|
|
|
CFLAGS="$(pkg-config --cflags freetype2, fontconfig, expat) -s USE_PTHREADS" LDFLAGS="$(pkg-config --libs freetype2, fontconfig, expat) -lpthread" meson setup _build --prefix=${magicprefix} --cross-file=$MESON_CROSS --default-library=static --buildtype=release -Dtests=disabled && \ |
|
meson install -C _build |
|
|
|
###################### |
|
##### harfbuzz |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 --branch 7.1.0 https://github.com/harfbuzz/harfbuzz.git |
|
cd ${magicdir}/harfbuzz |
|
|
|
./autogen.sh && \ |
|
emconfigure ./configure --host=${CHOST} --prefix=${magicprefix} --enable-shared=no --disable-dependency-tracking CFLAGS='-s USE_PTHREADS -pthread' LDFLAGS='-lpthread' && \ |
|
emmake make clean && \ |
|
emmake make && \ |
|
emmake make install |
|
|
|
###################### |
|
##### reinstall: freetype |
|
##### somebody said I should do this, I don't know why |
|
##### but... fuck it, whatever |
|
###################### |
|
|
|
cd ${magicdir}/freetype |
|
|
|
./autogen.sh && \ |
|
emconfigure ./configure --host=${CHOST} --prefix=${magicprefix} --enable-shared=no --disable-dependency-tracking CFLAGS='-s USE_PTHREADS' LDFLAGS='-lpthread' && \ |
|
emmake make clean && \ |
|
emmake make && \ |
|
emmake make install |
|
|
|
###################### |
|
##### fribidi |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 --branch v1.0.12 https://github.com/fribidi/fribidi.git |
|
cd ${magicdir}/fribidi |
|
|
|
.ci/build-c2man.sh |
|
export PATH=$PATH:${magicdir}/fribidi/c2man/c2man-install |
|
|
|
./autogen.sh && \ |
|
emconfigure ./configure --host=${CHOST} --prefix=${magicprefix} --enable-shared=no --disable-dependency-tracking CFLAGS='-s USE_PTHREADS -pthread' LDFLAGS='-lpthread' && \ |
|
emmake make clean && \ |
|
emmake make && \ |
|
emmake make install |
|
|
|
###################### |
|
##### pango |
|
###################### |
|
|
|
cd ${magicdir} |
|
git clone --depth 1 --branch wasm-calm-1.50.14 https://github.com/VitoVan/pango.git |
|
cd ${magicdir}/pango |
|
|
|
# remove test |
|
# because it uses something emscripten don't have? |
|
# like: g_io_channel_unix_new ? |
|
mv meson.build meson.build.original |
|
grep -vwE "subdir\('tests'\)" meson.build.original > meson.build |
|
|
|
CFLAGS="$(pkg-config --cflags glib-2.0, cairo, pixman-1, fribidi, freetype2, fontconfig, expat) -s USE_PTHREADS" LDFLAGS="$(pkg-config --libs glib-2.0, cairo, pixman-1, fribidi, freetype2, fontconfig, expat) -lpthread" meson setup _build --prefix=${magicprefix} --cross-file=$MESON_CROSS --default-library=static --buildtype=release -Dintrospection=disabled && \ |
|
CFLAGS="$(pkg-config --cflags glib-2.0, cairo, pixman-1, fribidi, freetype2, fontconfig, expat) -s USE_PTHREADS" LDFLAGS="$(pkg-config --libs glib-2.0, cairo, pixman-1, fribidi, freetype2, fontconfig, expat) -lpthread" meson install -C _build |
|
|