2016-06-22 10:01:56 +08:00
.. _install-from-source:
2016-06-22 09:45:56 +08:00
2016-06-22 10:01:56 +08:00
Installing ARTIQ from source
============================
2016-06-22 09:45:56 +08:00
.. note ::
This method is only recommended for developers and advanced users. An easier way to install ARTIQ is via the Anaconda packages (see :ref: `Installing ARTIQ <install-from-conda>` ).
Preparing the build environment for the core device
2016-06-22 10:01:56 +08:00
---------------------------------------------------
2016-06-22 09:45:56 +08:00
These steps are required to generate code that can run on the core
device. They are necessary both for building the MiSoC BIOS
and the ARTIQ kernels.
2016-08-21 10:16:48 +08:00
* Install required host packages: ::
$ sudo apt-get install python3.5 pip3 build-essential cmake cargo
2016-06-22 09:45:56 +08:00
* Create a development directory: ::
$ mkdir ~/artiq-dev
* Clone ARTIQ repository: ::
$ cd ~/artiq-dev
$ git clone --recursive https://github.com/m-labs/artiq
* Install OpenRISC binutils (or1k-linux-...): ::
$ cd ~/artiq-dev
2016-08-22 03:55:59 +08:00
$ wget https://ftp.gnu.org/gnu/binutils/binutils-2.27.tar.bz2
$ tar xvf binutils-2.27.tar.bz2
$ cd binutils-2.27
2016-12-09 14:16:32 +08:00
$ curl -L 'https://raw.githubusercontent.com/m-labs/conda-recipes/ece4cefbcce5548c5bd7fd4740d71ecd6930065e/conda/binutils-or1k-linux/fix-R_OR1K_GOTOFF-relocations.patch' | patch -p1
2016-06-22 09:45:56 +08:00
$ mkdir build
$ cd build
$ ../configure --target=or1k-linux --prefix=/usr/local
$ make -j4
$ sudo make install
.. note ::
We're using an `` or1k-linux `` target because it is necessary to enable
shared library support in `` ld `` , not because Linux is involved.
* Install LLVM and Clang: ::
$ cd ~/artiq-dev
2016-11-18 18:35:36 +08:00
$ git clone -b artiq-3.9 https://github.com/m-labs/llvm-or1k
2016-08-24 00:00:54 +08:00
$ cd llvm-or1k
2016-11-18 18:35:36 +08:00
$ git clone -b artiq-3.9 https://github.com/m-labs/clang-or1k tools/clang
2016-06-22 09:45:56 +08:00
$ mkdir build
$ cd build
2016-11-26 15:26:06 +08:00
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/llvm-or1k -DLLVM_TARGETS_TO_BUILD="OR1K;X86" -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_INSTALL_UTILS=ON
2016-06-22 09:45:56 +08:00
$ make -j4
$ sudo make install
2016-08-21 10:16:48 +08:00
* Install Rust: ::
$ cd ~/artiq-dev
2016-12-27 01:18:18 +08:00
$ git clone -b artiq-1.16.0 https://github.com/m-labs/rust
2016-11-04 00:04:26 +08:00
$ cd rust
2016-11-04 11:35:33 +08:00
$ git submodule update --init
2016-08-21 10:16:48 +08:00
$ mkdir build
$ cd build
2016-11-04 11:35:33 +08:00
$ ../configure --prefix=/usr/local/rust-or1k --llvm-root=/usr/local/llvm-or1k --disable-manage-submodules
2016-08-21 10:16:48 +08:00
$ sudo make install -j4
2016-12-27 01:18:18 +08:00
$ libs="libcore liballoc libstd_unicode libcollections liblibc_mini libunwind"
2016-11-04 17:11:21 +08:00
$ rustc="/usr/local/rust-or1k/bin/rustc --target or1k-unknown-none -g -C target-feature=+mul,+div,+ffl1,+cmov,+addc -C opt-level=s -L ."
2016-11-04 11:35:33 +08:00
$ destdir="/usr/local/rust-or1k/lib/rustlib/or1k-unknown-none/lib/"
2016-08-21 10:16:48 +08:00
$ mkdir ../build-or1k
$ cd ../build-or1k
2016-11-04 11:35:33 +08:00
$ for lib in ${libs}; do ${rustc} ../src/${lib}/lib.rs; done
$ ${rustc} -Cpanic=abort ../src/libpanic_abort/lib.rs
$ ${rustc} -Cpanic=unwind ../src/libpanic_unwind/lib.rs --cfg llvm_libunwind
$ sudo mkdir -p ${destdir}
$ sudo cp *.rlib ${destdir}
2016-08-21 10:16:48 +08:00
2016-06-22 09:45:56 +08:00
.. note ::
2016-08-21 10:16:48 +08:00
Compilation of LLVM can take more than 30 min on some machines. Compilation of Rust can take more than two hours.
2016-06-22 09:45:56 +08:00
Preparing the core device FPGA board
2016-06-22 10:01:56 +08:00
------------------------------------
2016-06-22 09:45:56 +08:00
These steps are required to generate gateware bitstream (`` .bit `` ) files, build the MiSoC BIOS and ARTIQ runtime, and flash FPGA boards. If the board is already flashed, you may skip those steps and go directly to `Installing the host-side software` .
* Install the FPGA vendor tools (i.e. Xilinx ISE and/or Vivado):
* Get Xilinx tools from http://www.xilinx.com/support/download/index.htm. ISE can build gateware bitstreams both for boards using the Spartan-6 (Pipistrello) and 7-series devices (KC705), while Vivado supports only boards using 7-series devices.
* The Pipistrello is supported by Webpack, the KC705 is not.
* During the Xilinx toolchain installation, uncheck `` Install cable drivers `` (they are not required as we use better and open source alternatives).
* Install Migen: ::
$ cd ~/artiq-dev
$ git clone https://github.com/m-labs/migen
$ cd migen
2017-01-30 09:24:43 +08:00
$ python3 setup.py develop --user
2016-06-22 09:45:56 +08:00
.. note ::
The options `` develop `` and `` --user `` are for setup.py to install Migen in `` ~/.local/lib/python3.5 `` .
* Install the required flash proxy gateware bitstreams:
The purpose of the flash proxy gateware bitstream is to give programming software fast JTAG access to the flash connected to the FPGA.
* Pipistrello and KC705:
::
$ cd ~/artiq-dev
$ wget https://raw.githubusercontent.com/jordens/bscan_spi_bitstreams/master/bscan_spi_xc7k325t.bit
$ wget https://raw.githubusercontent.com/jordens/bscan_spi_bitstreams/master/bscan_spi_xc6slx45.bit
Then move both files `` ~/artiq-dev/bscan_spi_xc6slx45.bit `` and `` ~/artiq-dev/bscan_spi_xc7k325t.bit `` to `` ~/.migen `` , `` /usr/local/share/migen `` , or `` /usr/share/migen `` .
* :ref: `Download and install OpenOCD <install-openocd>` .
2016-07-21 22:33:51 +08:00
* Download and install `` asyncserial `` : ::
$ cd ~/artiq-dev
$ git clone https://www.github.com/m-labs/asyncserial
$ cd asyncserial
2017-01-30 09:24:43 +08:00
$ python3 setup.py develop --user
2016-07-21 22:33:51 +08:00
2016-06-22 09:45:56 +08:00
* Download and install MiSoC: ::
$ cd ~/artiq-dev
$ git clone --recursive https://github.com/m-labs/misoc
$ cd misoc
2017-01-30 09:24:43 +08:00
$ python3 setup.py develop --user
2016-06-22 09:45:56 +08:00
2016-07-21 22:33:51 +08:00
* Download and install `` pythonparser `` : ::
$ cd ~/artiq-dev
$ git clone https://www.github.com/m-labs/pythonparser
$ cd pythonparser
2017-01-30 09:24:43 +08:00
$ python3 setup.py develop --user
2016-07-21 22:33:51 +08:00
2016-06-22 09:45:56 +08:00
* Download and install ARTIQ: ::
$ cd ~/artiq-dev
$ git clone --recursive https://github.com/m-labs/artiq
$ cd artiq
2017-01-30 09:24:43 +08:00
$ python3 setup.py develop --user
2016-06-22 09:45:56 +08:00
.. note ::
If you have any trouble during ARTIQ setup about `` pygit2 `` installation,
refer to the section dealing with
:ref: `installing the host-side software <installing-the-host-side-software>` .
* Build the gateware bitstream, BIOS and runtime by running:
::
$ cd ~/artiq-dev
$ export PATH=/usr/local/llvm-or1k/bin:$PATH
.. note :: Make sure that `` /usr/local/llvm-or1k/bin `` is first in your `` PATH `` , so that the `` clang `` command you just built is found instead of the system one, if any.
* For Pipistrello::
2017-01-30 09:24:43 +08:00
$ python3 -m artiq.gateware.targets.pipistrello
2016-06-22 09:45:56 +08:00
* For KC705::
2017-01-30 09:24:43 +08:00
$ python3 -m artiq.gateware.targets.kc705_dds -H nist_clock # or nist_qc2
2016-06-22 09:45:56 +08:00
2016-11-04 11:54:04 +08:00
.. note :: Add `` --toolchain ise `` if you wish to use ISE instead of Vivado.
2016-06-22 09:45:56 +08:00
* Then, gather the binaries and flash them: ::
$ mkdir binaries
$ cp misoc_nist_qcX_<board>/gateware/top.bit binaries
$ cp misoc_nist_qcX_<board>/software/bios/bios.bin binaries
$ cp misoc_nist_qcX_<board>/software/runtime/runtime.fbi binaries
$ cd binaries
$ artiq_flash -d . -t <board>
.. note :: The `-t` option specifies the board your are targeting. Available options are `` kc705 `` and `` pipistrello `` .
* Check that the board boots by running a serial terminal program (you may need to press its FPGA reconfiguration button or power-cycle it to load the gateware bitstream that was newly written into the flash): ::
2017-01-25 08:29:37 +08:00
$ flterm /dev/ttyUSB1
2016-06-22 09:45:56 +08:00
MiSoC BIOS http://m-labs.hk
[...]
Booting from flash...
Loading xxxxx bytes from flash...
Executing booted program.
ARTIQ runtime built <date/time>
.. note :: flterm is part of MiSoC. If you installed MiSoC with `` setup.py develop --user `` , the flterm launcher is in `` ~/.local/bin `` .
2017-01-25 08:29:37 +08:00
The communication parameters are 115200 8-N-1. Ensure that your user has access
2016-06-22 09:45:56 +08:00
to the serial device (`` sudo adduser $USER dialout `` assuming standard setup).
.. _installing-the-host-side-software:
Installing the host-side software
2016-06-22 10:01:56 +08:00
---------------------------------
2016-06-22 09:45:56 +08:00
* Install the llvmlite Python bindings: ::
$ cd ~/artiq-dev
$ git clone https://github.com/m-labs/llvmlite
$ cd llvmlite
2017-01-06 02:10:07 +08:00
$ git checkout artiq-3.9
2017-01-30 09:24:43 +08:00
$ LLVM_CONFIG=/usr/local/llvm-or1k/bin/llvm-config python3 setup.py install --user
2016-06-22 09:45:56 +08:00
* Install ARTIQ: ::
$ cd ~/artiq-dev
$ git clone --recursive https://github.com/m-labs/artiq # if not already done
$ cd artiq
2017-01-30 09:24:43 +08:00
$ python3 setup.py develop --user
2016-06-22 09:45:56 +08:00
.. note ::
If you have any trouble during ARTIQ setup about `` pygit2 `` installation,
you can install it by using `` pip `` :
On Ubuntu 14.04::
2017-01-30 09:24:43 +08:00
$ python3 `which pip3` install --user pygit2==0.19.1
2016-06-22 09:45:56 +08:00
On Ubuntu 14.10::
2017-01-30 09:24:43 +08:00
$ python3 `which pip3` install --user pygit2==0.20.3
2016-06-22 09:45:56 +08:00
On Ubuntu 15.04 and 15.10::
2017-01-30 09:24:43 +08:00
$ python3 `which pip3` install --user pygit2==0.22.1
2016-06-22 09:45:56 +08:00
2016-08-21 10:16:48 +08:00
On Ubuntu 16.04::
2017-01-30 09:24:43 +08:00
$ python3 `which pip3` install --user pygit2==0.24.1
2016-08-21 10:16:48 +08:00
2016-06-22 09:45:56 +08:00
The rationale behind this is that pygit2 and libgit2 must have the same
major.minor version numbers.
See http://www.pygit2.org/install.html#version-numbers
* Build the documentation: ::
$ cd ~/artiq-dev/artiq/doc/manual
$ make html