= TODO Installing via Portage =
= Installing Manually =
== Prerequisites ==
{{RootCmd|emerge -a sys-apps/lsb-release}}
=== 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].

{{Cmd|mkdir -p ~/Documents/MicrochipInstallers}}
{{Cmd|cd ~/Documents/MicrochipInstallers}}
{{Cmd|mv ~/Downloads/libero_soc_*.*_web_lin.zip .}}
{{Cmd|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].
{{Cmd|mkdir -p ~/Documents/MicrochipInstallers}}
{{Cmd|cd ~/Documents/MicrochipInstallers}}
{{Cmd|mv ~/Downloads/Microchip-SoftConsole-*.*-RISC-V-*-linux-x64-installer.run .}}
== Install ==
=== Setup ===
{{Cmd|export INSTALL_DIR{{=}}/opt/microchip}}
{{RootCmd|mkdir -p $INSTALL_DIR}}
{{RootCmd|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

{{Cmd|cd ~/Documents/MicrochipInstallers}}
{{Cmd|./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:

{{Cmd|/opt/microchip/Libero_SoC_v2024.1/Libero/bin64/libero|output=<pre>
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) </pre>}}

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)
{{Cmd|cd /opt/microchip/Libero_SoC_*.*}}
{{Cmd|git init}}
{{Cmd|git add .}}
{{Cmd|git commit -m "init"}}
{{Cmd|find . -name "libstdc++.so.6" -type f -or -type l -delete}}
{{Cmd|git add .}}
{{Cmd|git commit -m "removed tool specific libstdc++.so.6 files"}}
{{Cmd|# 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 ===
{{Cmd|cd ~/Documents/MicrochipInstallers}}
{{Cmd|./Microchip-SoftConsole-*.*-RISC-V-*-linux-x64-installer.run}}
== Post-Install ==
{{RootCmd|$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 ====
{{RootCmd|$INSTALL_DIR/Libero_SoC_v2023.1/Libero/bin/udev_install}}
==== FlashPro 6 ====
{{RootCmd|$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.

{{Cmd|mkdir -p $INSTALL_DIR/Libero_SoC_v2023.1/license}}
{{Cmd|cp /path/to/license /opt/microchip/Libero_SoC_v2023/license}}
=== Installing the Licensing Daemon ===
{{RootCmd|cp scripts/libero-license.service /etc/systemd/user}}
= Install Yocto Ecosystem =
== Prerequisites ==
{{RootCmd|emerge -av gawk wget dev-vcs/git diffstat unzip sys-apps/texinfo chrpath socat libsdl xterm bmap-tools repo}}

== Create the Yocto Workspace ==
{{Cmd|mkdir yocto-dev && cd yocto-dev}}
{{Cmd|repo init -u https://github.com/polarfire-soc/polarfire-soc-yocto-manifests.git -b main -m default.xml}}
== Update the repo workspace ==
{{Cmd|repo sync}}
{{Cmd|repo rebase}}
== Setup the Bitbake environment ==
{{Cmd|. ./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.

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

Append the following to =<project_root>/build/conf/local.conf= to disable static dependencies and set up non-temporary directories for your yocto build artifacts to live.
{{FileBox|filename=local.conf|lang=bash|1=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}"
}}

== Build the Disk Image ==
{{Cmd|cd $PROOT}}
{{Cmd|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) ==
{{Cmd|mkdir yocto-dev && cd yocto-dev}}
{{Cmd|repo init -u https://github.com/polarfire-soc/polarfire-soc-yocto-manifests.git -b main -m default.xml}}
== Update the repo workspace ==
{{Cmd|repo sync}}
{{Cmd|repo rebase}}
== Set up the Bitbake environment ==
{{Cmd|. ./meta-polarfire-soc-yocto-bsp/polarfire-soc_yocto_setup.sh}}
== Building Board Disk Image ==
=== Building a Linux Image with a root file system (RootFS) ===
{{Cmd|MACHINE{{=}}icicle-kit-es bitbake mpfs-dev-cli}}
=== Building a RAM-based Root Filestystem ===
{{Cmd|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 ===
{{Cmd|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] ====
