From 9c770d5ea0a2c22464845dd711c0756ccd1d9175 Mon Sep 17 00:00:00 2001
From: David Lynch <david.lynch@unimelb.edu.au>
Date: Tue, 21 Sep 2021 14:06:05 +1000
Subject: [PATCH] // Initial Commit

---
 Vagrantfile                            | 75 ++++++++++++++++++++
 quartus-free/51-usbblaster.rules       |  7 ++
 quartus-free/base_modelsim-ase.desktop |  9 +++
 quartus-free/base_modelsim-ase.sh      |  1 +
 quartus-free/base_quartus.desktop      |  9 +++
 quartus-free/base_quartus.sh           | 10 +++
 quartus-free/modelsim-ase.desktop      |  9 +++
 quartus-free/modelsim-ase.sh           |  1 +
 quartus-free/quartus.desktop           |  9 +++
 quartus-free/quartus.sh                | 10 +++
 run.sh                                 |  7 ++
 scripts/sddm_fix.sh                    | 11 +++
 scripts/setup_dependencies.sh          | 68 ++++++++++++++++++
 scripts/setup_host.sh                  |  7 ++
 scripts/setup_quartus.sh               | 96 ++++++++++++++++++++++++++
 15 files changed, 329 insertions(+)
 create mode 100644 Vagrantfile
 create mode 100644 quartus-free/51-usbblaster.rules
 create mode 100644 quartus-free/base_modelsim-ase.desktop
 create mode 100644 quartus-free/base_modelsim-ase.sh
 create mode 100644 quartus-free/base_quartus.desktop
 create mode 100644 quartus-free/base_quartus.sh
 create mode 100644 quartus-free/modelsim-ase.desktop
 create mode 100644 quartus-free/modelsim-ase.sh
 create mode 100644 quartus-free/quartus.desktop
 create mode 100644 quartus-free/quartus.sh
 create mode 100644 run.sh
 create mode 100644 scripts/sddm_fix.sh
 create mode 100644 scripts/setup_dependencies.sh
 create mode 100644 scripts/setup_host.sh
 create mode 100644 scripts/setup_quartus.sh

diff --git a/Vagrantfile b/Vagrantfile
new file mode 100644
index 0000000..2d9c3f4
--- /dev/null
+++ b/Vagrantfile
@@ -0,0 +1,75 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+Vagrant.configure("2") do |config|
+    config.vm.define "focal", primary: true do |focal|
+		focal.vm.box = "ubuntu/focal64"
+		focal.vm.synced_folder ".", "/shared",
+                owner: "vagrant", group: "vagrant"
+        focal.vm.provider "virtualbox" do |vb|
+			vb.gui = true
+			vb.name = "Quartus_Ubuntu"
+			vb.memory = "8192"
+			vb.customize ["modifyvm", :id, "--vram", "128"]
+            vb.customize ["modifyvm", :id, "--graphicscontroller", "vmsvga"]
+			vb.customize ["modifyvm", :id, "--accelerate3d", "on"]
+            vb.customize ["modifyvm", :id, "--audioin", "on"]
+            vb.customize ["modifyvm", :id, "--audioout", "on"]
+            vb.customize ["modifyvm", :id, "--audiocontroller", "hda"]
+			disk_image = File.join(File.dirname(File.expand_path(__FILE__)),
+				'ubuntu_20_04.vdi')
+			unless File.exist?(disk_image)
+			vb.customize ['createhd',
+						'--filename', disk_image,
+						'--size', 160 * 1024]
+			end
+			vb.customize ['storageattach', :id,
+						  '--storagectl', 'SCSI',
+						  '--port', 2, '--device', 0,
+						  '--type', 'hdd',
+						  '--medium', disk_image]
+			vb.customize ['storageattach', :id,
+						  '--storagectl', 'IDE',
+						  '--port', '0', '--device', '1',
+						  '--type', 'dvddrive',
+						  '--medium', 'emptydrive']
+		end
+
+		focal.vm.provision "shell", inline: <<-SHELL
+			parted /dev/sdc mklabel msdos
+			parted /dev/sdc mkpart primary 100 100%
+			partprobe
+			mkfs.xfs /dev/sdc1
+			mkdir /workspace
+			echo `blkid /dev/sdc1 | awk '{print$2}' | sed -e 's/"//g'` \
+				/workspace   xfs   noatime,nobarrier   0   0 >> /etc/fstab
+			mount /workspace
+			chown -R vagrant:vagrant /workspace
+			chmod 777 -R /workspace
+		SHELL
+
+		focal.vm.provision "shell",
+			inline: "apt-get update"
+
+        focal.vm.provision "shell",
+			inline: "/bin/bash /shared/scripts/setup_host.sh"
+
+        focal.vm.provision "shell",
+			inline: "apt remove -y gdm3"
+
+        focal.vm.provision "shell",
+			inline: "apt-mark hold gdm3"
+
+		focal.vm.provision "shell",
+			inline: "apt install -y kde-full || :"
+
+        focal.vm.provision "shell",
+			inline: "/bin/bash /shared/scripts/sddm_fix.sh"
+
+        focal.vm.provision "shell",
+			inline: "sudo apt update && sudo apt -y full-upgrade && sudo apt -y autoremove || :"
+
+		focal.vm.provision "shell",
+			inline: "cat /root/.profile | grep PATH >> /home/vagrant/.profile || :"
+	end
+end
diff --git a/quartus-free/51-usbblaster.rules b/quartus-free/51-usbblaster.rules
new file mode 100644
index 0000000..fd2912d
--- /dev/null
+++ b/quartus-free/51-usbblaster.rules
@@ -0,0 +1,7 @@
+# USB Blaster
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="0666", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", RUN+="/bin/chmod 0666 %c"
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6002", MODE="0666", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", RUN+="/bin/chmod 0666 %c"
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6003", MODE="0666", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", RUN+="/bin/chmod 0666 %c"
+# USB Blaster II
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6010", MODE="0666", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", RUN+="/bin/chmod 0666 %c"
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6810", MODE="0666", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", RUN+="/bin/chmod 0666 %c"
diff --git a/quartus-free/base_modelsim-ase.desktop b/quartus-free/base_modelsim-ase.desktop
new file mode 100644
index 0000000..23e9355
--- /dev/null
+++ b/quartus-free/base_modelsim-ase.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Version=1.0
+Name=ModelSim-Intel FPGA Starter Edition
+Comment=ModelSim simulation software for Intel FPGAs
+Exec=_alteradir/modelsim_ase/bin/vsim -gui -l /dev/null
+Icon=_alteradir/modelsim_ase/modesim.gif
+Terminal=false
+Type=Application
+Categories=Development
diff --git a/quartus-free/base_modelsim-ase.sh b/quartus-free/base_modelsim-ase.sh
new file mode 100644
index 0000000..b056e9d
--- /dev/null
+++ b/quartus-free/base_modelsim-ase.sh
@@ -0,0 +1 @@
+export PATH=$PATH:_alteradir/modelsim_ase/bin
diff --git a/quartus-free/base_quartus.desktop b/quartus-free/base_quartus.desktop
new file mode 100644
index 0000000..62194b2
--- /dev/null
+++ b/quartus-free/base_quartus.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Version=1.0
+Name=Quartus Prime Lite
+Comment=Quartus Prime Lite design software for Intel FPGAs
+Exec=_alteradir/quartus/bin/quartus --64bit
+Icon=_alteradir/quartus/adm/quartusii.png
+Terminal=false
+Type=Application
+Categories=Development
diff --git a/quartus-free/base_quartus.sh b/quartus-free/base_quartus.sh
new file mode 100644
index 0000000..14159e0
--- /dev/null
+++ b/quartus-free/base_quartus.sh
@@ -0,0 +1,10 @@
+export PATH=$PATH:_alteradir/quartus/bin:_alteradir/quartus/sopc_builder/bin
+
+# Detect if a 64bit machine and activate quartus
+# depending on it.
+if [ `uname -m` = "x86_64" ] ; then
+  QUARTUS_64BIT='1'
+else
+  QUARTUS_64BIT='0'
+fi
+export QUARTUS_64BIT
diff --git a/quartus-free/modelsim-ase.desktop b/quartus-free/modelsim-ase.desktop
new file mode 100644
index 0000000..8dacc87
--- /dev/null
+++ b/quartus-free/modelsim-ase.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Version=1.0
+Name=ModelSim-Intel FPGA Starter Edition
+Comment=ModelSim simulation software for Intel FPGAs
+Exec=/workspace/intelFPGA/20.1/modelsim_ase/bin/vsim -gui -l /dev/null
+Icon=/workspace/intelFPGA/20.1/modelsim_ase/modesim.gif
+Terminal=false
+Type=Application
+Categories=Development
diff --git a/quartus-free/modelsim-ase.sh b/quartus-free/modelsim-ase.sh
new file mode 100644
index 0000000..7b2a421
--- /dev/null
+++ b/quartus-free/modelsim-ase.sh
@@ -0,0 +1 @@
+export PATH=$PATH:/workspace/intelFPGA/20.1/modelsim_ase/bin
diff --git a/quartus-free/quartus.desktop b/quartus-free/quartus.desktop
new file mode 100644
index 0000000..6bfc9bc
--- /dev/null
+++ b/quartus-free/quartus.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Version=1.0
+Name=Quartus Prime Lite
+Comment=Quartus Prime Lite design software for Intel FPGAs
+Exec=/workspace/intelFPGA/20.1/quartus/bin/quartus --64bit
+Icon=/workspace/intelFPGA/20.1/quartus/adm/quartusii.png
+Terminal=false
+Type=Application
+Categories=Development
diff --git a/quartus-free/quartus.sh b/quartus-free/quartus.sh
new file mode 100644
index 0000000..02a38c8
--- /dev/null
+++ b/quartus-free/quartus.sh
@@ -0,0 +1,10 @@
+export PATH=$PATH:/workspace/intelFPGA/20.1/quartus/bin:/workspace/intelFPGA/20.1/quartus/sopc_builder/bin
+
+# Detect if a 64bit machine and activate quartus
+# depending on it.
+if [ `uname -m` = "x86_64" ] ; then
+  QUARTUS_64BIT='1'
+else
+  QUARTUS_64BIT='0'
+fi
+export QUARTUS_64BIT
diff --git a/run.sh b/run.sh
new file mode 100644
index 0000000..8d0aa82
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,7 @@
+ #!/bin/bash
+set -x
+
+script_dir=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
+
+vagrant up
+vagrant reload
diff --git a/scripts/sddm_fix.sh b/scripts/sddm_fix.sh
new file mode 100644
index 0000000..e663ffd
--- /dev/null
+++ b/scripts/sddm_fix.sh
@@ -0,0 +1,11 @@
+ #!/bin/bash
+set -x
+
+script_dir=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
+
+touch /etc/sddm.conf
+echo "[General]" >> /etc/sddm.conf
+echo "InputMethod=" >> /etc/sddm.conf
+echo "[Users]" >> /etc/sddm.conf
+echo "RememberLastUser=false"  >> /etc/sddm.conf
+echo "HideUsers=ubuntu" >> /etc/sddm.conf
diff --git a/scripts/setup_dependencies.sh b/scripts/setup_dependencies.sh
new file mode 100644
index 0000000..0bab1a0
--- /dev/null
+++ b/scripts/setup_dependencies.sh
@@ -0,0 +1,68 @@
+ #!/bin/bash
+set -x
+
+script_dir=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
+
+read -d '' PACKAGES <<EOT
+linux-image-generic
+bc
+libtool-bin
+gperf
+bison
+flex
+texi2html
+texinfo
+help2man
+gawk
+libtool
+build-essential
+automake
+libncurses5-dev
+libncurses6
+libglib2.0-dev
+libfdt-dev
+device-tree-compiler
+qemu-user-static
+binfmt-support
+multistrap
+git
+lib32z1
+lib32stdc++6
+libssl-dev
+kpartx
+dosfstools
+nfs-common
+zerofree
+u-boot-tools
+rpm2cpio
+curl
+libsdl1.2-dev
+libpixman-1-dev
+libc6-dev
+chrpath
+socat
+zlib1g-dev
+zlib1g:i386
+unzip
+rsync
+python3-pip
+python3
+gcc-multilib
+xterm
+net-tools
+libidn11
+libxft2
+libxft2:i386
+libxrender1:i386
+libxtst6:i386
+libxi6:i386
+EOT
+set -e
+
+sudo apt-get update
+sudo dpkg --add-architecture i386
+sudo apt-get update
+sudo add-apt-repository -y ppa:ubuntu-toolchain-r/ppa
+sudo apt update
+sudo apt-get install -y $PACKAGES
+sudo apt full-upgrade -y
diff --git a/scripts/setup_host.sh b/scripts/setup_host.sh
new file mode 100644
index 0000000..7a456a8
--- /dev/null
+++ b/scripts/setup_host.sh
@@ -0,0 +1,7 @@
+ #!/bin/bash
+set -x
+
+script_dir=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
+
+source /shared/scripts/setup_dependencies.sh
+source /shared/scripts/setup_quartus.sh
diff --git a/scripts/setup_quartus.sh b/scripts/setup_quartus.sh
new file mode 100644
index 0000000..73d3a87
--- /dev/null
+++ b/scripts/setup_quartus.sh
@@ -0,0 +1,96 @@
+ #!/bin/bash
+set -x
+
+script_dir=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
+
+pkgbase=quartus-free
+pkgname=(${pkgbase} ${_components[@]})
+# Keep dot in _patchver
+_mainver=20.1; _patchver=.1; _buildver=720
+# Latest HLS compiler was only released with Pro numbering
+#_promain=20.3; _propatch=.0; _probuild=158; _prover=${_promain}${_propatch}.${_probuild}
+pkgver=${_mainver}${_patchver}.${_buildver}
+#arch=('x86_64')
+
+tar_file=Quartus-lite-${pkgver}-linux.tar
+
+_base_url="https://download.altera.com/akdlm/software/acdsinst"
+source=("${_base_url}/${_mainver}std${_patchver}/${_buildver}/ib_tar/${tar_file}")
+
+
+
+if [ -f "/shared/${tar_file}" ]
+then
+    echo "Extracting Quartus, this may take some time..."
+    tar -xvf /shared/${tar_file} -C /workspace
+else
+    echo "Downloading Quartus, this may take some time..."
+    wget $source -P /workspace
+    echo "Extracting Quartus, this may take some time..."
+    tar -xvf /workspace/${tar_file} -C /workspace
+fi
+
+_alteradir="/workspace/intelFPGA/${_mainver}"
+
+if [ -d $_alteradir ]
+then
+    echo "$_alteradir exists"
+else
+    echo "$_alteradir does not exist: creating..."
+    mkdir /workspace/intelFPGA
+    mkdir $_alteradir
+fi
+
+sudo chmod a+x /workspace/components/*.run
+sudo chown -R vagrant:vagrant /workspace/*
+
+
+
+install_command="/workspace/components/QuartusLiteSetup-${pkgver}-linux.run \
+        --disable-components modelsim_ae \
+        --mode unattended \
+        --unattendedmodeui none \
+        --accept_eula 1 \
+        --installdir "${_alteradir}""
+echo "Installing Quartus, this may take some time..."
+`runuser -l vagrant -c "${install_command}"`
+
+
+# Cleanup
+echo "Cleaning up"
+rm -r /workspace/components
+
+if [ -f "/workspace${tar_file}" ]
+then
+    echo "Removing Tar file"
+    rm /workspace/$tar_file
+fi
+
+ # Copy over base files
+\cp -f /shared/quartus-free/base_quartus.sh /shared/quartus-free/quartus.sh
+\cp -f /shared/quartus-free/base_quartus.desktop /shared/quartus-free/quartus.desktop
+\cp -f /shared/quartus-free/base_modelsim-ase.sh /shared/quartus-free/modelsim-ase.sh
+\cp -f /shared/quartus-free/base_modelsim-ase.desktop /shared/quartus-free/modelsim-ase.desktop
+
+
+ # Replace altera directory in integration files
+sed -i "s,_alteradir,${_alteradir},g" /shared/quartus-free/quartus.sh
+sed -i "s,_alteradir,${_alteradir},g" /shared/quartus-free/quartus.desktop
+sed -i "s,_alteradir,${_alteradir},g" /shared/quartus-free/modelsim-ase.sh
+sed -i "s,_alteradir,${_alteradir},g" /shared/quartus-free/modelsim-ase.desktop
+
+# Fix modelsim startup code for Linux Kernel >=4.0
+# see https://wiki.archlinux.org/index.php/Altera_Design_Software
+sed -i 's,linux_rh60,linux,g' "${_alteradir}/modelsim_ase/vco"
+
+# Suppress spurious warning about linux-gate.so.1
+sed -i '/msg_system/a suppress = 3116' "${_alteradir}/modelsim_ase/modelsim.ini"
+
+# Install integration files
+install -D -m755 /shared/quartus-free/quartus.sh "/etc/profile.d/quartus.sh"
+install -D -m644 /shared/quartus-free/quartus.desktop "/usr/share/applications/quartus.desktop"
+install -D -m644 /shared/quartus-free/51-usbblaster.rules "/etc/udev/rules.d/51-usbblaster.rules"
+install -D -m755 /shared/quartus-free/modelsim-ase.sh "/etc/profile.d/modelsim-ase.sh"
+install -D -m644 /shared/quartus-free/modelsim-ase.desktop "/usr/share/applications/modelsim-ase.desktop"
+
+echo "Finished Installing Quartus"
-- 
GitLab