Skip to content

Commit

Permalink
ci/kuiper: workflow that build Scopy for Kuiper
Browse files Browse the repository at this point in the history
Signed-off-by: Bindea Cristian <[email protected]>
  • Loading branch information
bindea-cristian committed Apr 4, 2024
1 parent 373d69e commit a987b7f
Show file tree
Hide file tree
Showing 17 changed files with 245 additions and 37 deletions.
37 changes: 37 additions & 0 deletions .github/workflows/kuiperbuild.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Kuiper Scopy Build

on: [push, pull_request]

env:
BUILD_HOST: ubuntu-22.04
USERNAME: github-actions

jobs:

build_scopy_on_ubuntu22:
runs-on: ubuntu-22.04
container:
image: cristianbindea/scopy2-kuiper:latest
options: --user root
steps:
- uses: actions/checkout@v4

- name: Build Scopy
shell: bash
run: |
cd $GITHUB_WORKSPACE
./ci/kuiper/kuiper_build_process.sh install_packages download_cmake download_crosscompiler move_sysroot build_scopy create_appdir create_appimage move_appimage
- name: Set short git commit SHA
shell: bash
run: echo "commit_sha=$(git rev-parse --short ${{ github.sha }})" >> "$GITHUB_ENV"

- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ github.workspace }}\Scopy.appimage
asset_name: scopy-linux-armhf-${{ env.commit_sha }}
tag: ${{ github.ref }}
overwrite: true
body: "Scopy armhf"
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ build/*
.vscode/*
ci/ubuntu/staging
ci/macOS/staging
ci/kuiper/staging
ci/kuiper/docker/sysroot
windows/*
core/include/scopy-core_config.h
core/include/scopy-core_export.h
Expand Down
13 changes: 13 additions & 0 deletions ci/kuiper/AppRun
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash
set -e
SELF=$(readlink -f "$0")
HERE=${SELF%/*}

export QT_PLUGIN_PATH=$HERE/usr/plugins
export QT_QPA_PLATFORM_PLUGIN_PATH=$HERE/usr/plugins/platforms
export LD_LIBRARY_PATH=$HERE/usr/lib

echo LD_LIBRARY_PATH: $LD_LIBRARY_PATH
echo PATH: $PATH
ldd $HERE/usr/bin/scopy
exec $HERE/usr/bin/scopy
Binary file added ci/kuiper/AppRun-armhf
Binary file not shown.
6 changes: 4 additions & 2 deletions ci/kuiper/cmake_toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ set(CMAKE_LIBRARY_ARCHITECTURE arm-linux-gnueabihf)
# In this case the variables CMAKE_SYSROOT and STAGING_AREA are defined as parameters to the cmake command
set(TOOLCHAIN_FILE ${STAGING_AREA}/cross-pi-gcc)
set(TOOLCHAIN_BIN ${TOOLCHAIN_FILE}/bin)
set(CMAKE_PREFIX_PATH "${CMAKE_SYSROOT}/usr/local/qt5.15")
set(CMAKE_PREFIX_PATH ${QT_LOCATION})
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SYSROOT}/usr/lib/arm-linux-gnueabihf")
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SYSROOT}/lib")
set(CMAKE_VERBOSE ON)
Expand Down Expand Up @@ -45,6 +45,8 @@ set(CMAKE_CXX_FLAGS_RELEASE "-Os -DNDEBUG" )
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,-O1 -Wl,--hash-style=gnu -mthumb -lpthread -pthread")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/lib/arm-linux-gnueabihf")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/lib")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/local/lib")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${QT_LOCATION}/lib")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${TOOLCHAIN_FILE}/arm-linux-gnueabihf/lib")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${TOOLCHAIN_FILE}/arm-linux-gnueabihf/libc/lib")
set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
Expand All @@ -56,7 +58,7 @@ set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) # Perform compiler test with static library
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_INSTALL_RPATH "$ORIGIN" "$ORIGIN/../lib" "/lib/arm-linux-gnueabihf" "/lib")
set(CMAKE_INSTALL_RPATH "$ORIGIN" "$ORIGIN/../lib" "/lib/arm-linux-gnueabihf" "/lib" "/usr/local/qt5.15/lib")
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
Expand Down
43 changes: 43 additions & 0 deletions ci/kuiper/copy-deps.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/bin/bash

set -e
SRC_DIR=$(git rev-parse --show-toplevel)
source $SRC_DIR/ci/kuiper/kuiper_build_config.sh

BINARY=$1
LOCATION=$2


if [ ! -f "${SRC_DIR}"/ci/kuiper/ldd-mod ]; then
sed 's|.*RTLDLIST=.*|RTLDLIST="/usr/arm-linux-gnueabihf/lib/ld-2.31.so /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3"|' /usr/bin/ldd | tee "${SRC_DIR}"/ci/kuiper/ldd-mod
chmod +x "${SRC_DIR}"/ci/kuiper/ldd-mod
fi

export LD_LIBRARY_PATH="${APP_DIR}/usr/lib:${SYSROOT}/lib:${SYSROOT}/lib/arm-linux-gnueabihf:${SYSROOT}/usr/arm-linux-gnueabihf/lib:${SYSROOT}/usr/local/qt5.15/lib:${SYSROOT}/usr/local/lib:${SRC_DIR}/build"
LIBS_ARRAY=()
run_ldd(){

if [ ! -z "$(${SRC_DIR}/ci/kuiper/ldd-mod $1 | grep "not found")" ]; then
echo "--- LIB NOT FOUND"
${SRC_DIR}/ci/kuiper/ldd-mod $1
exit 1
fi

for library in $("${SRC_DIR}"/ci/kuiper/ldd-mod "$1" | cut -d '>' -f 2 | awk '{print $1}')
do
# check if the library exists at that path and if it was processed already
if [ -f "${library}" ] && ! [[ "${LIBS_ARRAY[*]}" =~ "${library}" ]]; then
LIBS_ARRAY+=("${library}")
echo "---NEW: ${library}"
if [ ! -f "${LOCATION}"/"${library##*/}" ]; then
cp --verbose "${library}" "${LOCATION}"
[ -L "${library}" ] && cp --verbose "$(realpath "${library}")" "${LOCATION}"
fi
run_ldd "${library}"
fi
done
}

for arg in $BINARY; do
run_ldd "${arg}"
done
33 changes: 33 additions & 0 deletions ci/kuiper/create_docker_image.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/bash

set -ex
SRC_DIR=$(git rev-parse --show-toplevel)
source $SRC_DIR/ci/kuiper/kuiper_build_config.sh

install_packages(){
sudo apt install docker ...
}

create_sysroot(){
$SRC_DIR/ci/kuiper/create_sysroot.sh \
install_packages \
download_kuiper \
install_qemu \
extract_sysroot \
configure_sysroot
}

move_sysroot(){
sudo mv $SYSROOT $SYSROOT_DOCKER
}

create_image(){
pushd ${SRC_DIR}/ci/kuiper/docker
sudo DOCKER_BUILDKIT=0 docker build --tag cristianbindea/scopy2-kuiper .
popd
}

# install_packages
# create_sysroot
# move_sysroot
create_image
25 changes: 19 additions & 6 deletions ci/kuiper/create_sysroot.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,17 @@ extract_sysroot(){
sudo cp /etc/resolv.conf ${SYSROOT}/etc/resolv.conf
sudo umount /mnt/kuiper
sudo rm -rf /mnt/kuiper
rm -rf ${STAGING_AREA:?}/${IMAGE_FILE}
rm ${STAGING_AREA}/image*.zip
# rm -rf ${STAGING_AREA:?}/${IMAGE_FILE}
rm -rf ${STAGING_AREA}/image*.zip
}

configure_sysroot(){
cat << EOF | sudo chroot ${SYSROOT}
export DEBIAN_FRONTEND=noninteractive
ln -snf /usr/share/zoneinfo/Europe/Bucharest /etc/localtime && echo "Europe/Bucharest" > /etc/timezone
echo "LC_ALL=en_US.UTF-8" | tee -a /etc/environment
echo "LANG=en_US.UTF-8" | tee -a /etc/locale.conf
locale-gen en_US.UTF-8
sed -i 's/#deb-src/deb-src/' /etc/apt/sources.list
Expand Down Expand Up @@ -73,15 +76,15 @@ rm -rf /usr/lib/arm-linux-gnueabihf/libad9361.so* \
/usr/lib/libad9166.so* \
/usr/lib/pkgconfig/libad9166.pc
apt -y build-dep qt5-qmake libqt5gui5 libqt5webengine-data libqt5webkit5
apt -y build-dep qtbase5-dev || true
apt -y install build-essential gcc g++ gdb-multiarch cmake autoconf automake bison flex git wget pkg-config figlet gawk unzip libsndfile1-dev \
libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver \
libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver libspeechd-dev perl \
libgl1-mesa-dev libxcb-composite0-dev libxcb-cursor-dev libxcb-damage0-dev libxcb-xv0-dev \
libxcb-dpms0-dev libxcb-dri2-0-dev libxcb-ewmh-dev libxcb-imdkit-dev libxcb-xvmc0-dev \
libxcb-present-dev libxcb-record0-dev libxcb-res0-dev libxcb-xrm-dev libx11-xcb-dev libxcb-glx0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-xkb-dev libxkbcommon-x11-dev \
libxcb-screensaver0-dev libxcb-util0-dev libxcb-xf86dri0-dev libxcb-xtest0-dev
apt -y install libunwind-dev libsndfile1-dev mesa-utils* mesa-common-dev libglu1-mesa-dev freeglut3-dev mesa-common-dev python libopenal-dev
apt install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
apt -y install libunwind-dev libsndfile1-dev mesa-utils* mesa-common-dev libglu1-mesa-dev freeglut3-dev mesa-common-dev python libopenal-dev || true
apt -y install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev || true
wget https://raw.githubusercontent.com/abhiTronix/raspberry-pi-cross-compilers/master/utils/SSymlinker
sed -i 's/sudo//g' SSymlinker
Expand All @@ -94,7 +97,17 @@ chmod +x SSymlinker
./SSymlinker -s /usr/lib/arm-linux-gnueabihf/crt1.o -d /usr/lib/crt1.o
./SSymlinker -s /usr/lib/arm-linux-gnueabihf/crti.o -d /usr/lib/crti.o
EOF
}

move_and_extract_sysroot(){
if [ -f $HOME/sysroot.tar.gz ]; then
mkdir -p $STAGING_AREA
sudo tar -xf $HOME/sysroot.tar.gz --directory $STAGING_AREA
rm $HOME/sysroot.tar.gz
fi
}

fix_relativelinks(){
pushd ${STAGING_AREA}
wget $SYSROOT_RELATIVE_LINKS
chmod +x sysroot-relativelinks.py
Expand Down
55 changes: 55 additions & 0 deletions ci/kuiper/docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# docker build -t cristianbindea/scopy-kuiper:latest

FROM --platform=linux/amd64 ubuntu:20.04
SHELL ["/bin/bash", "-c"]

ARG USER=runner
ENV DEBIAN_FRONTEND=noninteractive

ENV TZ=Europe/Bucharest
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update && \
apt-get -y upgrade && \
apt-get install -y apt-utils sudo git wget flex bison pkg-config make python3 pip vim

RUN groupadd -g 1000 -r $USER && \
useradd -u 1000 -g 1000 --create-home -r $USER

#Change password
RUN echo "$USER:$USER" | chpasswd

#Make sudo passwordless
RUN echo "${USER} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/90-$USER && \
usermod -aG sudo $USER && \
usermod -aG plugdev $USER

USER $USER
ENV SYSROOT_LOCATION=/home/${USER}/sysroot
RUN mkdir -p ${SYSROOT_LOCATION}
COPY sysroot.tar.gz ${SYSROOT_LOCATION}

RUN ls -la ${SYSROOT_LOCATION}
WORKDIR /home/${USER}
RUN echo 1
RUN git clone https://github.com/analogdevicesinc/scopy -b kuiper-worflow

WORKDIR /home/${USER}/scopy

RUN ./ci/kuiper/create_sysroot.sh \
install_packages \
move_sysroot \
fix_relativelinks

RUN ./ci/kuiper/build_qt.sh \
install_packages \
download_qt \
download_crosscompiler
RUN ./ci/kuiper/build_qt.sh build_qt5.15.2


RUN ./ci/kuiper/kuiper_build_process.sh \
install_packages \
download_cmake \
download_crosscompiler \
clone
RUN ./ci/kuiper/kuiper_build_process.sh build_deps
6 changes: 4 additions & 2 deletions ci/kuiper/kuiper_build_config.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ IIOEMU_BRANCH=master

STAGING_AREA=$SRC_DIR/ci/kuiper/staging
SYSROOT=$STAGING_AREA/sysroot
SYSROOT_DOCKER=$SRC_DIR/ci/kuiper/docker/sysroot
SYSROOT_TAR=$STAGING_AREA/sysroot.tar.gz
SYSROOT_DOCKER=$SRC_DIR/ci/kuiper/docker/sysroot.tar.gz
TOOLCHAIN=$STAGING_AREA/cross-pi-gcc
TOOLCHAIN_BIN=$TOOLCHAIN/bin
TOOLCHAIN_HOST="arm-linux-gnueabihf"
Expand All @@ -36,6 +37,7 @@ RUNTIME_ARMHF=$SRC_DIR/ci/kuiper/runtime-armhf

CMAKE_OPTS=(\
-DCMAKE_SYSROOT="$SYSROOT" \
-DQT_LOCATION="$QT_LOCATION"
-DSTAGING_AREA="$STAGING_AREA" \
-DCMAKE_INSTALL_PREFIX="$SYSROOT" \
-DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE" \
Expand All @@ -45,7 +47,7 @@ CMAKE_OPTS=(\

CMAKE="$CMAKE_BIN ${CMAKE_OPTS[*]}"

QT_BUILD_LOCATION=$SYSROOT/usr/local/qt5.15
QT_BUILD_LOCATION=$QT_LOCATION
QT_SYSTEM_LOCATION=/usr/local/qt5.15

CROSS_COMPILER=$STAGING_AREA/cross-pi-gcc
Expand Down
33 changes: 11 additions & 22 deletions ci/kuiper/kuiper_build_process.sh
Original file line number Diff line number Diff line change
Expand Up @@ -278,18 +278,14 @@ create_appdir(){

EMU_BUILD_FOLDER=$STAGING_AREA/iio-emu/build

PLUGINBASE_DLL=$BUILD_FOLDER/pluginbase
CORE_DLL=$BUILD_FOLDER/core
GUI_DLL=$BUILD_FOLDER/gui
GR_UTIL_DLL=$BUILD_FOLDER/gr-util
IIOUTIL_DLL=$BUILD_FOLDER/iioutil
IIOWIDGETS_DLL=$BUILD_FOLDER/iio-widgets
COMMON_DLL=$BUILD_FOLDER/common
SCOPY_DLL=$(find $BUILD_FOLDER -maxdepth 2 -type f -name "libscopy*")
PLUGINS=$BUILD_FOLDER/plugins/plugins

REGMAP_XMLS=$BUILD_FOLDER/plugins/regmap/xmls
TRANSLATIONS_QM=$(find $BUILD_FOLDER/translations -type f -name "*.qm")

COPY_DEPS=$SRC_DIR/ci/kuiper/copy-deps.sh

rm -rf $APP_DIR
mkdir $APP_DIR
mkdir -p $APP_DIR/usr/bin
Expand All @@ -306,15 +302,7 @@ create_appdir(){
cp $EMU_BUILD_FOLDER/iio-emu $APP_DIR/usr/bin
cp $BUILD_FOLDER/scopy $APP_DIR/usr/bin

cp $PLUGINBASE_DLL/libscopy-pluginbase.so $APP_DIR/usr/lib
cp $CORE_DLL/libscopy-core.so $APP_DIR/usr/lib
cp $IIOUTIL_DLL/libscopy-iioutil.so $APP_DIR/usr/lib
cp $IIOWIDGETS_DLL/libscopy-iio-widgets.so $APP_DIR/usr/lib
cp $GUI_DLL/libscopy-gui.so $APP_DIR/usr/lib
cp $GUI_DLL/libscopy-gr-gui.so $APP_DIR/usr/lib
cp $GUI_DLL/libscopy-sigrok-gui.so $APP_DIR/usr/lib
cp $GR_UTIL_DLL/libscopy-gr-util.so $APP_DIR/usr/lib
cp $COMMON_DLL/libscopy-common.so $APP_DIR/usr/lib
cp $SCOPY_DLL $APP_DIR/usr/lib
cp -r $PLUGINS $APP_DIR/usr/share

mkdir $APP_DIR/usr/share/translations
Expand All @@ -324,17 +312,15 @@ create_appdir(){
cp -r $REGMAP_XMLS $APP_DIR/usr/share/plugins
fi


./copy-deps.sh $APP_DIR/usr/bin/scopy $APP_DIR/usr/lib
./copy-deps.sh $APP_DIR/usr/bin/iio-emu $APP_DIR/usr/lib
./copy-deps.sh $APP_DIR/usr/bin/scopy $APP_DIR/usr/lib
./copy-deps.sh "$APP_DIR/usr/share/plugins/*.so" $APP_DIR/usr/lib
$COPY_DEPS $APP_DIR/usr/bin/scopy $APP_DIR/usr/lib
$COPY_DEPS $APP_DIR/usr/bin/iio-emu $APP_DIR/usr/lib
$COPY_DEPS $APP_DIR/usr/bin/scopy $APP_DIR/usr/lib
$COPY_DEPS "$APP_DIR/usr/share/plugins/*.so" $APP_DIR/usr/lib

cp -r $QT_LOCATION/plugins $APP_DIR/usr
cp -r $SYSROOT/lib/python3.9 $APP_DIR/usr/lib
cp -r $SYSROOT/share/libsigrokdecode/decoders $APP_DIR/usr/lib


# cp $SYSROOT/usr/local/lib/libqwt.so* $APP_DIR/usr/lib
# cp $SYSROOT/lib/libiio.so* $APP_DIR/usr/lib
# cp $SYSROOT/lib/libm2k.so* $APP_DIR/usr/lib
Expand Down Expand Up @@ -428,6 +414,9 @@ create_appimage(){
chmod a+x $APP_IMAGE
}

move_appimage(){
mv $APP_IMAGE $SRC_DIR/
}

for arg in $@; do
$arg
Expand Down
Binary file added ci/kuiper/runtime-armhf
Binary file not shown.
10 changes: 10 additions & 0 deletions ci/kuiper/scopy.desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[Desktop Entry]
Version=1.0
Icon=scopy
Exec=scopy
Terminal=false
Type=Application
Categories=Science
Name=Scopy
GenericName=Oscilloscope
Comment=A software oscilloscope
Loading

0 comments on commit a987b7f

Please sign in to comment.