
= TODO Installing via Portage =

= Installing Manually =
== Prerequisites ==
    sudo emerge -a sys-apps/lsb-release app-crypt/mit-krb5

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

    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 [https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/soc-fpga/softconsole here].

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

    {{RootCmd|a command}}

== Install ==
=== Setup ===
    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

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

==== Gentoo Specific Libero Fixes ====
When attempting to run <tt>/opt/microchip/Libero_SoC_v2024.1/Libero/bin64/libero</tt>, you will most likely be met with the following error:

    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 <tt>libstdc++.so.6</tt> files that came with the tools and then supplying the system&rsquo;s provides files via $LD\_LIBRARY\_PATH. I&rsquo;ve also chosen to do this with git commits so you don&rsquo;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)

    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 ===
    cd ~/Documents/MicrochipInstallers
    ./Microchip-SoftConsole-*.*-RISC-V-*-linux-x64-installer.run

== Post-Install ==
    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&rsquo;t have a FlashPro device.

==== FlashPro 5 ====
    sudo $INSTALL_DIR/Libero_SoC_v2023.1/Libero/bin/udev_install

==== FlashPro 6 ====
    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&rsquo;ll want to get the '''LIB-PL-MACID-F-EVAL''' license, which is a floating linux license.

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

=== Installing the Licensing Daemon ===
    sudo cp scripts/libero-license.service /etc/systemd/user

= Install Yocto Ecosystem =
== Prerequisites ==
    sudo emerge -pv gawk wget dev-vcs/git diffstat unzip sys-apps/texinfo chrpath socat libsdl xterm bmap-tools repo

    sudo emerge -a

== Create the Yocto Workspace ==
    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 ==
    repo sync
    repo rebase

== Setup the Bitbake environment ==
    . ./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.

    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 ==
    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 ==
    repo sync
    repo rebase

== Set up the Bitbake environment ==
    . ./meta-polarfire-soc-yocto-bsp/polarfire-soc_yocto_setup.sh

== Building Board Disk Image ==
=== Building a Linux Image with a root file system (RootFS) ===
    MACHINE=icicle-kit-es bitbake mpfs-dev-cli

=== Building a RAM-based Root Filestystem ===
    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 ===
    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 =
==== [https://github.com/polarfire-soc/meta-polarfire-soc-yocto-bsp PolarFire Yocto Github] ====
