---
author: Penguin
date: 06/19/23
title: Installing Microchip FPGA Tools
---

# <span class="todo TODO">TODO</span> Installing via Portage

# Installing Manually

## Prerequisites

``` bash
sudo emerge -a sys-apps/lsb-release
```

### Download Libero

Download the latest version from
[here](https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/fpga/libero-software-later-versions).

``` bash
mkdir -p ~/Documents/MicrochipInstallers
cd ~/Documents/MicrochipInstallers
mv ~/Downloads/libero_soc_*.*_web_lin.zip .
unzip libero_soc_*.*_web_lin.zip
```

### Download SoftConsole

Download the latest version from
[here](https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/soc-fpga/softconsole).

``` bash
mkdir -p ~/Documents/MicrochipInstallers
cd ~/Documents/MicrochipInstallers
mv ~/Downloads/Microchip-SoftConsole-*.*-RISC-V-*-linux-x64-installer.run .
```

## Install

### Setup

``` bash
export INSTALL_DIR=/opt/microchip
sudo mkdir -p $INSTALL_DIR
sudo chown $USER:$USER $INSTALL_DIR
```

### Install Libero

Installer Directions:

-   Install Directory:
    $INSTALL_DIR/Libero_SoC\_\<version_major\>.\<version_minor\>
-   Common Directory: $INSTALL_DIR/common
-   Install Set: Everything

``` bash
cd ~/Documents/MicrochipInstallers
./Libero_SoC_*.*_Web.bin
```

1.  Gentoo Specific Libero Fixes

    When attempting to run
    `/opt/microchip/Libero_SoC_v2024.1/Libero/bin64/libero`, you will
    most likely be met with the following error:

    ``` example
    Warning: You are running a version of Suse Linux that is not supported.
     Please refer to Libero SoC Release Note for the detail of supported operating systems.
    /opt/microchip/Libero_SoC_v2024.1/Libero/bin64/libero_bin: /opt/microchip/Libero_SoC_v2024.1/Libero/lib64/rhel/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /usr/lib64/libicuuc.so.74)
    ```

    The way I chose to combat this was to delete all of the
    `libstdc++.so.6` files that came with the tools and then supplying
    the system's provides files via $LD_LIBRARY_PATH. I've also chosen
    to do this with git commits so you don't have to start all over if
    you mess up. The git parts are optional but recommended. (Thanks to
    sam for helping me figure this out)

    ``` bash
    cd /opt/microchip/Libero_SoC_*.*
    git init
    git add .
    git commit -m "init"
    find . -name "libstdc++.so.6" -type f -or -type l -delete
    git add .
    git commit -m "removed tool specific libstdc++.so.6 files"
    # test it to make sure it launches
    LD_LIBRARY_PATH="/usr/lib/gcc/x86_64-pc-linux-gnu/13" ./Libero/bin64/libero
    ```

    This should launch and then give you an error saying license not
    found. This is normal and will be fixed later in the guide.

### Install SoftConsole

``` bash
cd ~/Documents/MicrochipInstallers
./Microchip-SoftConsole-*.*-RISC-V-*-linux-x64-installer.run
```

## Post-Install

``` bash
sudo $INSTALL_DIR/Libero_SoC_*.*/Logs/req_to_install.sh
```

### Installing FlashPro Drivers

You need to have the FlashPro device to install these, so ignore this if
you don't have a FlashPro device.

1.  FlashPro 5

    ``` bash
    sudo $INSTALL_DIR/Libero_SoC_v2023.1/Libero/bin/udev_install
    ```

2.  FlashPro 6

    ``` bash
    sudo $INSTALL_DIR/Libero_SoC_v2023.1/Libero/bin/fp6_env_install
    ```

### Installing Your License

You can register for a microchip and request a year-long evaluation
license here:
<https://www.microchipdirect.com/login?redirectTo=%2Ffpga-software-products>

You'll want to get the **LIB-PL-MACID-F-EVAL** license, which is a
floating linux license.

``` bash
mkdir -p $INSTALL_DIR/Libero_SoC_v2023.1/license
cp /path/to/license /opt/microchip/Libero_SoC_v2023/license
```

### Installing the Licensing Daemon

``` bash
sudo cp scripts/libero-license.service /etc/systemd/user
```

# Install Yocto Ecosystem

## Prerequisites

``` bash
sudo emerge -pv gawk wget dev-vcs/git diffstat unzip sys-apps/texinfo chrpath socat libsdl xterm bmap-tools repo
```

``` bash
sudo emerge -a
```

## Create the Yocto Workspace

``` bash
mkdir yocto-dev && cd yocto-dev
repo init -u https://github.com/polarfire-soc/polarfire-soc-yocto-manifests.git -b main -m default.xml
```

## Update the repo workspace

``` bash
repo sync
repo rebase
```

## Setup the Bitbake environment

``` bash
. ./meta-polarfire-soc-yocto-bsp/polarfire-soc_yocto_setup.sh
```

## Optimize your build environment

Yocto builds take a very long time. We can optimize this.

``` bash
mkdir -p ${HOME}/.local/share/yocto/downloads
mkdir -p ${HOME}/.local/share/yocto/sstate-cache
mkdir -p ${HOME}/.local/share/yocto/persistent
cd <project_root>/build/conf/


echo '
BB_NUMBER_THREADS ?= "${@oe.utils.cpu_count()}"
PARALLEL_MAKE ?= "-j ${@oe.utils.cpu_count() - 1}"
DL_DIR = "${HOME}/.local/share/yocto/downloads"
SSTATE_DIR = "${HOME}/.local/share/yocto/sstate-cache"
PERSISTENT_DIR=${HOME/.local/share/yocto/persistent
SOURCE_MIRROR_URL ?= "file://${HOME}/.local/share/yocto/downloads"
INHERIT += "own-mirrors"
BB_GENERATE_MIRROR_TARBALLS = "1"
# uncomment to test sources
# BB_NO_NETWORK = "1"

# remove static deps
STATICLIBCONF = "--disable-static"
DISABLE_STATIC:pn-openssl = ""
DISABLE_STATIC:pn-openssl-native = ""
DISABLE_STATIC:pn-nativesdk-openssl = ""
DISABLE_STATIC:pn-libtalloc = ""
EXTRA_OECONF += "${STATICLIBCONF}"
' >> local.conf
```

## Build the Disk Image

``` bash
cd $PROOT
bitbake mpfs-dev-cli
```

# Creating a Bootable Yocto Linux Image

We have two options: Create a new workspace, or we can use this repo as
a workspace because this repo is my working workspace.

## Create a workspace (OPTIONAL)

    mkdir yocto-dev && cd yocto-dev
    repo init -u https://github.com/polarfire-soc/polarfire-soc-yocto-manifests.git -b main -m default.xml

## Update the repo workspace

``` bash
repo sync
repo rebase
```

## Set up the Bitbake environment

``` bash
. ./meta-polarfire-soc-yocto-bsp/polarfire-soc_yocto_setup.sh
```

## Building Board Disk Image

### Building a Linux Image with a root file system (RootFS)

``` bash
MACHINE=icicle-kit-es bitbake mpfs-dev-cli
```

### Building a RAM-based Root Filestystem

``` bash
MACHINE=icicle-kit-es bitbake -R conf/initramfs.conf mpfs-initramfs-image
```

### Building a Linux Image for an external QSPI flash memory

### Flashing an SD Card

``` bash
zcat build/tmp-glibc/deploy/images/icicle-kit-es/mpfs-dev-cli-icicle-kit-es.wic.gz | sudo dd of=/dev/sdX bs=4096 iflag=fullblock oflag=direct conv=fsync status=progress
```

# References

[PolarFire Yocto
Github](https://github.com/polarfire-soc/meta-polarfire-soc-yocto-bsp)
