SlideShare a Scribd company logo
Copyright 2020, Burkhard Stubert
Build and Run Embedded Apps
Faster from QtCreator with Docker
Burkhard Stubert
As a solo consultant, I help teams succeed with Qt embedded systems
The Problem
2
App A v3.5 App A v1.0 App B v2.3 App C v4.7
Qt SDK
Yocto 2.7
Ubuntu 18.04
Qt SDK
Yocto 2.0
Ubuntu 14.04
Qt SDK
Yocto 2.4
Ubuntu 16.04
Qt SDK
Yocto 3.1
Ubuntu 19.10
Workstation
2x Xeon (32 cores)
Ubuntu 16.04
All Qt SDKs built in
Docker containers on
same workstation
How do we best build
Apps from QtCreator?
? ? ? ?
Solution 1 (Currently Used):
Virtual Machines
3
Host OS: Windows,
MacOS, Linux
App A v3.5
Qt SDK
Yocto 2.7
Guest OS:
Ubuntu 18.04
Host OS: Windows,
MacOS, Linux
App A v1.0
Qt SDK
Yocto 2.0
Guest OS:
Ubuntu 14.04
Host OS: Windows,
MacOS, Linux
App B v2.3
Qt SDK
Yocto 2.4
Guest OS:
Ubuntu 16.04
Host OS: Windows,
MacOS, Linux
App C v4.7
Qt SDK
Yocto 3.1
Guest OS:
Ubuntu 19.10
2-3 VMs fit on same dev PC
Fast workstation and
existing containers
not used for app builds
VMs slower than containers
Solution 2 (This Talk):
Containers on Local Workstation
4
Workstation: Ubuntu 16.04
QtCreator
App A v3.5
Qt SDK
Yocto 2.7
Ubuntu 18.04
Container
QtCreator
App A v1.0
Qt SDK
Yocto 2.0
Ubuntu 14.04
Container
QtCreator
App B v2.3
Qt SDK
Yocto 2.4
Ubuntu 16.04
Container
QtCreator
App C v4.7
Qt SDK
Yocto 3.1
Ubuntu 19.10
Container
Build details hidden
in black box (container)
Reuse existing containers
on fast workstation
Solution 3 (Future):
Containers on Remote Workstation
5
Windows
QtCreator
App A v3.5
Linux
QtCreator
App A v1.0
Windows
QtCreator
App B v2.3
MacOS
QtCreator
App C v4.7
Workstation: Ubuntu 16.04
Qt SDK
Yocto 2.7
Ubuntu 18.04
Container
Qt SDK
Yocto 2.0
Ubuntu 14.04
Container
Qt SDK
Yocto 2.4
Ubuntu 16.04
Container
Qt SDK
Yocto 3.1
Ubuntu 19.10
Container
Apps developed on
different computers
Apps built in containers
on one or more
remote workstations
Copyright 2020, Burkhard Stubert
QtCreator-CMake-Docker
6
• Motivation
• Idea: Docker Wrapper for CMake
• Prerequisites
• General
• SSH Access to Device
• Building App with Docker
• Installing Qt SDK in Container
• Configuring QtCreator
• Building App with Docker-CMake
• Running App on Device
• Deployment and Run Settings
• Running App
Copyright 2020, Burkhard Stubert
How QtCreator Calls CMake (Native Build)
Stage Working Directory CMake Command
Configure
project
/tmp/QtCreator-YqhjyI/qtc-cmake-
MDHAJjOH => <work-dir-1>
cmake '-GUnix Makefiles' -C <work-dir-1>/qtcsettings.cmake
/public/Work/cuteradio-apps
Generate
build files
/public/Work/build-cuteradio-apps-
Desktop_Qt_5_14_2_GCC_64bit-
Debug => <work-dir-2>
cmake '-GUnix Makefiles' -C <work-dir-2>/qtcsettings.cmake
/public/Work/cuteradio-app
Compile <work-dir-2> cmake --build . --target all -- -j4
Install <work-dir-2> cmake --build . --target install
7
Call Docker wrapper
instead of cmake
Docker Wrapper for CMake
8
#!/bin/bash
args=$(echo $@ | sed -e "s|-GCodeBlocks - Unix Makefiles|'-
GCodeBlocks - Unix Makefiles'|g")
docker run --rm -v /public/Work:/public/Work -v /tmp:/tmp 
-w $(pwd) dr-yocto:sdk-18.04 cmake $args
Save script in
$HOME/bin/dr-cmake
Resurrect single quotes
removed by shell
/public/Work and /tmp
visible both on host PC
and in container
Copyright 2020, Burkhard Stubert
QtCreator-CMake-Docker
9
• Motivation
• Idea: Docker Wrapper for CMake
• Prerequisites
• General
• SSH Access to Device
• Building App with Docker
• Installing Qt SDK in Container
• Configuring QtCreator
• Building App with Docker-CMake
• Running App on Device
• Deployment and Run Settings
• Running App
My Setup
10
Workstation: Ubuntu 16.04
QtCreator
Cuteradio App
Qt SDK for RPi 3
Yocto 2.6
Ubuntu 18.04
Container
Only a proof of concept!
Copyright 2020, Burkhard Stubert
Prerequisites: General
• Install Docker on workstation (see [2])
• Create a Docker container (sdk-18.04) for Yocto builds (see [3])
• Build a Linux image with the Docker container (see [3])
• Or: Use a pre-built Boot2Qt image from The Qt Company (see [5] and [6])
• Build Qt SDK with the Docker container (see [4])
• Or: Use a pre-built Boot2Qt SDK from The Qt Company (see [5] and [6])
• Establish SSH connection between workstation and device (see [1] and [4])
11
Copyright 2020, Burkhard Stubert
QtCreator-CMake-Docker
12
• Motivation
• Idea: Docker Wrapper for CMake
• Prerequisites
• General
• SSH Access to Device
• Building App with Docker
• Installing Qt SDK in Container
• Configuring QtCreator
• Building App with Docker-CMake
• Running App on Device
• Deployment and Run Settings
• Running App
Prerequisites: SSH Access to Device
13
See [1] and [4]
how to add device
Copyright 2020, Burkhard Stubert
QtCreator-CMake-Docker
14
• Motivation
• Idea: Docker Wrapper for CMake
• Prerequisites
• General
• SSH Access to Device
• Building App with Docker
• Installing Qt SDK in Container
• Configuring QtCreator
• Building App with Docker-CMake
• Running App on Device
• Deployment and Run Settings
• Running App
Installing Qt SDK in Container
15
$ cd /public/Work
$ docker run –t –rm –v /public/Work:/public/Work -v /tmp:/tmp 
-w $(pwd) dr-yocto:sdk-18.04
On Workstation:
# cd cuteradio-thud/build-rpi3/tmp/deploy/sdk/
# ./poky-glibc-x86_64-meta-toolchain-qt5-cortexa7t2hf-neon-vfpv4-
toolchain-2.6.4.sh
Poky (Yocto Project Reference Distro) SDK installer version 2.6.4
=================================================================
Enter target directory for SDK (default: /opt/poky/2.6.4):
/public/Work/qt-sdk-thud
...
In Docker container:
Setting Up Build Environment in Dockerfile
16
export OECORE_NATIVE_SYSROOT="/public/Work/qt-sdk-thud/sysroots/x86_64-pokysdk-linux"
export OECORE_TARGET_SYSROOT="$SDKTARGETSYSROOT"
export OECORE_BASELIB="lib"
export OECORE_TARGET_ARCH="arm"
export OECORE_TARGET_OS="linux-gnueabi"
...
ENV OECORE_NATIVE_SYSROOT="/public/Work/qt-sdk-thud/sysroots/x86_64-pokysdk-linux"
ENV OECORE_TARGET_SYSROOT="${SDKTARGETSYSROOT}"
ENV OECORE_BASELIB="lib"
ENV OECORE_TARGET_ARCH="arm"
ENV OECORE_TARGET_OS="linux-gnueabi"
...
source environment-setup-cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi
Dockerfile
Change all environment variables
Fixing Environment Variables for QtCreator
17
export CC="arm-poky-linux-gnueabi-gcc -march=armv7ve -mthumb -mfpu=neon-vfpv4 -
mfloat-abi=hard -mcpu=cortex-a7 --sysroot=$SDKTARGETSYSROOT"
export CFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types "
export CXX="arm-poky-linux-gnueabi-g++ -march=armv7ve -mthumb -mfpu=neon-vfpv4 -
mfloat-abi=hard -mcpu=cortex-a7 --sysroot=$SDKTARGETSYSROOT"
export CXXFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types "
ENV CC="arm-poky-linux-gnueabi-gcc"
ENV CFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types -march=armv7ve -mthumb -
mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=${SDKTARGETSYSROOT}"
ENV CXX="arm-poky-linux-gnueabi-g++"
ENV CXXFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types -march=armv7ve -mthumb -
mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=${SDKTARGETSYSROOT}"
Do same with LD/LDFLAGS
and CPP/CPPFLAGS
Move options from CC to CFLAGS
and from CXX to CXXFLAGS
Copyright 2020, Burkhard Stubert
QtCreator-CMake-Docker
18
• Motivation
• Idea: Docker Wrapper for CMake
• Prerequisites
• General
• SSH Access to Device
• Building App with Docker
• Installing Qt SDK in Container
• Configuring QtCreator
• Building App with Docker-CMake
• Running App on Device
• Deployment and Run Settings
• Running App
Configuring QtCreator: CMake
19
Configuring QtCreator: Kit
20
Configuring QtCreator:
Kit – CMake Generator
21
Configuring QtCreator:
Kit – CMake Configuration
22
Copyright 2020, Burkhard Stubert
QtCreator-CMake-Docker
23
• Motivation
• Idea: Docker Wrapper for CMake
• Prerequisites
• General
• SSH Access to Device
• Building App with Docker
• Installing Qt SDK in Container
• Configuring QtCreator
• Building App with Docker-CMake
• Running App on Device
• Deployment and Run Settings
• Running App
Building the App with dr-cmake:
Switching to Project "Docker Raspberry Pi"
24
Building the App with dr-cmake:
Output when Switching the Project
25
Building the App with dr-cmake:
CMake-Output of Switching to Project
26
15:50:29: Running steps for project cuteradio-apps...
15:50:30: Starting: "/home/burkhard/bin/dr-cmake" --build . --target all
[ 16%] Automatic MOC for target cuteradio
[ 16%] Built target cuteradio_autogen
[ 33%] Automatic RCC for qml.qrc
Scanning dependencies of target cuteradio
[ 50%] Building CXX object
CMakeFiles/cuteradio.dir/cuteradio_autogen/mocs_compilation.cpp.o
[ 66%] Building CXX object CMakeFiles/cuteradio.dir/main.cpp.o
[ 83%] Building CXX object
CMakeFiles/cuteradio.dir/cuteradio_autogen/EWIEGA46WW/qrc_qml.cpp.o
[100%] Linking CXX executable cuteradio
[100%] Built target cuteradio
15:50:33: The process "/home/burkhard/bin/dr-cmake" exited normally.
15:50:33: Elapsed time: 00:05.
Copyright 2020, Burkhard Stubert
QtCreator-CMake-Docker
27
• Motivation
• Idea: Docker Wrapper for CMake
• Prerequisites
• General
• SSH Access to Device
• Building App with Docker
• Installing Qt SDK in Container
• Configuring QtCreator
• Building App with Docker-CMake
• Running App on Device
• Deployment and Run Settings
• Running App
Deployment Settings
28
Run Settings
29
Copyright 2020, Burkhard Stubert
QtCreator-CMake-Docker
30
• Motivation
• Idea: Docker Wrapper for CMake
• Prerequisites
• General
• SSH Access to Device
• Building App with Docker
• Installing Qt SDK in Container
• Configuring QtCreator
• Building App with Docker-CMake
• Running App on Device
• Deployment and Run Settings
• Running App
Running App on Device: Compile Output
31
Running App on Device: Application Output
32
Copyright 2020, Burkhard Stubert
Running App on Device: Instead of a Video
33
Ctrl+R
Copyright 2020, Burkhard Stubert
References
[1] Docker Builds from QtCreator. Basis for this talk.
[2] Using Docker Containers for Yocto Builds. How to install Docker.
[3] Qt Embedded Systems – Part 1: Building a Linux Image with Yocto. First step
to create a Qt SDK.
[4] Qt Embedded Systems – Part 2: Building a Qt SDK with Yocto. Creates the Qt
SDK used in this talk.
[5] The Qt Company, Boot to Qt Software Stack. Official documentation of
Boot2Qt.
[6] Tino Pyssysalo, Getting Started with Yocto & eLinux. How to install a Qt SDK
and start developing an app.
34
This presentation is licensed under a Creative Commons
Attribution-ShareAlike 4.0 International License.
Copyright 2020, Burkhard Stubert
Thank you J
Mail: burkhard.stubert@embeddeduse.com
Web: http://www.embeddeduse.com

More Related Content

What's hot

A practical guide to buildroot
A practical guide to buildrootA practical guide to buildroot
A practical guide to buildroot
Emertxe Information Technologies Pvt Ltd
 
Docker intro
Docker introDocker intro
Docker intro
Oleg Z
 
Jenkins CI
Jenkins CIJenkins CI
Jenkins CI
Viyaan Jhiingade
 
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
DefconRussia
 
The Yocto Project
The Yocto ProjectThe Yocto Project
The Yocto Project
rossburton
 
Continuous Integration (Jenkins/Hudson)
Continuous Integration (Jenkins/Hudson)Continuous Integration (Jenkins/Hudson)
Continuous Integration (Jenkins/Hudson)Dennys Hsieh
 
Architecture Of The Linux Kernel
Architecture Of The Linux KernelArchitecture Of The Linux Kernel
Architecture Of The Linux Kernel
guest547d74
 
Docker networking Tutorial 101
Docker networking Tutorial 101Docker networking Tutorial 101
Docker networking Tutorial 101
LorisPack Project
 
Linux Serial Driver
Linux Serial DriverLinux Serial Driver
Linux Serial Driver
艾鍗科技
 
Docker basics
Docker basicsDocker basics
Docker basics
AmanSoni129
 
Introduction to Docker Compose
Introduction to Docker ComposeIntroduction to Docker Compose
Introduction to Docker Compose
Ajeet Singh Raina
 
리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDB리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDB
Manjong Han
 
Kubernetes vs Docker Swarm | Container Orchestration War | Kubernetes Trainin...
Kubernetes vs Docker Swarm | Container Orchestration War | Kubernetes Trainin...Kubernetes vs Docker Swarm | Container Orchestration War | Kubernetes Trainin...
Kubernetes vs Docker Swarm | Container Orchestration War | Kubernetes Trainin...
Edureka!
 
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
Valerio Radice
 
Qt Installer Framework
Qt Installer FrameworkQt Installer Framework
Qt Installer Framework
ICS
 
Exploring Docker in CI/CD
Exploring Docker in CI/CDExploring Docker in CI/CD
Exploring Docker in CI/CD
Henry Huang
 
Yocto project and open embedded training
Yocto project and open embedded trainingYocto project and open embedded training
Yocto project and open embedded training
H Ming
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
Phuc Nguyen
 
Docker multi-stage build
Docker multi-stage buildDocker multi-stage build
Docker multi-stage build
Alexei Ledenev
 
Android CTS training
Android CTS trainingAndroid CTS training
Android CTS training
jtbuaa
 

What's hot (20)

A practical guide to buildroot
A practical guide to buildrootA practical guide to buildroot
A practical guide to buildroot
 
Docker intro
Docker introDocker intro
Docker intro
 
Jenkins CI
Jenkins CIJenkins CI
Jenkins CI
 
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
 
The Yocto Project
The Yocto ProjectThe Yocto Project
The Yocto Project
 
Continuous Integration (Jenkins/Hudson)
Continuous Integration (Jenkins/Hudson)Continuous Integration (Jenkins/Hudson)
Continuous Integration (Jenkins/Hudson)
 
Architecture Of The Linux Kernel
Architecture Of The Linux KernelArchitecture Of The Linux Kernel
Architecture Of The Linux Kernel
 
Docker networking Tutorial 101
Docker networking Tutorial 101Docker networking Tutorial 101
Docker networking Tutorial 101
 
Linux Serial Driver
Linux Serial DriverLinux Serial Driver
Linux Serial Driver
 
Docker basics
Docker basicsDocker basics
Docker basics
 
Introduction to Docker Compose
Introduction to Docker ComposeIntroduction to Docker Compose
Introduction to Docker Compose
 
리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDB리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDB
 
Kubernetes vs Docker Swarm | Container Orchestration War | Kubernetes Trainin...
Kubernetes vs Docker Swarm | Container Orchestration War | Kubernetes Trainin...Kubernetes vs Docker Swarm | Container Orchestration War | Kubernetes Trainin...
Kubernetes vs Docker Swarm | Container Orchestration War | Kubernetes Trainin...
 
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
 
Qt Installer Framework
Qt Installer FrameworkQt Installer Framework
Qt Installer Framework
 
Exploring Docker in CI/CD
Exploring Docker in CI/CDExploring Docker in CI/CD
Exploring Docker in CI/CD
 
Yocto project and open embedded training
Yocto project and open embedded trainingYocto project and open embedded training
Yocto project and open embedded training
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Docker multi-stage build
Docker multi-stage buildDocker multi-stage build
Docker multi-stage build
 
Android CTS training
Android CTS trainingAndroid CTS training
Android CTS training
 

Similar to Build and run embedded apps faster from qt creator with docker

Programming IoT with Docker: How to Start?
Programming IoT with Docker: How to Start?Programming IoT with Docker: How to Start?
Programming IoT with Docker: How to Start?
msyukor
 
Docker
DockerDocker
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
Mando Stam
 
Docker engine - Indroduc
Docker engine - IndroducDocker engine - Indroduc
Docker engine - Indroduc
Al Gifari
 
Delivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devicesDelivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devices
Ajeet Singh Raina
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
Troublemaker Khunpech
 
Flutter Vikings 2022 - Full Stack Dart
Flutter Vikings 2022  - Full Stack DartFlutter Vikings 2022  - Full Stack Dart
Flutter Vikings 2022 - Full Stack Dart
Chris Swan
 
[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안
양재동 코드랩
 
Présentation de Docker
Présentation de DockerPrésentation de Docker
Présentation de Docker
Proto204
 
Deploy django apps using docker
Deploy django apps using dockerDeploy django apps using docker
Deploy django apps using docker
Thomas Kremmel
 
Part 6 Docker Toolbox - Mac
Part 6 Docker Toolbox - MacPart 6 Docker Toolbox - Mac
Part 6 Docker Toolbox - Mac
Biswajit De
 
Dayta AI Seminar - Kubernetes, Docker and AI on Cloud
Dayta AI Seminar - Kubernetes, Docker and AI on CloudDayta AI Seminar - Kubernetes, Docker and AI on Cloud
Dayta AI Seminar - Kubernetes, Docker and AI on Cloud
Jung-Hong Kim
 
Deep Learning Edge
Deep Learning Edge Deep Learning Edge
Deep Learning Edge
Ganesan Narayanasamy
 
Quantifying Your World with AI & Docker on the Edge | OSCONF 2020 Jaipur
Quantifying Your World with AI & Docker  on the Edge | OSCONF 2020 JaipurQuantifying Your World with AI & Docker  on the Edge | OSCONF 2020 Jaipur
Quantifying Your World with AI & Docker on the Edge | OSCONF 2020 Jaipur
Ajeet Singh Raina
 
Develop with docker 2014 aug
Develop with docker 2014 augDevelop with docker 2014 aug
Develop with docker 2014 aug
Vincent De Smet
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a pro
sparkfabrik
 
Dockerizing Ruby Applications - The Best Practices
Dockerizing Ruby Applications - The Best PracticesDockerizing Ruby Applications - The Best Practices
Dockerizing Ruby Applications - The Best Practices
Kontena, Inc.
 
Scaling Docker Containers using Kubernetes and Azure Container Service
Scaling Docker Containers using Kubernetes and Azure Container ServiceScaling Docker Containers using Kubernetes and Azure Container Service
Scaling Docker Containers using Kubernetes and Azure Container Service
Ben Hall
 
Real World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionReal World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and Production
Ben Hall
 
Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4
Binary Studio
 

Similar to Build and run embedded apps faster from qt creator with docker (20)

Programming IoT with Docker: How to Start?
Programming IoT with Docker: How to Start?Programming IoT with Docker: How to Start?
Programming IoT with Docker: How to Start?
 
Docker
DockerDocker
Docker
 
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
 
Docker engine - Indroduc
Docker engine - IndroducDocker engine - Indroduc
Docker engine - Indroduc
 
Delivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devicesDelivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devices
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
 
Flutter Vikings 2022 - Full Stack Dart
Flutter Vikings 2022  - Full Stack DartFlutter Vikings 2022  - Full Stack Dart
Flutter Vikings 2022 - Full Stack Dart
 
[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안
 
Présentation de Docker
Présentation de DockerPrésentation de Docker
Présentation de Docker
 
Deploy django apps using docker
Deploy django apps using dockerDeploy django apps using docker
Deploy django apps using docker
 
Part 6 Docker Toolbox - Mac
Part 6 Docker Toolbox - MacPart 6 Docker Toolbox - Mac
Part 6 Docker Toolbox - Mac
 
Dayta AI Seminar - Kubernetes, Docker and AI on Cloud
Dayta AI Seminar - Kubernetes, Docker and AI on CloudDayta AI Seminar - Kubernetes, Docker and AI on Cloud
Dayta AI Seminar - Kubernetes, Docker and AI on Cloud
 
Deep Learning Edge
Deep Learning Edge Deep Learning Edge
Deep Learning Edge
 
Quantifying Your World with AI & Docker on the Edge | OSCONF 2020 Jaipur
Quantifying Your World with AI & Docker  on the Edge | OSCONF 2020 JaipurQuantifying Your World with AI & Docker  on the Edge | OSCONF 2020 Jaipur
Quantifying Your World with AI & Docker on the Edge | OSCONF 2020 Jaipur
 
Develop with docker 2014 aug
Develop with docker 2014 augDevelop with docker 2014 aug
Develop with docker 2014 aug
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a pro
 
Dockerizing Ruby Applications - The Best Practices
Dockerizing Ruby Applications - The Best PracticesDockerizing Ruby Applications - The Best Practices
Dockerizing Ruby Applications - The Best Practices
 
Scaling Docker Containers using Kubernetes and Azure Container Service
Scaling Docker Containers using Kubernetes and Azure Container ServiceScaling Docker Containers using Kubernetes and Azure Container Service
Scaling Docker Containers using Kubernetes and Azure Container Service
 
Real World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionReal World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and Production
 
Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4
 

More from Qt

Learn how to addressing medical and industrial challenges with BlackBerry QNX...
Learn how to addressing medical and industrial challenges with BlackBerry QNX...Learn how to addressing medical and industrial challenges with BlackBerry QNX...
Learn how to addressing medical and industrial challenges with BlackBerry QNX...
Qt
 
Turn your product into a revenue machine with the new Qt Digital Advertising ...
Turn your product into a revenue machine with the new Qt Digital Advertising ...Turn your product into a revenue machine with the new Qt Digital Advertising ...
Turn your product into a revenue machine with the new Qt Digital Advertising ...
Qt
 
Modern microcontroller (mcu) application development with qt
Modern microcontroller (mcu) application development with qtModern microcontroller (mcu) application development with qt
Modern microcontroller (mcu) application development with qt
Qt
 
Improve Time to Market for Industrial Edge Devices
Improve Time to Market for Industrial Edge DevicesImprove Time to Market for Industrial Edge Devices
Improve Time to Market for Industrial Edge Devices
Qt
 
How are Companies Overcoming the Global Chip Shortage
How are Companies Overcoming the Global Chip Shortage How are Companies Overcoming the Global Chip Shortage
How are Companies Overcoming the Global Chip Shortage
Qt
 
Meet Qt 6.2 LTS - Ask Us Anything!
Meet Qt 6.2 LTS - Ask Us Anything!Meet Qt 6.2 LTS - Ask Us Anything!
Meet Qt 6.2 LTS - Ask Us Anything!
Qt
 
UI/UX Design Trends in Appliances
UI/UX Design Trends in AppliancesUI/UX Design Trends in Appliances
UI/UX Design Trends in Appliances
Qt
 
Qt 6.2 lts vs. qt 5.15 the big feature parity comparison
Qt 6.2 lts vs. qt 5.15 the big feature parity comparisonQt 6.2 lts vs. qt 5.15 the big feature parity comparison
Qt 6.2 lts vs. qt 5.15 the big feature parity comparison
Qt
 
Meet Qt Canada
Meet Qt CanadaMeet Qt Canada
Meet Qt Canada
Qt
 
Machine learning meets embedded development
Machine learning meets embedded developmentMachine learning meets embedded development
Machine learning meets embedded development
Qt
 
Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170
Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170
Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170
Qt
 
Companion App Design with Qt
Companion App Design with QtCompanion App Design with Qt
Companion App Design with Qt
Qt
 
Meet Qt 6.0
Meet Qt 6.0 Meet Qt 6.0
Meet Qt 6.0
Qt
 
Qt Core UI, Live Forum
Qt Core UI, Live ForumQt Core UI, Live Forum
Qt Core UI, Live Forum
Qt
 
Top 10 User Interface Trends
Top 10 User Interface Trends Top 10 User Interface Trends
Top 10 User Interface Trends
Qt
 
Embracing Qt for Python
Embracing Qt for PythonEmbracing Qt for Python
Embracing Qt for Python
Qt
 
10 PRINCIPAIS RAZÕES PARA TRABALHAR COM
10 PRINCIPAIS RAZÕES PARA TRABALHAR COM10 PRINCIPAIS RAZÕES PARA TRABALHAR COM
10 PRINCIPAIS RAZÕES PARA TRABALHAR COM
Qt
 
How to create a medical device proof of-concept prototype overnight
How to create a medical device proof of-concept prototype overnightHow to create a medical device proof of-concept prototype overnight
How to create a medical device proof of-concept prototype overnight
Qt
 
Qt Software Development Framework - Medical
Qt Software Development Framework - Medical Qt Software Development Framework - Medical
Qt Software Development Framework - Medical
Qt
 
Qt Technology Overview for: MedAcuity
Qt Technology Overview for: MedAcuityQt Technology Overview for: MedAcuity
Qt Technology Overview for: MedAcuity
Qt
 

More from Qt (20)

Learn how to addressing medical and industrial challenges with BlackBerry QNX...
Learn how to addressing medical and industrial challenges with BlackBerry QNX...Learn how to addressing medical and industrial challenges with BlackBerry QNX...
Learn how to addressing medical and industrial challenges with BlackBerry QNX...
 
Turn your product into a revenue machine with the new Qt Digital Advertising ...
Turn your product into a revenue machine with the new Qt Digital Advertising ...Turn your product into a revenue machine with the new Qt Digital Advertising ...
Turn your product into a revenue machine with the new Qt Digital Advertising ...
 
Modern microcontroller (mcu) application development with qt
Modern microcontroller (mcu) application development with qtModern microcontroller (mcu) application development with qt
Modern microcontroller (mcu) application development with qt
 
Improve Time to Market for Industrial Edge Devices
Improve Time to Market for Industrial Edge DevicesImprove Time to Market for Industrial Edge Devices
Improve Time to Market for Industrial Edge Devices
 
How are Companies Overcoming the Global Chip Shortage
How are Companies Overcoming the Global Chip Shortage How are Companies Overcoming the Global Chip Shortage
How are Companies Overcoming the Global Chip Shortage
 
Meet Qt 6.2 LTS - Ask Us Anything!
Meet Qt 6.2 LTS - Ask Us Anything!Meet Qt 6.2 LTS - Ask Us Anything!
Meet Qt 6.2 LTS - Ask Us Anything!
 
UI/UX Design Trends in Appliances
UI/UX Design Trends in AppliancesUI/UX Design Trends in Appliances
UI/UX Design Trends in Appliances
 
Qt 6.2 lts vs. qt 5.15 the big feature parity comparison
Qt 6.2 lts vs. qt 5.15 the big feature parity comparisonQt 6.2 lts vs. qt 5.15 the big feature parity comparison
Qt 6.2 lts vs. qt 5.15 the big feature parity comparison
 
Meet Qt Canada
Meet Qt CanadaMeet Qt Canada
Meet Qt Canada
 
Machine learning meets embedded development
Machine learning meets embedded developmentMachine learning meets embedded development
Machine learning meets embedded development
 
Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170
Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170
Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170
 
Companion App Design with Qt
Companion App Design with QtCompanion App Design with Qt
Companion App Design with Qt
 
Meet Qt 6.0
Meet Qt 6.0 Meet Qt 6.0
Meet Qt 6.0
 
Qt Core UI, Live Forum
Qt Core UI, Live ForumQt Core UI, Live Forum
Qt Core UI, Live Forum
 
Top 10 User Interface Trends
Top 10 User Interface Trends Top 10 User Interface Trends
Top 10 User Interface Trends
 
Embracing Qt for Python
Embracing Qt for PythonEmbracing Qt for Python
Embracing Qt for Python
 
10 PRINCIPAIS RAZÕES PARA TRABALHAR COM
10 PRINCIPAIS RAZÕES PARA TRABALHAR COM10 PRINCIPAIS RAZÕES PARA TRABALHAR COM
10 PRINCIPAIS RAZÕES PARA TRABALHAR COM
 
How to create a medical device proof of-concept prototype overnight
How to create a medical device proof of-concept prototype overnightHow to create a medical device proof of-concept prototype overnight
How to create a medical device proof of-concept prototype overnight
 
Qt Software Development Framework - Medical
Qt Software Development Framework - Medical Qt Software Development Framework - Medical
Qt Software Development Framework - Medical
 
Qt Technology Overview for: MedAcuity
Qt Technology Overview for: MedAcuityQt Technology Overview for: MedAcuity
Qt Technology Overview for: MedAcuity
 

Recently uploaded

A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 

Recently uploaded (20)

A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 

Build and run embedded apps faster from qt creator with docker

  • 1.
  • 2.
  • 3. Copyright 2020, Burkhard Stubert Build and Run Embedded Apps Faster from QtCreator with Docker Burkhard Stubert As a solo consultant, I help teams succeed with Qt embedded systems
  • 4. The Problem 2 App A v3.5 App A v1.0 App B v2.3 App C v4.7 Qt SDK Yocto 2.7 Ubuntu 18.04 Qt SDK Yocto 2.0 Ubuntu 14.04 Qt SDK Yocto 2.4 Ubuntu 16.04 Qt SDK Yocto 3.1 Ubuntu 19.10 Workstation 2x Xeon (32 cores) Ubuntu 16.04 All Qt SDKs built in Docker containers on same workstation How do we best build Apps from QtCreator? ? ? ? ?
  • 5. Solution 1 (Currently Used): Virtual Machines 3 Host OS: Windows, MacOS, Linux App A v3.5 Qt SDK Yocto 2.7 Guest OS: Ubuntu 18.04 Host OS: Windows, MacOS, Linux App A v1.0 Qt SDK Yocto 2.0 Guest OS: Ubuntu 14.04 Host OS: Windows, MacOS, Linux App B v2.3 Qt SDK Yocto 2.4 Guest OS: Ubuntu 16.04 Host OS: Windows, MacOS, Linux App C v4.7 Qt SDK Yocto 3.1 Guest OS: Ubuntu 19.10 2-3 VMs fit on same dev PC Fast workstation and existing containers not used for app builds VMs slower than containers
  • 6. Solution 2 (This Talk): Containers on Local Workstation 4 Workstation: Ubuntu 16.04 QtCreator App A v3.5 Qt SDK Yocto 2.7 Ubuntu 18.04 Container QtCreator App A v1.0 Qt SDK Yocto 2.0 Ubuntu 14.04 Container QtCreator App B v2.3 Qt SDK Yocto 2.4 Ubuntu 16.04 Container QtCreator App C v4.7 Qt SDK Yocto 3.1 Ubuntu 19.10 Container Build details hidden in black box (container) Reuse existing containers on fast workstation
  • 7. Solution 3 (Future): Containers on Remote Workstation 5 Windows QtCreator App A v3.5 Linux QtCreator App A v1.0 Windows QtCreator App B v2.3 MacOS QtCreator App C v4.7 Workstation: Ubuntu 16.04 Qt SDK Yocto 2.7 Ubuntu 18.04 Container Qt SDK Yocto 2.0 Ubuntu 14.04 Container Qt SDK Yocto 2.4 Ubuntu 16.04 Container Qt SDK Yocto 3.1 Ubuntu 19.10 Container Apps developed on different computers Apps built in containers on one or more remote workstations
  • 8. Copyright 2020, Burkhard Stubert QtCreator-CMake-Docker 6 • Motivation • Idea: Docker Wrapper for CMake • Prerequisites • General • SSH Access to Device • Building App with Docker • Installing Qt SDK in Container • Configuring QtCreator • Building App with Docker-CMake • Running App on Device • Deployment and Run Settings • Running App
  • 9. Copyright 2020, Burkhard Stubert How QtCreator Calls CMake (Native Build) Stage Working Directory CMake Command Configure project /tmp/QtCreator-YqhjyI/qtc-cmake- MDHAJjOH => <work-dir-1> cmake '-GUnix Makefiles' -C <work-dir-1>/qtcsettings.cmake /public/Work/cuteradio-apps Generate build files /public/Work/build-cuteradio-apps- Desktop_Qt_5_14_2_GCC_64bit- Debug => <work-dir-2> cmake '-GUnix Makefiles' -C <work-dir-2>/qtcsettings.cmake /public/Work/cuteradio-app Compile <work-dir-2> cmake --build . --target all -- -j4 Install <work-dir-2> cmake --build . --target install 7 Call Docker wrapper instead of cmake
  • 10. Docker Wrapper for CMake 8 #!/bin/bash args=$(echo $@ | sed -e "s|-GCodeBlocks - Unix Makefiles|'- GCodeBlocks - Unix Makefiles'|g") docker run --rm -v /public/Work:/public/Work -v /tmp:/tmp -w $(pwd) dr-yocto:sdk-18.04 cmake $args Save script in $HOME/bin/dr-cmake Resurrect single quotes removed by shell /public/Work and /tmp visible both on host PC and in container
  • 11. Copyright 2020, Burkhard Stubert QtCreator-CMake-Docker 9 • Motivation • Idea: Docker Wrapper for CMake • Prerequisites • General • SSH Access to Device • Building App with Docker • Installing Qt SDK in Container • Configuring QtCreator • Building App with Docker-CMake • Running App on Device • Deployment and Run Settings • Running App
  • 12. My Setup 10 Workstation: Ubuntu 16.04 QtCreator Cuteradio App Qt SDK for RPi 3 Yocto 2.6 Ubuntu 18.04 Container Only a proof of concept!
  • 13. Copyright 2020, Burkhard Stubert Prerequisites: General • Install Docker on workstation (see [2]) • Create a Docker container (sdk-18.04) for Yocto builds (see [3]) • Build a Linux image with the Docker container (see [3]) • Or: Use a pre-built Boot2Qt image from The Qt Company (see [5] and [6]) • Build Qt SDK with the Docker container (see [4]) • Or: Use a pre-built Boot2Qt SDK from The Qt Company (see [5] and [6]) • Establish SSH connection between workstation and device (see [1] and [4]) 11
  • 14. Copyright 2020, Burkhard Stubert QtCreator-CMake-Docker 12 • Motivation • Idea: Docker Wrapper for CMake • Prerequisites • General • SSH Access to Device • Building App with Docker • Installing Qt SDK in Container • Configuring QtCreator • Building App with Docker-CMake • Running App on Device • Deployment and Run Settings • Running App
  • 15. Prerequisites: SSH Access to Device 13 See [1] and [4] how to add device
  • 16. Copyright 2020, Burkhard Stubert QtCreator-CMake-Docker 14 • Motivation • Idea: Docker Wrapper for CMake • Prerequisites • General • SSH Access to Device • Building App with Docker • Installing Qt SDK in Container • Configuring QtCreator • Building App with Docker-CMake • Running App on Device • Deployment and Run Settings • Running App
  • 17. Installing Qt SDK in Container 15 $ cd /public/Work $ docker run –t –rm –v /public/Work:/public/Work -v /tmp:/tmp -w $(pwd) dr-yocto:sdk-18.04 On Workstation: # cd cuteradio-thud/build-rpi3/tmp/deploy/sdk/ # ./poky-glibc-x86_64-meta-toolchain-qt5-cortexa7t2hf-neon-vfpv4- toolchain-2.6.4.sh Poky (Yocto Project Reference Distro) SDK installer version 2.6.4 ================================================================= Enter target directory for SDK (default: /opt/poky/2.6.4): /public/Work/qt-sdk-thud ... In Docker container:
  • 18. Setting Up Build Environment in Dockerfile 16 export OECORE_NATIVE_SYSROOT="/public/Work/qt-sdk-thud/sysroots/x86_64-pokysdk-linux" export OECORE_TARGET_SYSROOT="$SDKTARGETSYSROOT" export OECORE_BASELIB="lib" export OECORE_TARGET_ARCH="arm" export OECORE_TARGET_OS="linux-gnueabi" ... ENV OECORE_NATIVE_SYSROOT="/public/Work/qt-sdk-thud/sysroots/x86_64-pokysdk-linux" ENV OECORE_TARGET_SYSROOT="${SDKTARGETSYSROOT}" ENV OECORE_BASELIB="lib" ENV OECORE_TARGET_ARCH="arm" ENV OECORE_TARGET_OS="linux-gnueabi" ... source environment-setup-cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi Dockerfile Change all environment variables
  • 19. Fixing Environment Variables for QtCreator 17 export CC="arm-poky-linux-gnueabi-gcc -march=armv7ve -mthumb -mfpu=neon-vfpv4 - mfloat-abi=hard -mcpu=cortex-a7 --sysroot=$SDKTARGETSYSROOT" export CFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types " export CXX="arm-poky-linux-gnueabi-g++ -march=armv7ve -mthumb -mfpu=neon-vfpv4 - mfloat-abi=hard -mcpu=cortex-a7 --sysroot=$SDKTARGETSYSROOT" export CXXFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types " ENV CC="arm-poky-linux-gnueabi-gcc" ENV CFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types -march=armv7ve -mthumb - mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=${SDKTARGETSYSROOT}" ENV CXX="arm-poky-linux-gnueabi-g++" ENV CXXFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types -march=armv7ve -mthumb - mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=${SDKTARGETSYSROOT}" Do same with LD/LDFLAGS and CPP/CPPFLAGS Move options from CC to CFLAGS and from CXX to CXXFLAGS
  • 20. Copyright 2020, Burkhard Stubert QtCreator-CMake-Docker 18 • Motivation • Idea: Docker Wrapper for CMake • Prerequisites • General • SSH Access to Device • Building App with Docker • Installing Qt SDK in Container • Configuring QtCreator • Building App with Docker-CMake • Running App on Device • Deployment and Run Settings • Running App
  • 23. Configuring QtCreator: Kit – CMake Generator 21
  • 24. Configuring QtCreator: Kit – CMake Configuration 22
  • 25. Copyright 2020, Burkhard Stubert QtCreator-CMake-Docker 23 • Motivation • Idea: Docker Wrapper for CMake • Prerequisites • General • SSH Access to Device • Building App with Docker • Installing Qt SDK in Container • Configuring QtCreator • Building App with Docker-CMake • Running App on Device • Deployment and Run Settings • Running App
  • 26. Building the App with dr-cmake: Switching to Project "Docker Raspberry Pi" 24
  • 27. Building the App with dr-cmake: Output when Switching the Project 25
  • 28. Building the App with dr-cmake: CMake-Output of Switching to Project 26 15:50:29: Running steps for project cuteradio-apps... 15:50:30: Starting: "/home/burkhard/bin/dr-cmake" --build . --target all [ 16%] Automatic MOC for target cuteradio [ 16%] Built target cuteradio_autogen [ 33%] Automatic RCC for qml.qrc Scanning dependencies of target cuteradio [ 50%] Building CXX object CMakeFiles/cuteradio.dir/cuteradio_autogen/mocs_compilation.cpp.o [ 66%] Building CXX object CMakeFiles/cuteradio.dir/main.cpp.o [ 83%] Building CXX object CMakeFiles/cuteradio.dir/cuteradio_autogen/EWIEGA46WW/qrc_qml.cpp.o [100%] Linking CXX executable cuteradio [100%] Built target cuteradio 15:50:33: The process "/home/burkhard/bin/dr-cmake" exited normally. 15:50:33: Elapsed time: 00:05.
  • 29. Copyright 2020, Burkhard Stubert QtCreator-CMake-Docker 27 • Motivation • Idea: Docker Wrapper for CMake • Prerequisites • General • SSH Access to Device • Building App with Docker • Installing Qt SDK in Container • Configuring QtCreator • Building App with Docker-CMake • Running App on Device • Deployment and Run Settings • Running App
  • 32. Copyright 2020, Burkhard Stubert QtCreator-CMake-Docker 30 • Motivation • Idea: Docker Wrapper for CMake • Prerequisites • General • SSH Access to Device • Building App with Docker • Installing Qt SDK in Container • Configuring QtCreator • Building App with Docker-CMake • Running App on Device • Deployment and Run Settings • Running App
  • 33. Running App on Device: Compile Output 31
  • 34. Running App on Device: Application Output 32
  • 35. Copyright 2020, Burkhard Stubert Running App on Device: Instead of a Video 33 Ctrl+R
  • 36. Copyright 2020, Burkhard Stubert References [1] Docker Builds from QtCreator. Basis for this talk. [2] Using Docker Containers for Yocto Builds. How to install Docker. [3] Qt Embedded Systems – Part 1: Building a Linux Image with Yocto. First step to create a Qt SDK. [4] Qt Embedded Systems – Part 2: Building a Qt SDK with Yocto. Creates the Qt SDK used in this talk. [5] The Qt Company, Boot to Qt Software Stack. Official documentation of Boot2Qt. [6] Tino Pyssysalo, Getting Started with Yocto & eLinux. How to install a Qt SDK and start developing an app. 34
  • 37. This presentation is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Copyright 2020, Burkhard Stubert Thank you J Mail: burkhard.stubert@embeddeduse.com Web: http://www.embeddeduse.com