# Build instructions

## Build instructions for Emulator (Unix port)

Run the following to checkout the project:

```sh
git clone --recursive https://github.com/trezor/trezor-core.git
cd trezor-core
```

### Linux

#### Debian/Ubuntu

```sh
sudo pip3 install --no-cache-dir pyblake2

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install scons libsdl2-dev:i386 libsdl2-image-dev:i386 gcc-multilib

make build_unix
```

#### Fedora

```sh
sudo pip3 install --no-cache-dir pyblake2

sudo yum install scons SDL2-devel.i686 SDL2_image-devel.i686

make build_unix
```

#### openSUSE

```sh
sudo pip3 install --no-cache-dir pyblake2

sudo zypper install scons libSDL2-devel-32bit libSDL2_image-devel-32bit

make build_unix
```

#### Arch

```sh
sudo pip3 install --no-cache-dir pyblake2

sudo pacman -S gcc-multilib scons lib32-sdl2 lib32-sdl2_image

make build_unix
```

### OS X

```sh
pip3 install --no-cache-dir pyblake2

brew install scons sdl2 sdl2_image

make build_unix
```

### Windows

Not supported yet ...

## Build instructions for Embedded (ARM port)

### Linux

For flashing firmware to blank device (without bootloader) use `make flash`,
or `make flash STLINK_VER=v2-1` if using a ST-LINK/V2.1 interface.
You need to have OpenOCD installed.

#### Debian/Ubuntu

```sh
sudo pip3 install --no-cache-dir click pyblake2 scons
sudo pip3 install --no-deps git+https://github.com/trezor/python-trezor.git@master

sudo apt-get install gcc-arm-none-eabi libnewlib-arm-none-eabi

make vendorheader build_boardloader build_bootloader build_firmware
```

### OS X

1. Download [gcc-arm-none-eabi](https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q3-update/)
2. Follow the [install instructions](https://launchpadlibrarian.net/287100883/readme.txt)
3. To install OpenOCD, run `brew install open-ocd`
4. Run `make vendorheader build_boardloader build_bootloader build_firmware`