From dd841f4a01e9c3c344ca69bfc83cb14ce3b3576a Mon Sep 17 00:00:00 2001 From: Adrian Suciu Date: Tue, 18 Oct 2022 20:08:41 +0300 Subject: [PATCH] Added Windows Dockerfile Signed-off-by: Adrian Suciu --- docker/Dockerfile | 37 ++++++++++++++++ docker/build_mingw.sh | 84 ++++++++++++++++++++++++++++++++++++ windows/kuiper-imager.nsi.in | 8 ---- 3 files changed, 121 insertions(+), 8 deletions(-) create mode 100644 docker/Dockerfile create mode 100644 docker/build_mingw.sh diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 000000000..a1e19d9c0 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,37 @@ +# select as base image matching your host to get process isolation +FROM mcr.microsoft.com/windows/servercore:ltsc2019 + +SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] +# this creates an empty file named recycle.bin which essentialy disables the recycle bin +# this hack is needed because msys seems to create some files with wierd names in recycle bin +# that freeze the docker layer when commiting +# dirty hack +RUN echo . > 'C:\$RECYCLE.BIN'; + +RUN [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; \ +Invoke-WebRequest -UseBasicParsing -uri "https://github.com/msys2/msys2-installer/releases/download/2021-07-25/msys2-base-x86_64-20210725.sfx.exe" -OutFile msys2.exe; \ +.\msys2.exe -y -oC:\\; \ +Remove-Item msys2.exe; +RUN 'mkdir C:/msys64/home/docker/ && cd C:/msys64/home/docker/' + +SHELL ["cmd", "/S", "/C"] +# set envvars PATH HOME CHERE_INVOKING MSYS_SYSTEM - https://www.msys2.org/docs/ci/#other-systems +RUN setx PATH C:\msys64\bin;C:\msys64\mingw32\bin;C:\msys64\usr\bin;%PATH% & \ +setx HOME C:\msys64\home\docker & \ +setx CHERE_INVOKING yes & \ +setx MSYSTEM MINGW64 + +WORKDIR C:\\msys64\\home\\docker +RUN C:\msys64\usr\bin\bash.exe -lc " " +SHELL ["cmd", "/S", "/C"] +RUN C:\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -Syuu" & C:\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -Syuu" & C:\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -Scc " +# install general packages needed to run build scripts +RUN C:\msys64\usr\bin\bash.exe -c 'pacman --noconfirm --needed -Sy git vim base-devel' + +# install packages and build scopy-deps +ARG BUILD_TARGET=x86_64 +ENV BUILD_TARGET=$BUILD_TARGET +RUN echo %BUILD_TARGET% + +COPY build_mingw.sh . +RUN C:\msys64\usr\bin\bash.exe -c "./build_mingw.sh install_pacman_deps" diff --git a/docker/build_mingw.sh b/docker/build_mingw.sh new file mode 100644 index 000000000..6682960ec --- /dev/null +++ b/docker/build_mingw.sh @@ -0,0 +1,84 @@ +#/bin/bash +LIBIIO_BRANCH=master +LIBAD9361_BRANCH=master +LIBAD9166_BRANCH=master + +export WORKDIR=/home/$USER/ + +init_env() { + +export ARCH=x86_64 +export MINGW_VERSION=mingw32 +export CC=/${MINGW_VERSION}/bin/${ARCH}-w64-mingw32-gcc.exe +export CXX=/${MINGW_VERSION}/bin/${ARCH}-w64-mingw32-g++.exe + +export JOBS=-j9 +export CMAKE_GENERATOR="Unix Makefiles" +export STAGING_DIR="/$MINGW_VERSION" +export MAKE_BIN="/bin/make" +export MAKE="$MAKE_BIN $JOBS" +export CMAKE_OPTS="-DCMAKE_C_COMPILER:FILEPATH=${CC}\ +-DCMAKE_CXX_COMPILER:FILEPATH=${CXX}\ +-DCMAKE_MAKE_PROGRAM:FILEPATH=${MAKE_BIN}\ +-DPKG_CONFIG_EXECUTABLE=/$MINGW_VERSION/bin/pkg-config.exe\ +-DCMAKE_MODULE_PATH=$STAGING_DIR\ +-DCMAKE_PREFIX_PATH=$STAGING_DIR/lib/cmake\ +-DCMAKE_BUILD_TYPE=RelWithDebInfo\ +-DCMAKE_STAGING_PREFIX=$STAGING_DIR\ +-DCMAKE_INSTALL_PREFIX=$STAGING_DIR" + +export CMAKE="/$MINGW_VERSION/bin/cmake" +export HOST=${MINGW_VERSION}-w64-mingw32 +export AUTOCONF_OPTS="--prefix=/mingw64 \ + --host=${ARCH}-w64-mingw32 \ + --enable-shared \ + --disable-static" +} + +install_pacman_deps() { +WINDEPS="\ +msys2-devel \ +mingw-w64-i686-toolchain \ +mingw-w64-i686-cmake \ +mingw-w64-i686-ninja \ +mingw-w64-i686-qt5-winextras \ +mingw-w64-i686-qt5 \ +mingw-w64-i686-qt5-3d \ +mingw-w64-i686-gdb \ +mingw-w64-i686-mesa \ +mingw-w64-i686-qt-creator \ +mingw-w64-i686-nsis" +pacman -S --noconfirm --needed $WINDEPS +} + + +clone() { + cd /c/ + git clone https://github.com/analogdevicesinc/adi-kuiper-imager --branch $BRANCH +} + +create_deploy() { +mkdir -p /c/adi-kuiper-imager/build/deploy +cp /c/msys64/mingw32/bin/{libbrotlicommon.dll,libbrotlidec.dll,libbrotlienc.dll,libdouble-conversion.dll,libfreetype-6.dll,libglib-2.0-0.dll,libgraphite2.dll,libharfbuzz-0.dll,libicudt*.dll,libicuin*.dll,libicuuc*.dll,libintl-8.dll,liblzma-5.dll,libmd4c.dll,libpcre-2*.dll,libpng16-16.dll,zlib1.dll,libbz2-1.dll,libiconv-2.dll,liblz4.dll,libxml2-2.dll,libzstd.dll,libgcc_s_dw2-1.dll,libstdc++-6.dll,libwinpthread-1.dll libssl*.dll libcrypto*.dll} /c/adi-kuiper-imager/build/deploy +#cp /c/OpenSSL-Win32/libeay32.dll /c/adi-kuiper-imager/build/deploy +} + +build() { +export PATH=/c/msys64/mingw32/bin:/c/msys64/usr/bin:$PATH && +cmake -B /c/adi-kuiper-imager/build -S /c/adi-kuiper-imager -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DQT_QMAKE_EXECUTABLE:STRING="/c/msys64/mingw32/bin/qmake.exe" -DCMAKE_PREFIX_PATH:STRING="/c/msys64/mingw32/bin" -DCMAKE_C_COMPILER:STRING="/c/msys64/mingw32/bin/gcc.exe" -DCMAKE_CXX_COMPILER:STRING="/c/msys64/mingw32/bin/g++.exe" -DCMAKE_MAKE_PROGRAM:FILEPATH="/c/msys64/mingw32/bin/ninja.exe" /c/adi-kuiper-imager && +cmake --build /c/adi-kuiper-imager/build --target all +} + +create_installer() { +makensis.exe /c/adi-kuiper-imager/build/kuiper-imager.nsi +} + +build_imager() { + clone + build + create_deploy + create_installer +} + +init_env +$@ \ No newline at end of file diff --git a/windows/kuiper-imager.nsi.in b/windows/kuiper-imager.nsi.in index 948d81c5d..323931393 100644 --- a/windows/kuiper-imager.nsi.in +++ b/windows/kuiper-imager.nsi.in @@ -112,18 +112,10 @@ InstallDir "$PROGRAMFILES\Kuiper Imager" ###################################################################### !insertmacro MUI_LANGUAGE "English" -!insertmacro MUI_LANGUAGE "Dutch" -!insertmacro MUI_LANGUAGE "Italian" LangString termMsg ${LANG_ENGLISH} "Kuiper Imager seems to be running and busy.$\nDo you want to terminate process?" LangString stopMsg ${LANG_ENGLISH} "Stopping Kuiper Imager" LangString win7Msg ${LANG_ENGLISH} "Windows 7 or above required" -LangString termMsg ${LANG_DUTCH} "Kuiper Imager is momenteel actief.$\nWilt u het programma afsluiten?" -LangString stopMsg ${LANG_DUTCH} "Bezig met afsluiten Kuiper Imager" -LangString win7Msg ${LANG_DUTCH} "Minimaal Windows 7 is vereist" -LangString termMsg ${LANG_ITALIAN} "Kuiper Imager sembra essere in esecuzione e occupato.$\nVuoi terminare il processo Kuiper Imager?" -LangString stopMsg ${LANG_ITALIAN} "Chiusura processo Kuiper Imager" -LangString win7Msg ${LANG_ITALIAN} "Per l'esecuzione del programma รจ richiesto Windows 7 o versioni successive" ######################################################################