-
Notifications
You must be signed in to change notification settings - Fork 3.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
2 changed files
with
180 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
configs: | ||
dev: | ||
'qt_deps_unpack_parent_dir': '/home/vagrant' | ||
|
||
'qt_deps_unpack_dir': '/home/vagrant/Qt' | ||
'qt_deps_bin_unpack_dir': '/home/vagrant/Qt/5.15.2/gcc_64/bin' | ||
'qt_deps_lib_unpack_dir': '/home/vagrant/Qt/5.15.2/gcc_64/lib' | ||
'qt_deps_plugins_unpack_dir': '/home/vagrant/Qt/5.15.2/gcc_64/plugins' | ||
'qt_deps_qml_unpack_dir': '/home/vagrant/Qt/5.15.2/gcc_64/qml' | ||
|
||
'project_root_dir': '/vagrant' | ||
|
||
'qt_deps_dir': '/vagrant/shadow-build/release/Qt' | ||
'qt_deps_bin_dir': '/vagrant/shadow-build/release/Qt/bin' | ||
'qt_deps_lib_dir': '/vagrant/shadow-build/release/Qt/libs' | ||
'qt_deps_plugins_dir': '/vagrant/shadow-build/release/Qt/plugins' | ||
'qt_deps_qml_dir': '/vagrant/shadow-build/release/Qt/qml' | ||
|
||
'spec': 'linux-g++-64' | ||
'shadow_build_dir': '/vagrant/shadow-build' | ||
'pro': '/vagrant/qgroundcontrol.pro' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
# -*- mode: ruby -*- | ||
# vi: set ft=ruby : | ||
|
||
require 'yaml' | ||
|
||
current_dir = File.dirname(File.expand_path(__FILE__)) | ||
configfile = YAML.load_file("#{current_dir}/.vagrantconfig.yml") | ||
yaml_config = configfile['configs']['dev'] | ||
|
||
env_global = [ | ||
'JOBS=4', | ||
'SHADOW_BUILD_DIR=/tmp/shadow_build_dir', | ||
'CODESIGN=nocodesign', | ||
] | ||
|
||
packages = [ | ||
'build-essential', | ||
'fuse', | ||
'git', | ||
'libgstreamer-plugins-base1.0-dev', | ||
'libgstreamer1.0-0:amd64', | ||
'libgstreamer1.0-dev', | ||
'libsdl2-dev', | ||
'libudev-dev', | ||
'speech-dispatcher', | ||
'wget' | ||
] | ||
|
||
|
||
Vagrant.configure(2) do |config| | ||
# This trick is used to prefer a VM box over docker | ||
config.vm.provider "virtualbox" | ||
config.vm.provider "vmware_fusion" | ||
|
||
config.vm.box = "ubuntu/jammy64" | ||
config.vm.provider :docker do |docker, override| | ||
override.vm.box = "tknerr/baseimage-ubuntu-16.04" | ||
end | ||
config.vm.provider :virtualbox do |vb| | ||
vb.customize ["modifyvm", :id, "--memory", "6144"] | ||
vb.customize ["modifyvm", :id, "--cpus", "1"] | ||
vb.gui = true | ||
end | ||
["vmware_fusion", "vmware_workstation"].each do |p| | ||
config.vm.provider p do |v| | ||
v.vmx["memsize"] = "6144" | ||
v.vmx["numvcpus"] = "1" | ||
v.gui = true | ||
end | ||
end | ||
if Vagrant.has_plugin?("vagrant-cachier") | ||
config.cache.scope = :box | ||
config.cache.synced_folder_opts = { | ||
owner: "_apt" | ||
} | ||
end | ||
|
||
# the "dev configuration puts the build products and a suitable | ||
# environment into the /vagrant directory. This allows you to run | ||
# qgroundcontrol on the host machine with: | ||
# "cd shadow-build/release; ./qgroundcontrol-start.sh" | ||
|
||
$config_shell = <<-'SHELL' | ||
set -e | ||
set -x | ||
export %{build_env} | ||
export JOBS=$((`cat /proc/cpuinfo | grep -c ^processor`+1)) | ||
sudo apt-get update -y | ||
# we need this long command to keep packages (grub-pc esp.) from prompting for input | ||
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade | ||
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install %{apt_pkgs} xubuntu-desktop qtcreator | ||
sudo systemctl set-default graphical.target | ||
echo 'Initialising submodules' | ||
su - vagrant -c 'cd %{project_root_dir}; git submodule init && git submodule update' | ||
# with reference to https://github.com/jurplel/install-qt-action@v3/blob/master/src/main.ts and .github/workflows/linux_release.yml: | ||
echo 'Installing QT' | ||
apt-get install -y python3-pip | ||
su - vagrant -c "pip3 install --user aqtinstall" | ||
apt-get install -y patchelf | ||
dir="%{qt_deps_unpack_dir}" | ||
version="5.15.2" | ||
host="linux" | ||
target="desktop" | ||
modules="qtcharts" | ||
su - vagrant -c "rm -rf ${dir}" | ||
su - vagrant -c "mkdir -p ${dir}" | ||
su - vagrant -c "python3 -m aqt install-qt -O ${dir} ${host} ${target} ${version} -m ${modules}" | ||
mkdir -p /vagrant/shadow-build | ||
# write out a pair of scripts to make rebuilding on the VM easy: | ||
su - vagrant -c "cat <<QMAKE >do-qmake.sh | ||
#!/bin/bash | ||
set -e | ||
set -x | ||
cd %{shadow_build_dir} | ||
export LD_LIBRARY_PATH=%{qt_deps_lib_unpack_dir} | ||
export PATH=%{qt_deps_bin_unpack_dir}:\$PATH | ||
qmake -r %{pro} CONFIG+=\${CONFIG} CONFIG+=WarningsAsErrorsOn -spec %{spec} | ||
QMAKE | ||
" | ||
su - vagrant -c "cat <<MAKE >do-make.sh | ||
#!/bin/bash | ||
set -e | ||
set -x | ||
cd %{shadow_build_dir} | ||
export LD_LIBRARY_PATH=%{qt_deps_lib_unpack_dir} | ||
export PATH=%{qt_deps_bin_unpack_dir}:\$PATH | ||
make -j${JOBS} | ||
MAKE | ||
" | ||
su - vagrant -c "chmod +x do-qmake.sh do-make.sh" | ||
# increase the allowed number of open files (the link step takes a | ||
# lot of open filehandles!): | ||
echo '* soft nofile 2048' >/etc/security/limits.d/fileno.conf | ||
# now run the scripts: | ||
su - vagrant -c ./do-qmake.sh | ||
su - vagrant -c ./do-make.sh | ||
SHELL | ||
|
||
config.vm.provision "dev", type: "shell", inline: $config_shell % { | ||
:shadow_build_dir => yaml_config['shadow_build_dir'], | ||
:qt_deps_tarball => yaml_config['qt_deps_tarball'], | ||
:pro => yaml_config['pro'], | ||
:spec => yaml_config['spec'], | ||
:apt_pkgs => (packages).join(' '), | ||
:build_env => env_global.select { |item| item.is_a?(String) }.join(' '), | ||
|
||
:project_root_dir => yaml_config['project_root_dir'], | ||
:qt_deps_unpack_parent_dir => yaml_config['qt_deps_unpack_parent_dir'], | ||
:qt_deps_unpack_dir => yaml_config['qt_deps_unpack_dir'], | ||
:qt_deps_bin_unpack_dir => yaml_config['qt_deps_bin_unpack_dir'], | ||
:qt_deps_lib_unpack_dir => yaml_config['qt_deps_lib_unpack_dir'], | ||
:qt_deps_plugins_unpack_dir => yaml_config['qt_deps_plugins_unpack_dir'], | ||
:qt_deps_qml_unpack_dir => yaml_config['qt_deps_qml_unpack_dir'], | ||
|
||
:qt_deps_dir => yaml_config['qt_deps_dir'], | ||
:qt_deps_bin_dir => yaml_config['qt_deps_bin_dir'], | ||
:qt_deps_lib_dir => yaml_config['qt_deps_lib_dir'], | ||
:qt_deps_plugins_dir => yaml_config['qt_deps_plugins_dir'], | ||
:qt_deps_qml_dir => yaml_config['qt_deps_qml_dir'], | ||
} | ||
|
||
|
||
end |