Re-build packaging images with reproducible Dockerfiles

This commit is contained in:
Nikita Lisitsa 2022-08-06 19:36:05 +03:00
parent 742c74e07e
commit 6108fc591b
13 changed files with 384 additions and 2 deletions

View file

@ -1,5 +1,7 @@
#!/usr/bin/env bash
set -e
if [ "$#" -ne 1 ]; then
echo "Usage: psemek-package-linux <project-dir>"
exit 0
@ -7,6 +9,6 @@ fi
PROJECT_DIR=`realpath "${1}"`
docker run -u 1000 -v "${PROJECT_DIR}":/home/work-source lisyarus/psemek:package-linux /home/package.sh
docker run -u 1000 -v "${PROJECT_DIR}":/home/source lisyarus/psemek:package-linux /home/package.sh
echo Packaging finished

View file

@ -1,5 +1,7 @@
#!/usr/bin/env bash
set -e
if [ "$#" -ne 1 ]; then
echo "Usage: psemek-package-win <project-dir>"
exit 0
@ -7,6 +9,7 @@ fi
PROJECT_DIR=`realpath "${1}"`
docker run -u 1000 -v "${PROJECT_DIR}":/home/work-source lisyarus/psemek:package-win /home/package.sh
#docker run -u 1000 -v "${PROJECT_DIR}":/home/source lisyarus/psemek:package-win /home/package.sh
docker run -u 1000 -v "${PROJECT_DIR}":/home/source package-test /home/package.sh
echo Packaging finished

60
package/linux/Dockerfile Normal file
View file

@ -0,0 +1,60 @@
FROM ubuntu:22.04
# Install tools
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y \
build-essential chrpath cmake git \
file wget zip \
libpng-dev libxext-dev libgl-dev libboost-all-dev libmpg123-dev \
libxi-dev libxrender-dev
# Set user
RUN useradd -u 1000 -U -d /home -M worker
RUN chown -R worker:worker /home /usr/local
USER worker
# Build sdl2
RUN mkdir /home/sdl2
WORKDIR /home/sdl2
RUN ls -lh /home
RUN wget https://www.libsdl.org/release/SDL2-2.0.22.tar.gz
RUN tar xvf SDL2-2.0.22.tar.gz
RUN mv SDL2-2.0.22 source
RUN rm SDL2-2.0.22.tar.gz
COPY sdl2/* ./
RUN ./make.sh
RUN rm -r source build options make.sh
WORKDIR /home
# Build sdl2-mixer
RUN mkdir /home/sdl2-mixer
WORKDIR /home/sdl2-mixer
RUN wget https://github.com/libsdl-org/SDL_mixer/archive/refs/tags/release-2.6.1.tar.gz
RUN tar xvf release-2.6.1.tar.gz
RUN mv SDL_mixer-release-2.6.1 source
RUN rm release-2.6.1.tar.gz
COPY sdl2-mixer/* ./
RUN ./make.sh
WORKDIR /home
RUN rm -r sdl2-mixer
# Install blender
WORKDIR /home
RUN wget https://download.blender.org/release/Blender3.2/blender-3.2.0-linux-x64.tar.xz
RUN tar xvf blender-3.2.0-linux-x64.tar.xz
RUN mv blender-3.2.0-linux-x64 blender
RUN rm blender-3.2.0-linux-x64.tar.xz
RUN ln -sv /home/blender/blender /usr/local/bin/blender
# Copy system-provided libpng.so
RUN cp `readlink -f /usr/lib/x86_64-linux-gnu/libpng.so` libpng.so
RUN mv libpng.so `objdump -p libpng.so | grep SONAME | awk '{print $2}'`
# Copy system-provided libmpg123.so
RUN cp `readlink -f /usr/lib/x86_64-linux-gnu/libmpg123.so` libmpg123.so
RUN mv libmpg123.so `objdump -p libmpg123.so | grep SONAME | awk '{print $2}'`
# Install toolchain file & main packaging script
COPY toolchain.cmake .
COPY package.sh .

8
package/linux/package.sh Executable file
View file

@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -e
mkdir /home/build
cd /home/build
cmake ../source -DCMAKE_TOOLCHAIN_FILE=/home/toolchain.cmake
cmake --build . -j

View file

@ -0,0 +1,19 @@
#!/usr/bin/env bash
set -e
rm -rf build
mkdir build
cd build
cat ../options | grep ' --' | awk '{ print $1 }' | xargs ../source/configure -srcdir=../source --prefix=`realpath ../../sdl2/install`
make -j16
make install
cd ../../sdl2/
strip -g install/lib/libSDL2_mixer.so
SONAME=`objdump -p install/lib/libSDL2_mixer.so | grep SONAME | awk '{print $2}'`
mv -v `readlink -f install/lib/libSDL2_mixer.so` "install/lib/${SONAME}"
ln -svf "${SONAME}" "install/lib/libSDL2_mixer.so"

View file

@ -0,0 +1,29 @@
Enabled:
--enable-music-wave enable streaming WAVE music [[default=yes]]
--enable-music-mp3 enable MP3 music [[default=yes]]
--enable-music-mp3-mpg123 enable MP3 music via libmpg123 [[default=yes]]
--enable-music-mp3-mpg123-shared dynamically load libmpg123 library [[default=yes]]
--enable-music-mp3-mad-gpl enable MP3 music via libmad GPL code [[default=no]]
Disabled:
--disable-sdltest Do not try to compile and run a test SDL program
--disable-music-cmd support an external music player [[default=yes]]
--disable-music-mod enable MOD music [[default=yes]]
--disable-music-mod-modplug enable MOD music via modplug [[default=yes]]
--disable-music-mod-modplug-shared dynamically load modplug library [[default=yes]]
--disable-music-mod-mikmod enable MOD music via mikmod [[default=no]]
--disable-music-mod-mikmod-shared dynamically load mikmod library [[default=yes]]
--disable-music-midi enable MIDI music [[default=yes]]
--disable-music-midi-timidity enable timidity MIDI output [[default=yes]]
--disable-music-midi-native enable native MIDI music output [[default=yes]]
--disable-music-midi-fluidsynth enable FluidSynth MIDI output [[default=yes]]
--disable-music-midi-fluidsynth-shared dynamically load FluidSynth library [[default=yes]]
--disable-music-ogg enable Ogg Vorbis music [[default=yes]]
--disable-music-ogg-tremor enable OGG Vorbis music via libtremor [[default=no]]
--disable-music-ogg-shared dynamically load Ogg Vorbis library [[default=yes]]
--disable-music-flac enable FLAC music [[default=yes]]
--disable-music-flac-shared dynamically load FLAC library [[default=yes]]
--disable-music-mp3-mad-gpl-dithering enable MP3 music via libmad GPL code [[default=yes]]
--disable-music-opus enable Opus music [[default=yes]]
--disable-music-opus-shared dynamically load opusfile library [[default=yes]]

18
package/linux/sdl2/make.sh Executable file
View file

@ -0,0 +1,18 @@
#!/usr/bin/env bash
set -e
mkdir build
cd build
cat ../options | grep ' --' | awk '{ print $1 }' | xargs ../source/configure -srcdir=../source --prefix=`realpath ../install`
make -j16
make install
cd ..
strip -g install/lib/libSDL2.so
SONAME=`objdump -p install/lib/libSDL2.so | grep SONAME | awk '{print $2}'`
mv -v `readlink -f install/lib/libSDL2.so` "install/lib/${SONAME}"
ln -svf "${SONAME}" "install/lib/libSDL2.so"

View file

@ -0,0 +1,97 @@
Enabled:
--enable-libc Use the system C library [[default=yes]]
--enable-gcc-atomics Use gcc builtin atomics [[default=yes]]
--enable-atomic Enable the atomic operations subsystem [[default=yes]]
--enable-audio Enable the audio subsystem [[default=yes]]
--enable-video Enable the video subsystem [[default=yes]]
--enable-events Enable the events subsystem [[default=yes]]
--enable-loadso Enable the shared object loading subsystem [[default=yes]]
--enable-cpuinfo Enable the cpuinfo subsystem [[default=yes]]
--enable-assembly Enable assembly routines [[default=yes]]
--enable-alsa support the ALSA audio API [[default=yes]]
--enable-alsa-shared dynamically load ALSA audio support [[default=yes]]
--enable-jack use JACK audio [[default=yes]]
--enable-jack-shared dynamically load JACK audio support [[default=yes]]
--enable-esd support the Enlightened Sound Daemon [[default=yes]]
--enable-esd-shared dynamically load ESD audio support [[default=yes]]
--enable-pulseaudio use PulseAudio [[default=yes]]
--enable-pulseaudio-shared dynamically load PulseAudio support [[default=yes]]
--enable-arts support the Analog Real Time Synthesizer [[default=yes]]
--enable-arts-shared dynamically load aRts audio support [[default=yes]]
--enable-nas support the NAS audio API [[default=yes]]
--enable-nas-shared dynamically load NAS audio support [[default=yes]]
--enable-sndio support the sndio audio API [[default=yes]]
--enable-sndio-shared dynamically load sndio audio support [[default=yes]]
--enable-fusionsound use FusionSound audio driver [[default=no]]
--enable-fusionsound-shared dynamically load fusionsound audio support [[default=yes]]
--enable-diskaudio support the disk writer audio driver [[default=yes]]
--enable-dummyaudio support the dummy audio driver [[default=yes]]
--enable-libsamplerate use libsamplerate for audio rate conversion [[default=yes]]
--enable-libsamplerate-shared dynamically load libsamplerate [[default=yes]]
--enable-video-wayland use Wayland video driver [[default=yes]]
--enable-wayland-shared dynamically load Wayland support [[default=maybe]]
--enable-video-x11 use X11 video driver [[default=yes]]
--enable-x11-shared dynamically load X11 support [[default=maybe]]
--enable-video-x11-xcursor enable X11 Xcursor support [[default=yes]]
--enable-video-x11-xdbe enable X11 Xdbe support [[default=yes]]
--enable-video-x11-xinerama enable X11 Xinerama support [[default=yes]]
--enable-video-x11-xinput enable X11 XInput extension for manymouse, tablets, etc [[default=yes]]
--enable-video-x11-xrandr enable X11 Xrandr extension for fullscreen [[default=yes]]
--enable-video-x11-scrnsaver enable X11 screensaver extension [[default=yes]]
--enable-video-x11-xshape enable X11 XShape support [[default=yes]]
--enable-video-x11-vm use X11 VM extension for fullscreen [[default=yes]]
--enable-video-directfb use DirectFB video driver [[default=no]]
--enable-directfb-shared dynamically load directfb support [[default=yes]]
--enable-video-kmsdrm use KMSDRM video driver [[default=no]]
--enable-kmsdrm-shared dynamically load kmsdrm support [[default=yes]]
--enable-video-dummy use dummy video driver [[default=yes]]
--enable-video-opengl include OpenGL support [[default=yes]]
--enable-video-opengles include OpenGL ES support [[default=yes]]
--enable-video-opengles1 include OpenGL ES 1.1 support [[default=yes]]
--enable-video-opengles2 include OpenGL ES 2.0 support [[default=yes]]
--enable-video-vulkan include Vulkan support [[default=yes]]
--enable-libudev enable libudev support [[default=yes]]
--enable-dbus enable D-Bus support [[default=yes]]
--enable-ime enable IME support [[default=yes]]
--enable-ibus enable IBus support [[default=yes]]
--enable-fcitx enable fcitx support [[default=yes]]
--enable-pthreads use POSIX threads for multi-threading [[default=yes]]
--enable-pthread-sem use pthread semaphores [[default=yes]]
--enable-clock_gettime use clock_gettime() instead of gettimeofday() on UNIX [[default=yes]]
--enable-rpath use an rpath when linking SDL [[default=yes]]
--enable-sdl2-config Install sdl2-config [default=yes]
--enable-threads Enable the threading subsystem [[default=yes]]
Disabled:
--disable-render Enable the render subsystem [[default=yes]]
--disable-joystick Enable the joystick subsystem [[default=yes]]
--disable-haptic Enable the haptic (force feedback) subsystem [[default=yes]]
--disable-sensor Enable the sensor subsystem [[default=yes]]
--disable-power Enable the power subsystem [[default=yes]]
--disable-filesystem Enable the filesystem subsystem [[default=yes]]
--disable-timers Enable the timer subsystem [[default=yes]]
--disable-file Enable the file subsystem [[default=yes]]
--disable-ssemath Allow GCC to use SSE floating point math [[default=maybe]]
--disable-mmx use MMX assembly routines [[default=yes]]
--disable-3dnow use 3DNow! assembly routines [[default=yes]]
--disable-sse use SSE assembly routines [[default=yes]]
--disable-sse2 use SSE2 assembly routines [[default=maybe]]
--disable-sse3 use SSE3 assembly routines [[default=maybe]]
--disable-altivec use Altivec assembly routines [[default=yes]]
--disable-alsatest Do not try to compile and run a test Alsa program
--disable-oss support the OSS audio API [[default=maybe]]
--disable-esdtest Do not try to compile and run a test ESD program
--disable-arm-simd use SIMD assembly blitters on ARM [[default=yes]]
--disable-arm-neon use NEON assembly blitters on ARM [[default=no]]
--disable-video-wayland-qt-touch QtWayland server support for Wayland video driver [[default=yes]]
--disable-video-rpi use Raspberry Pi video driver [[default=yes]]
--disable-video-vivante use Vivante EGL video driver [[default=yes]]
--disable-video-cocoa use Cocoa video driver [[default=yes]]
--disable-video-metal include Metal support [[default=yes]]
--disable-render-metal enable the Metal render driver [[default=yes]]
--disable-directx use DirectX for Windows audio/video [[default=yes]]
--disable-wasapi use the Windows WASAPI audio driver [[default=yes]]
--disable-hidapi use HIDAPI for low level joystick drivers [[default=no]]
--disable-backgrounding-signal number to use for magic backgrounding signal or 'no' [[default=no]]
--disable-foregrounding-signal number to use for magic foregrounding signal or 'no' [[default=no]]
--disable-render-d3d enable the Direct3D render driver [[default=yes]]

View file

@ -0,0 +1,17 @@
set(CMAKE_C_COMPILER gcc-11)
set(CMAKE_CXX_COMPILER g++-11)
set(CMAKE_BUILD_TYPE Release)
set(PSEMEK_PACKAGE_MODE ON)
set(PSEMEK_PACKAGE_ROOT "${CMAKE_CURRENT_LIST_DIR}")
set(PSEMEK_PACKAGE_HOST ON)
set(PSEMEK_PACKAGE_TARGET ON)
set(PSEMEK_PACKAGE_COPY_FILES
${PSEMEK_PACKAGE_ROOT}/sdl2/install/lib/libSDL2-2.0.so.0
${PSEMEK_PACKAGE_ROOT}/sdl2/install/lib/libSDL2_mixer-2.0.so.0
${PSEMEK_PACKAGE_ROOT}/libpng*
${PSEMEK_PACKAGE_ROOT}/libmpg123*
)
list(APPEND CMAKE_PREFIX_PATH "${PSEMEK_PACKAGE_ROOT}/sdl2/install")

77
package/win/Dockerfile Normal file
View file

@ -0,0 +1,77 @@
FROM ubuntu:22.04
# Install tools
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y \
build-essential cmake git \
mingw-w64-x86-64-dev gcc-mingw-w64-x86-64-posix g++-mingw-w64-x86-64-posix \
libxext-dev libgl-dev \
wget zip zstd \
libpng-dev libboost-all-dev \
libxi-dev libxrender-dev
# Set user
RUN useradd -u 1000 -U -d /home -M worker
RUN chown -R worker:worker /home /usr/local
USER worker
# Install sdl2
RUN mkdir /home/sdl2
WORKDIR /home/sdl2
RUN wget https://www.libsdl.org/release/SDL2-devel-2.0.22-mingw.tar.gz
RUN tar xvf SDL2-devel-2.0.22-mingw.tar.gz
RUN mv SDL2-2.0.22/x86_64-w64-mingw32 ./install
RUN rm -r SDL2-devel-2.0.22-mingw.tar.gz SDL2-2.0.22
# Install sdl2-mixer
WORKDIR /home/sdl2
RUN wget https://github.com/libsdl-org/SDL_mixer/releases/download/release-2.6.1/SDL2_mixer-devel-2.6.1-mingw.tar.gz
RUN tar xvf SDL2_mixer-devel-2.6.1-mingw.tar.gz
RUN cp -a SDL2_mixer-2.6.1/x86_64-w64-mingw32/* install/
RUN rm -r SDL2_mixer-2.6.1 SDL2_mixer-devel-2.6.1-mingw.tar.gz
# Install zlib
RUN mkdir /home/zlib
WORKDIR /home/zlib
RUN wget https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-zlib-1.2.12-1-any.pkg.tar.zst
RUN tar xvf mingw-w64-x86_64-zlib-1.2.12-1-any.pkg.tar.zst
RUN mv mingw64 install
RUN rm mingw-w64-x86_64-zlib-1.2.12-1-any.pkg.tar.zst
# Install libpng
RUN mkdir /home/libpng
WORKDIR /home/libpng
RUN wget https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libpng-1.6.37-6-any.pkg.tar.zst
RUN tar xvf mingw-w64-x86_64-libpng-1.6.37-6-any.pkg.tar.zst
RUN mv mingw64 install
RUN rm mingw-w64-x86_64-libpng-1.6.37-6-any.pkg.tar.zst
# Install boost
RUN mkdir /home/boost
WORKDIR /home/boost
RUN wget https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-boost-1.79.0-4-any.pkg.tar.zst
RUN tar xvf mingw-w64-x86_64-boost-1.79.0-4-any.pkg.tar.zst
RUN mv mingw64 install
RUN rm mingw-w64-x86_64-boost-1.79.0-4-any.pkg.tar.zst
# Install libmpg
RUN mkdir /home/libmpg
WORKDIR /home/libmpg
RUN wget https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-mpg123-1.30.1-1-any.pkg.tar.zst
RUN tar xvf mingw-w64-x86_64-mpg123-1.30.1-1-any.pkg.tar.zst
RUN mv mingw64 install
RUN rm mingw-w64-x86_64-mpg123-1.30.1-1-any.pkg.tar.zst
# Install blender
WORKDIR /home
RUN wget https://download.blender.org/release/Blender3.2/blender-3.2.0-linux-x64.tar.xz
RUN tar xvf blender-3.2.0-linux-x64.tar.xz
RUN mv blender-3.2.0-linux-x64 blender
RUN rm blender-3.2.0-linux-x64.tar.xz
RUN ln -sv /home/blender/blender /usr/local/bin/blender
# Install toolchain files & main packaging script
COPY toolchain-host.cmake .
COPY toolchain-target.cmake .
COPY package.sh .

14
package/win/package.sh Executable file
View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -e
mkdir -p /home/build-host
cd /home/build-host
cmake ../source -DCMAKE_TOOLCHAIN_FILE=/home/toolchain-host.cmake -DCMAKE_INSTALL_PREFIX=/home/tools
cmake --build . -t install -j
mkdir -p /home/build-target
cd /home/build-target
rm -rf ./*
cmake ../source -DCMAKE_TOOLCHAIN_FILE=/home/toolchain-target.cmake
cmake --build . -j

View file

@ -0,0 +1,11 @@
set(CMAKE_C_COMPILER gcc-11)
set(CMAKE_CXX_COMPILER g++-11)
set(CMAKE_BUILD_TYPE Release)
set(PSEMEK_PACKAGE_MODE ON)
set(PSEMEK_PACKAGE_ROOT "${CMAKE_CURRENT_LIST_DIR}")
set(PSEMEK_PACKAGE_HOST ON)
set(PSEMEK_PACKAGE_TARGET OFF)
set(PSEMEK_PACKAGE_TOOLS_PATH "${PSEMEK_PACKAGE_ROOT}/tools")
list(APPEND CMAKE_PREFIX_PATH "${PSEMEK_PACKAGE_ROOT}/sdl2/install")

View file

@ -0,0 +1,27 @@
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc-posix)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++-posix)
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSROOT /usr/x86_64-w64-mingw32)
set(CMAKE_BUILD_TYPE Release)
set(PSEMEK_PACKAGE_MODE ON)
set(PSEMEK_PACKAGE_ROOT "${CMAKE_CURRENT_LIST_DIR}")
set(PSEMEK_PACKAGE_HOST OFF)
set(PSEMEK_PACKAGE_TARGET ON)
set(PSEMEK_PACKAGE_TOOLS_PATH "${PSEMEK_PACKAGE_ROOT}/tools")
set(PSEMEK_PACKAGE_COPY_FILES
${PSEMEK_PACKAGE_ROOT}/sdl2/install/bin/SDL2.dll
${PSEMEK_PACKAGE_ROOT}/sdl2/install/bin/SDL2_mixer.dll
${PSEMEK_PACKAGE_ROOT}/libmpg/install/bin/libmpg123-0.dll
${PSEMEK_PACKAGE_ROOT}/libpng/install/bin/libpng16-16.dll
${PSEMEK_PACKAGE_ROOT}/zlib/install/bin/zlib1.dll
/usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll
)
list(APPEND CMAKE_PREFIX_PATH
"${PSEMEK_PACKAGE_ROOT}/sdl2/install"
"${PSEMEK_PACKAGE_ROOT}/boost/install"
"${PSEMEK_PACKAGE_ROOT}/libpng/install"
"${PSEMEK_PACKAGE_ROOT}/zlib/install"
)