# neorv32
neorv32 with Makefiles compatible with MSYS2 64 for cross compilatation on Windows and Linux.
# 1. Windows Installation, and test.
# 2. Linux Installation, and test.
## 1. Windows Installation
You must download the latest RISCV precompiled binaries for your platform from: https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/
in this case the architecture x64 for windows binaries(https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v13.2.0-2/xpack-riscv-none-elf-gcc-13.2.0-2-darwin-x64.tar.gz), then extract these under the folder C:\riscv_precompiled\
1. clone or download this repository on your windows machine.
```
$ git clone https://gitea.squirrelnut.synology.me:5001/FPGALover/neorv32
```
2. download and install MSYS2(msys2-x86_64-20240113.exe) --> https://www.msys2.org/
3. once MSYS2 is installed, run MSYS2, and run the command(pacman -S mingw-w64-ucrt-x86_64-gcc)
```
$ pacman -S mingw-w64-ucrt-x86_64-gcc
```
4. Select ALL dependencies by pressing Enter and select Y[yes].
```
resolving dependencies...
looking for conflicting packages...
Packages (15) mingw-w64-ucrt-x86_64-binutils-2.41-2
mingw-w64-ucrt-x86_64-crt-git-11.0.0.r216.gffe883434-1
mingw-w64-ucrt-x86_64-gcc-libs-13.2.0-2 mingw-w64-ucrt-x86_64-gmp-6.3.0-2
mingw-w64-ucrt-x86_64-headers-git-11.0.0.r216.gffe883434-1
mingw-w64-ucrt-x86_64-isl-0.26-1 mingw-w64-ucrt-x86_64-libiconv-1.17-3
mingw-w64-ucrt-x86_64-libwinpthread-git-11.0.0.r216.gffe883434-1
mingw-w64-ucrt-x86_64-mpc-1.3.1-2 mingw-w64-ucrt-x86_64-mpfr-4.2.1-2
mingw-w64-ucrt-x86_64-windows-default-manifest-6.4-4
mingw-w64-ucrt-x86_64-winpthreads-git-11.0.0.r216.gffe883434-1
mingw-w64-ucrt-x86_64-zlib-1.3-1 mingw-w64-ucrt-x86_64-zstd-1.5.5-1
mingw-w64-ucrt-x86_64-gcc-13.2.0-2
Total Download Size: 49.38 MiB
Total Installed Size: 418.82 MiB
:: Proceed with installation? [Y/n]
[... downloading and installation continues ...]
```
5. after the installation is completed, add the *Path* *"C:\msys64\ucrt64\bin"* under the enviroments variable on Windows.
6. open a cmd and run the command (gcc --version)
```
$ gcc --version
gcc.exe (Rev2, Built by MSYS2 project) 13.2.0
```
7. go to the folder C:\msys64\ucrt64\bin make a copy of the file **mingw32-make.exe** and name it **make.exe**
8. go to the directory where you cloned or donwloaded this repository to the directory **neorv32\sw\example\demo_blink_led_asm**
```
$ cd neorv32\sw\example\demo_blink_led_asm
```
8. run the command **make all** (make sure all antivirus are disabled)
```
$ make all
"Memory utilization:"
text data bss dec hex filename
432 0 0 432 1b0 main.elf
"Generationg APP BIN"
"OK - APP BIN"
"Generationg APP IMG VHD"
"OK - APP IMG VHD"
"Generationg RAW HEX"
"OK - RAW HEX"
"Generationg RAW BIN"
"OK - RAW BIN"
"Generationg BOOT IMG VHD"
"OK - BOOT IMG VHD"
"Memories Generated"
```
9. list the generated files and you will see
```
$ ls -l
-rw-rw-rw- 1 adriz 0 6781 2024-02-24 01:45 main.asm
-rw-rw-rw- 1 adriz 0 432 2024-02-24 01:45 main.bin
-rw-rw-rw- 1 adriz 0 8708 2024-02-24 01:45 main.elf
-rw-rw-rw- 1 adriz 0 5456 2024-02-23 16:14 main.S
-rw-rw-rw- 1 adriz 0 2764 2024-02-24 01:45 main.S.o
-rw-rw-rw- 1 adriz 0 274 2024-02-24 01:16 makefile
-rw-rw-rw- 1 adriz 0 1882 2024-02-24 01:45 neorv32_application_image.vhd
-rw-rw-rw- 1 adriz 0 1878 2024-02-24 01:45 neorv32_bootloader_image.vhd
-rw-rw-rw- 1 adriz 0 444 2024-02-24 01:45 neorv32_exe.bin
-rw-rw-rw- 1 adriz 0 432 2024-02-24 01:45 neorv32_raw_exe.bin
-rw-rw-rw- 1 adriz 0 972 2024-02-24 01:45 neorv32_raw_exe.hex
```
10. you have been able to Assemble assembly code for the RISCV on windows.
11. go con the folder **neorv32\sw\example\demo_blink_led** which is the same example as the previous one but written on C code., and run the line "make all"
```
$ make all
"Memory utilization:"
text data bss dec hex filename
1092 0 0 1092 444 main.elf
"Generationg APP BIN"
"OK - APP BIN"
"Generationg APP IMG VHD"
"OK - APP IMG VHD"
"Generationg RAW HEX"
"OK - RAW HEX"
"Generationg RAW BIN"
"OK - RAW BIN"
"Generationg BOOT IMG VHD"
"OK - BOOT IMG VHD"
"Memories Generated"
```
12. now you have cross-compiled sucessfuly on windows for C and Assembly.
13. if you go to the folder **neorv32\sw\example**, and run the command "make all" you will be able to build all the projects within this folder.
Enjoy!
## 2. Linux Installation
1. Open shell and run:
```
sudo apt-get update
sudo apt-get install autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev
git clone https://github.com/riscv/riscv-gnu-toolchain
cd riscv-gnu-toolchain/
mkdir build/
cd build
sudo mkdir /opt/riscv32im
sudo chown $USER /opt/riscv32im
./configure --with-arch=rv32im --prefix=/opt/riscv32im
make -j$(nproc)
```
2. clone this repository.
3. go to the directory where you cloned or donwloaded this repository to the directory **neorv32\sw\example\demo_blink_led_asm**
```
$ cd neorv32\sw\example\demo_blink_led
```
4. run the command **make all**
```
$ make all
Memory utilization:
text data bss dec hex filename
1012 0 0 1012 3f4 main.elf
Executable (neorv32_exe.bin) size in bytes:
1024
Installing application image to ../../../rtl/core/neorv32_application_image.vhd
```
5. list the generated files and you will see
```
$ ls -l
-rw-r--r-- 1 adrizcorp adrizcorp 18160 Feb 24 01:54 main.asm
-rw-r--r-- 1 adrizcorp adrizcorp 1012 Feb 24 01:54 main.bin
-rw-r--r-- 1 adrizcorp adrizcorp 4314 Feb 23 15:08 main.c
-rw-r--r-- 1 adrizcorp adrizcorp 7696 Feb 24 01:54 main.c.o
-rwxr-xr-x 1 adrizcorp adrizcorp 42856 Feb 24 01:54 main.elf
-rw-r--r-- 1 adrizcorp adrizcorp 141 Feb 23 15:08 makefile
-rw-r--r-- 1 adrizcorp adrizcorp 3704 Feb 24 01:54 neorv32_application_image.vhd
-rw-r--r-- 1 adrizcorp adrizcorp 1024 Feb 24 01:54 neorv32_exe.bin
-rw-r--r-- 1 adrizcorp adrizcorp 1012 Feb 24 01:54 neorv32_raw_exe.bin
-rw-r--r-- 1 adrizcorp adrizcorp 2277 Feb 24 01:54 neorv32_raw_exe.hex
```
6. now you have been able to compile C code for the RISCV processor.
Enjoy!