diff --git a/images/base-linux64/Dockerfile b/images/base-linux64/Dockerfile index 7f7318b..23a781d 100644 --- a/images/base-linux64/Dockerfile +++ b/images/base-linux64/Dockerfile @@ -27,8 +27,11 @@ RUN \ -delete && \ mkdir /opt/ffbuild +RUN git clone --filter=blob:none --depth=1 https://github.com/yugr/Implib.so /opt/implib + ADD toolchain.cmake /toolchain.cmake ADD cross.meson /cross.meson +ADD gen-implib.sh /usr/bin/gen-implib ENV PATH="/opt/ct-ng/bin:${PATH}" \ FFBUILD_TARGET_FLAGS="--pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux" \ diff --git a/images/base-linux64/gen-implib.sh b/images/base-linux64/gen-implib.sh new file mode 100755 index 0000000..41f8d86 --- /dev/null +++ b/images/base-linux64/gen-implib.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -e +if [[ $# != 2 ]]; then + echo "Invalid arguments" + exit 1 +fi +IN="$1" +OUT="$2" + +TMPDIR="$(mktemp -d)" +trap "rm -rf '$TMPDIR'" EXIT +cd "$TMPDIR" + +set -x +python3 /opt/implib/implib-gen.py --target x86_64-linux-gnu --dlopen --lazy-load --verbose "$IN" +${FFBUILD_CROSS_PREFIX}gcc $CFLAGS $STAGE_CFLAGS -c *.tramp.S *.init.c +${FFBUILD_CROSS_PREFIX}ar -rcs "$OUT" *.tramp.o *.init.o diff --git a/images/base/run_stage.sh b/images/base/run_stage.sh index 83a3ef7..6db0e8d 100755 --- a/images/base/run_stage.sh +++ b/images/base/run_stage.sh @@ -1,6 +1,9 @@ #!/bin/bash set -xe +export RAW_CFLAGS="$CFLAGS" +export RAW_CXXFLAGS="$CXXFLAGS" +export RAW_LDFLAGS="$LDFLAGS" [[ -n "$STAGE_CFLAGS" ]] && export CFLAGS="$CFLAGS $STAGE_CFLAGS" [[ -n "$STAGE_CXXFLAGS" ]] && export CXXFLAGS="$CXXFLAGS $STAGE_CXXFLAGS" [[ -n "$STAGE_LDFLAGS" ]] && export LDFLAGS="$LDFLAGS $STAGE_LDFLAGS" diff --git a/scripts.d/45-x11/20-libxau.sh b/scripts.d/45-x11/20-libxau.sh index 8d75b7a..c375cdc 100755 --- a/scripts.d/45-x11/20-libxau.sh +++ b/scripts.d/45-x11/20-libxau.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic ) @@ -30,7 +30,12 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install + + gen-implib "$FFBUILD_PREFIX"/lib/{libXau.so.6,libXau.a} } diff --git a/scripts.d/45-x11/30-libxcb.sh b/scripts.d/45-x11/30-libxcb.sh index bf992ae..5840f23 100755 --- a/scripts.d/45-x11/30-libxcb.sh +++ b/scripts.d/45-x11/30-libxcb.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic --disable-devel-docs ) @@ -31,9 +31,16 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install + + for LIBNAME in "$FFBUILD_PREFIX"/lib/libxcb*.so.?; do + gen-implib "$LIBNAME" "${LIBNAME%%.*}.a" + done } ffbuild_configure() { diff --git a/scripts.d/45-x11/40-libx11.sh b/scripts.d/45-x11/40-libx11.sh index d7f38cb..bf7e8e0 100755 --- a/scripts.d/45-x11/40-libx11.sh +++ b/scripts.d/45-x11/40-libx11.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic --without-xmlto --without-fop @@ -36,9 +36,15 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install - echo "Libs.private: -ldl" >> "$FFBUILD_PREFIX"/lib/pkgconfig/x11.pc + echo "Libs: -ldl" >> "$FFBUILD_PREFIX"/lib/pkgconfig/x11.pc + + gen-implib "$FFBUILD_PREFIX"/lib/{libX11-xcb.so.1,libX11-xcb.a} + gen-implib "$FFBUILD_PREFIX"/lib/{libX11.so.6,libX11.a} } diff --git a/scripts.d/45-x11/50-libxext.sh b/scripts.d/45-x11/50-libxext.sh index fdbed2f..d0999c6 100755 --- a/scripts.d/45-x11/50-libxext.sh +++ b/scripts.d/45-x11/50-libxext.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic --without-xmlto --without-fop @@ -34,7 +34,12 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install + + gen-implib "$FFBUILD_PREFIX"/lib/{libXext.so.6,libXext.a} } diff --git a/scripts.d/45-x11/50-libxfixes.sh b/scripts.d/45-x11/50-libxfixes.sh index a7236e4..831aafa 100755 --- a/scripts.d/45-x11/50-libxfixes.sh +++ b/scripts.d/45-x11/50-libxfixes.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic ) @@ -30,7 +30,12 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install + + gen-implib "$FFBUILD_PREFIX"/lib/{libXfixes.so.3,libXfixes.a} } diff --git a/scripts.d/45-x11/50-libxi.sh b/scripts.d/45-x11/50-libxi.sh index 9c28679..1fdb176 100755 --- a/scripts.d/45-x11/50-libxi.sh +++ b/scripts.d/45-x11/50-libxi.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic ) @@ -30,7 +30,12 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install + + gen-implib "$FFBUILD_PREFIX"/lib/{libXi.so.6,libXi.a} } diff --git a/scripts.d/45-x11/50-libxinerama.sh b/scripts.d/45-x11/50-libxinerama.sh index 2e80a09..93a5f67 100755 --- a/scripts.d/45-x11/50-libxinerama.sh +++ b/scripts.d/45-x11/50-libxinerama.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic ) @@ -30,7 +30,12 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install + + gen-implib "$FFBUILD_PREFIX"/lib/{libXinerama.so.1,libXinerama.a} } diff --git a/scripts.d/45-x11/50-libxrender.sh b/scripts.d/45-x11/50-libxrender.sh index fd957ef..41be3a4 100755 --- a/scripts.d/45-x11/50-libxrender.sh +++ b/scripts.d/45-x11/50-libxrender.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic ) @@ -30,7 +30,12 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install + + gen-implib "$FFBUILD_PREFIX"/lib/{libXrender.so.1,libXrender.a} } diff --git a/scripts.d/45-x11/50-libxscrnsaver.sh b/scripts.d/45-x11/50-libxscrnsaver.sh index b041b52..0d1f555 100755 --- a/scripts.d/45-x11/50-libxscrnsaver.sh +++ b/scripts.d/45-x11/50-libxscrnsaver.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic ) @@ -30,7 +30,12 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install + + gen-implib "$FFBUILD_PREFIX"/lib/{libXss.so.1,libXss.a} } diff --git a/scripts.d/45-x11/50-libxxf86vm.sh b/scripts.d/45-x11/50-libxxf86vm.sh index c7e07b0..18f607e 100755 --- a/scripts.d/45-x11/50-libxxf86vm.sh +++ b/scripts.d/45-x11/50-libxxf86vm.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic ) @@ -30,7 +30,12 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install + + gen-implib "$FFBUILD_PREFIX"/lib/{libXxf86vm.so.1,libXxf86vm.a} } diff --git a/scripts.d/45-x11/60-libglvnd.sh b/scripts.d/45-x11/60-libglvnd.sh index 5b6828f..c726ac0 100755 --- a/scripts.d/45-x11/60-libglvnd.sh +++ b/scripts.d/45-x11/60-libglvnd.sh @@ -36,11 +36,7 @@ ffbuild_dockerbuild() { return -1 fi - export LDFLAGS="$LDFLAGS -lxcb -lXau" - meson "${myconf[@]}" .. ninja -j"$(nproc)" ninja install - - rm "$FFBUILD_PREFIX"/lib/lib*.so* } diff --git a/scripts.d/45-x11/60-libxcursor.sh b/scripts.d/45-x11/60-libxcursor.sh index 6d52930..fb59ba7 100755 --- a/scripts.d/45-x11/60-libxcursor.sh +++ b/scripts.d/45-x11/60-libxcursor.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic ) @@ -30,7 +30,12 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" - make -j$(nproc) + make -j$(nproc) VERBOSE=1 make install + + gen-implib "$FFBUILD_PREFIX"/lib/{libXcursor.so.1,libXcursor.a} } diff --git a/scripts.d/45-x11/60-libxrandr.sh b/scripts.d/45-x11/60-libxrandr.sh index 20c0c25..7a21a7f 100755 --- a/scripts.d/45-x11/60-libxrandr.sh +++ b/scripts.d/45-x11/60-libxrandr.sh @@ -16,8 +16,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic ) @@ -30,7 +30,12 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install + + gen-implib "$FFBUILD_PREFIX"/lib/{libXrandr.so.2,libXrandr.a} } diff --git a/scripts.d/45-x11/60-libxv.sh b/scripts.d/45-x11/60-libxv.sh index 05f0dab..efc444f 100755 --- a/scripts.d/45-x11/60-libxv.sh +++ b/scripts.d/45-x11/60-libxv.sh @@ -17,8 +17,8 @@ ffbuild_dockerbuild() { local myconf=( --prefix="$FFBUILD_PREFIX" - --disable-shared - --enable-static + --enable-shared + --disable-static --with-pic --without-lint ) @@ -32,9 +32,14 @@ ffbuild_dockerbuild() { return -1 fi + export CFLAGS="$RAW_CFLAGS" + export LDFLAFS="$RAW_LDFLAGS" + ./configure "${myconf[@]}" make -j$(nproc) make install + + gen-implib "$FFBUILD_PREFIX"/lib/{libXv.so.1,libXv.a} } ffbuild_configure() { diff --git a/scripts.d/45-x11/99-finalize.sh b/scripts.d/45-x11/99-finalize.sh index 88e31ea..f4b7ab9 100755 --- a/scripts.d/45-x11/99-finalize.sh +++ b/scripts.d/45-x11/99-finalize.sh @@ -11,5 +11,9 @@ ffbuild_dockerlayer() { } ffbuild_dockerbuild() { - true + rm "$FFBUILD_PREFIX"/lib/lib*.so* +} + +ffbuild_libs() { + echo -ldl }