Skip to content

Instantly share code, notes, and snippets.

@tonosaman
Last active July 19, 2018 09:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tonosaman/a7950345f9e5e78e3e7557c452fef24b to your computer and use it in GitHub Desktop.
Save tonosaman/a7950345f9e5e78e3e7557c452fef24b to your computer and use it in GitHub Desktop.
vagrant + FreeBSD-11.2-STABLE + crochet RaspberryPi3 = clang 6.0.1(aarch64-unknown-freebsd11.2)
crochet
ports
FreeBSD-11.2-STABLE
FreeBSD-ports
.vagrant

Howto build clang-6.0 aarch64 cross toolchain

powerd by FreeBSD-11.2-STABLE

my work dir

my workdir:p70:~/xVMs/vagrant/xvisor-clang-rpi3/
build log:/vagrant/crochet/work/_.buildworld.aarch64.log
clang-4.0 (aarch64 cross):/vagrant/crochet/work/obj/arm64.aarch64/usr/src/tmp/usr/bin/clang
ports:ports/work/usr/ports/sysutils/{u-boot-rpi3,rpi-firmware}

1. Clone FreeBSD base

$ git clone -b stable/11 --depth=1 --single-branch https://github.com/freebsd/freebsd.git ~/github/FreeBSD-11.2-STABLE
$ ln -s ~/github/FreeBSD-11.2-STABLE ~/xVMs/vagrant/xvisor-clang-rpi3/FreeBSD-11.2-STABLE

2. NFS server in host

# Because FreeBSD guest extensions does not support vboxsf filetype, we use nfs.
/home/tono/xVMs/vagrant/xvisor-clang-rpi3/build  192.168.0.0/24(rw,no_subtree_check,all_squash,anonuid=1000,anongid=1000)
/home/tono/github/FreeBSD-11.2-STABLE/      192.168.0.0/24(ro,async,no_subtree_check,all_squash,anonuid=1000,anongid=1000)
/home/tono/github/FreeBSD-ports/      192.168.0.0/24(ro,async,no_subtree_check,all_squash,anonuid=1000,anongid=1000)
  • NFS requires a host-only(i.e. private) network to be created by Vagrantfile.

    config.vm.network "private_network", ip: "192.168.0.2"
    

3. vagrant up

4. vagrant provision

Opt. vagrant plugin install vagrant-vbguest

$ vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Fetching: micromachine-2.0.0.gem (100%)
Fetching: vagrant-vbguest-0.15.2.gem (100%)
Installed the plugin 'vagrant-vbguest (0.15.2)'!
  • To update guest additions -> vagrant vbguest.
vagrant ssh -c '/vagrant/crochet/work/obj/arm64.aarch64/usr/src/tmp/usr/bin/clang -std=c++17'
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://atlas.hashicorp.com/search.
config.vm.box = "freebsd/FreeBSD-11.2-STABLE"
config.vm.box_version = "2018.06.28"
config.ssh.shell = '/bin/sh'
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
config.vm.box_check_update = false
if Vagrant.has_plugin?("vagrant-vbguest") then
config.vbguest.auto_update = false
end
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
config.vm.network "private_network", ip: "192.168.1.2"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
config.vm.synced_folder ".", "/vagrant", type: "nfs", id: "host"
config.vm.synced_folder "./FreeBSD-11.2-STABLE", "/usr/src", type: "nfs", id: "base"
config.vm.synced_folder "./FreeBSD-ports", "/usr/ports", type: "nfs", id: "ports"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
config.vm.provider "virtualbox" do |vb|
# vb.gui = true
vb.name = "builder"
vb.memory = 32768
vb.cpus = 6
end
# Define a Vagrant Push strategy for pushing to Atlas. Other push strategies
# such as FTP and Heroku are also available. See the documentation at
# https://docs.vagrantup.com/v2/push/atlas.html for more information.
# config.push.define "atlas" do |push|
# push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
# end
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# sudo apt-get update
# sudo apt-get install -y apache2
# SHELL
config.vm.provision "shell", privileged:false, inline: <<-SHELL
echo "
tmpfs /tmp tmpfs rw,nosuid,noexec,mode=01777 0 0
tmpfs /var/tmp tmpfs rw,nosuid,noexec,mode=01777 0 0" | sudo tee -a /etc/fstab
sudo mount -t tmpfs -o rw,nosuid,noexec,mode=01777 tmpfs /tmp
sudo mount -t tmpfs -o rw,nosuid,noexec,mode=01777 tmpfs /var/tmp
sudo pkg update -f
sudo pkg install -y git subversion
# git clone --depth 1 https://github.com/freebsd/crochet.git /vagrant/crochet
# git clone -b stable/11 --depth=1 --single-branch https://github.com/freebsd/freebsd.git /vagrant/FreeBSD-11.2-STABLE
sudo pkg install aarch64-none-elf-gcc-6.4.0_1
(cd /usr/ports/sysutils/rpi-firmware ;
make WRKDIRPREFIX=/vagrant/ports/work DISTDIR=/vagrant/ports/distdir -DBATCH all ;
sudo make WRKDIRPREFIX=/vagrant/ports/work DISTDIR=/vagrant/ports/distdir -DBATCH install
)
(cd /usr/ports/sysutils/u-boot-rpi3 ;
sudo make WRKDIRPREFIX=/vagrant/ports/work DISTDIR=/vagrant/ports/distdir -DBATCH install)
(cd /vagrant/crochet; ./crochet.sh -u -v -b RaspberryPi3)
SHELL
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment