Skip to content

Commit

Permalink
Merge pull request #51 from feelpp/prudhomm/issue50
Browse files Browse the repository at this point in the history
resolves #50: add support for Qt 6.5
  • Loading branch information
prudhomm authored Aug 21, 2023
2 parents 87e8d87 + 075639c commit ddcce39
Show file tree
Hide file tree
Showing 7 changed files with 189 additions and 7 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/feelpp-env.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ name: Feel++ Env

on:
push:
branches:
- master
paths:
- 'feelpp-env/**'
- '.github/workflows/feelpp-env.yml'
Expand Down
13 changes: 7 additions & 6 deletions feelpp-env/Dockerfile-ubuntu-22.04
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
# Add Qt6 support

# PIP requirement like "aqtinstall==2.0.6" or url with egg file
ARG AQT_VERSION="aqtinstall==3.0.1"
ARG AQT_VERSION="aqtinstall==3.1.4"

ARG QT_VERSION=6.4.1
ARG QT_VERSION=6.5.0
ARG QT_PATH=/opt/Qt

ARG ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates build-essential curl python3 locales patchelf"

ENV DEBIAN_FRONTEND=noninteractive \
DEBCONF_NONINTERACTIVE_SEEN=true \
QT_PATH=${QT_PATH} \
QT_GCC=${QT_PATH}/${QT_VERSION}/gcc_64 \
PATH=${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/gcc_64/bin:$PATH
QT_WASM=${QT_PATH}/${QT_VERSION}/wasm_singlethread \
EMSDK=${SDK_PATH} \
EMSDK_NODE=${SDK_PATH}/node/14.18.2_64bit/bin/node \
PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/wasm_singlethread/bin:${SDK_PATH}/upstream/bin:${SDK_PATH}/upstream/emscripten:${SDK_PATH}/node/14.18.2_64bit/bin:${SDK_PATH}

COPY qt6/6.4-aqt/* /tmp/
COPY qt6/6.5-aqt/* /tmp/

# Get Qt binaries with aqt
RUN ls /tmp -lrt && chmod +x /tmp/*.sh && /tmp/install_wasm_qt6.sh
Expand Down
2 changes: 1 addition & 1 deletion feelpp-env/qt6/6.4-aqt/get_emsdk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@ grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y
cd /tmp
rm -rf $root_dir/build
apt -qq clean
rm -rf /var/lib/apt/lists/*
rm -rf /var/lib/apt/lists/*
50 changes: 50 additions & 0 deletions feelpp-env/qt6/6.5-aqt/get_emsdk.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/sh -xe
# Script to get emscripten sdk

[ "$SDK_VERSION" ] || SDK_VERSION=2.0.30
[ "$SDK_URL" ] || SDK_URL="https://github.com/emscripten-core/emsdk/archive/refs/tags/$SDK_VERSION.tar.gz"
[ "$SDK_SHA256" ] || SDK_SHA256=69050d76c8907a58f99b08831e8cb7a4fba857efec6037d5e59df4b73111ba36

[ "$SDK_PATH" ] || SDK_PATH=/opt/emsdk

root_dir=$PWD
[ "$root_dir" != '/' ] || root_dir=""

# Init the package system
apt update

echo
echo '--> Save the original installed packages list'
echo

dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst

echo
echo '--> Install EmSDK'
echo

apt install -y curl python-is-python3

echo "$SDK_SHA256 -" > sum.txt && curl -fLs "$SDK_URL" | tee /tmp/emsdk.tar.gz | sha256sum -c sum.txt
mkdir -p "$SDK_PATH"
tar --strip-components 1 -C "$SDK_PATH" -xf /tmp/emsdk.tar.gz
rm -f /tmp/emsdk.tar.gz
emsdk install "$SDK_VERSION"
emsdk activate "$SDK_VERSION"

# Make sure node tool exist
ls "$EMSDK_NODE"

echo
echo '--> Restore the packages list to the original state'
echo

dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst
grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge

# Complete the cleaning

cd /tmp
rm -rf $root_dir/build
apt -qq clean
rm -rf /var/lib/apt/lists/*
62 changes: 62 additions & 0 deletions feelpp-env/qt6/6.5-aqt/get_qt.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/bin/sh -xe
# Script to install Qt 6 in docker container

[ "$AQT_VERSION" ] || AQT_VERSION=aqtinstall
[ "$QT_VERSION" ] || exit 1

[ "$QT_PATH" ] || QT_PATH=/opt/Qt

root_dir=$PWD
[ "$root_dir" != '/' ] || root_dir=""

# Init the package system
apt update

echo
echo '--> Save the original installed packages list'
echo

dpkg --get-selections | cut -f 1 > /tmp/packages_orig.lst

echo
echo '--> Install the required packages to install Qt'
echo

apt install -y git python3-pip libglib2.0-0
pip3 install --no-cache-dir "$AQT_VERSION"

echo
echo '--> Download & install the Qt library using aqt'
echo

aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" wasm_singlethread -m qtcharts qtquick3d qtshadertools qtdatavis3d qtquicktimeline
aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" wasm_multithread -m qtcharts qtquick3d qtshadertools qtdatavis3d qtquicktimeline
aqt install-tool -O "$QT_PATH" linux desktop tools_cmake
aqt install-tool -O "$QT_PATH" linux desktop tools_ninja
# Host Qt needed for cross-compilation
aqt install-qt -O "$QT_PATH" linux desktop "$QT_VERSION" gcc_64 -m qtcharts qtquick3d qtshadertools qtdatavis3d qtquicktimeline

pip3 freeze | xargs pip3 uninstall -y

# Create qt-cmake wrapper to simplify the emsdk usage
mkdir -p /usr/local/bin
cat - <<\EOF > /usr/local/bin/qt-cmake
#!/bin/sh -e
export CMAKE_TOOLCHAIN_FILE=$QT_WASM/lib/cmake/Qt6/qt.toolchain.cmake
exec cmake "-DQT_HOST_PATH=$(dirname "$QT_WASM")/gcc_64" "$@"
EOF

chmod +x /usr/local/bin/*

echo
echo '--> Restore the packages list to the original state'
echo

dpkg --get-selections | cut -f 1 > /tmp/packages_curr.lst
grep -Fxv -f /tmp/packages_orig.lst /tmp/packages_curr.lst | xargs apt remove -y --purge

# Complete the cleaning

apt -qq clean
rm -rf /var/lib/apt/lists/*
39 changes: 39 additions & 0 deletions feelpp-env/qt6/6.5-aqt/install_packages.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/bin/sh -xe

[ "$QT_PATH" ] || QT_PATH=/opt/Qt

[ "$ADDITIONAL_PACKAGES" ] || ADDITIONAL_PACKAGES='build-essential ninja-build'

# Init package system
apt update

echo
echo '--> Locating the shared libs required for the installed tools'
echo

find "$QT_PATH" /usr/local -executable -type f -o -name '*.so' | xargs ldd 2>/dev/null | \
grep -F '=> not found' | tr '\t' ' ' | cut -d' ' -f2 | sort -u | tee /tmp/not_found_libs.lst

echo
echo '--> Locating packages to provide the required shared libs'
echo

apt install -y apt-file
apt-file update

while read line ; do apt-file find $line | grep '^lib' | head -1; done < /tmp/not_found_libs.lst | tee /tmp/to_install_libs.lst

# TODO: Clean apt-file cache

apt autoremove -y --purge apt-file

echo
echo '--> Install the found libraries'
echo

cat /tmp/to_install_libs.lst | cut -d: -f 1 | xargs apt install -y --no-install-suggests --no-install-recommends $ADDITIONAL_PACKAGES

# Complete the cleaning

apt -qq clean
rm -rf /var/lib/apt/lists/*
28 changes: 28 additions & 0 deletions feelpp-env/qt6/6.5-aqt/install_wasm_qt6.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
export QT_VERSION=6.5.0
export QT_PATH=/opt/Qt

export SDK_PATH=/opt/emsdk
export SDK_VERSION=3.1.25
export SDK_SHA256=b8772e32043905b3af4b926f54ac7ca3faf5d5eb93105973c85c56ec60c832d5

export ADDITIONAL_PACKAGES="sudo git openssh-client ca-certificates curl python3 locales"


export DEBIAN_FRONTEND=noninteractive
export DEBCONF_NONINTERACTIVE_SEEN=true
export QT_PATH=${QT_PATH}
export QT_WASM=${QT_PATH}/${QT_VERSION}/wasm_singlethread
export EMSDK=${SDK_PATH}
export EMSDK_NODE=${SDK_PATH}/node/14.18.2_64bit/bin/node
export PATH=$PATH:${QT_PATH}/Tools/CMake/bin:${QT_PATH}/Tools/Ninja:${QT_PATH}/${QT_VERSION}/wasm_singlethread/bin:${SDK_PATH}/upstream/bin:${SDK_PATH}/upstream/emscripten:${SDK_PATH}/node/14.18.2_64bit/bin:${SDK_PATH}

dirname=$(dirname "$0")

# Install emscripten
sh $dirname/get_emsdk.sh

# Get Qt binaries with aqt
sh $dirname/get_qt.sh

# Install the required packages
sh $dirname/install_packages.sh

0 comments on commit ddcce39

Please sign in to comment.