Setup WSL Development Environment for target RG353P(arm64) and Windows 10 (not relevan again) use pre build toolchain - leonkasovan/RG353P GitHub Wiki
Setup Windows Subsystem for Linux (WSL) for Windows 10/11
- (Optional) Unregister and delete Linux Distro:
wslconfig /u Debian
- Setting BIOS for supporting virtualization
Gigabyte BIOS Motherboard (press DEL when booting):
M.I.T -> Advanced Frequency Settings -> Advanced CPU Core Settings -> SVM Mode : Enabled
- Download and install DEBIAN Linux Distro in Microsoft Store or
use command line:wsl --install --distribution Ubuntu-22.04
use command line:wsl --install --distribution Debian
- Update WSL (in power shell administrator) to support GUI apps
wsl --update
- Run linux env via Win+S:
wsl
Install Development Environment for aarch64 / arm64
- Add package support for aarch64/arm64
sudo dpkg --add-architecture arm64
- Update package manager tools
sudo apt update
sudo apt upgrade
- (Optional) Edit package source list
sudo nano /etc/apt/sources.list
deb [arch=amd64,arm64] http://deb.debian.org/debian bullseye main
deb [arch=amd64,arm64] http://deb.debian.org/debian bullseye-updates main
deb [arch=amd64,arm64] http://security.debian.org/debian-security bullseye-security main
deb [arch=amd64,arm64] http://ftp.debian.org/debian bullseye-backports main
- Install GCC
sudo apt install build-essential gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
Disarankan pakai GCC version 10: gcc-10-aarch64-linux-gnu - (Optional) Install cmake
sudo apt install cmake
Adding Library for Development
sudo apt install libsdl2-dev:arm64
sudo apt install libsdl2-mixer-dev:arm64
sudo apt install libfreetype-dev:arm64
sudo apt install libfreeimage-dev:arm64
sudo apt install libopengl-dev:arm64
sudo apt install libcurl3-openssl-dev:arm64
sudo apt install libgl1-mesa-dev:arm64
sudo apt install libgles-dev:arm64
sudo apt install rapidjson-dev:arm64
Makefile for cross compiling aarch64
TARGET = EnhancedFileManager
CC = aarch64-linux-gnu-g++
SDL2_CONFIG = pkg-config sdl2,SDL2_ttf,SDL2_image
SRC = $(wildcard src/*.cpp)
OBJ = $(patsubst %cpp,%o,$(SRC))
COMPILER_FLAGS = $(shell $(SDL2_CONFIG) --cflags) -Wall -pedantic -Wfatal-errors "
LINKER_FLAGS = $(shell $(SDL2_CONFIG) --libs) -s -w
all : $(OBJ)
$(CC) $(OBJ) -o $(TARGET) $(LINKER_FLAGS)
%.o:%.cpp
$(CC) -c $< -o $@ $(COMPILER_FLAGS)
clean :
rm -f $(OBJ) $(TARGET)
pkg-config for cross compiling aarch64
PKG_CONFIG_PATH="/usr/lib/aarch64-linux-gnu/pkgconfig" make
(works)
OR
pkg-config --cflags --libs libcurl
export PKG_CONFIG_DIR=""
export PKG_CONFIG_LIBDIR="/usr/lib/aarch64-linux-gnu/pkgconfig"
export PKG_CONFIG_SYSROOT_DIR=""
pkg-config --cflags --libs libcurl
CMake for cross compiling aarch64
nano CMakeLists.txt
project(emulationstation-all)
set(ENV{PKG_CONFIG_DIR} "")
set(ENV{PKG_CONFIG_LIBDIR} "${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig")
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER "/usr/bin/aarch64-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "/usr/bin/aarch64-linux-gnu-g++")
set(CMAKE_INCLUDE_DIR "/usr/include")
set(CMAKE_LIBRARY_PATH "/usr/lib/aarch64-linux-gnu")
set(CMAKE_SYSROOT "")
set(CMAKE_LIBRARY_ARCHITECTURE "aarch64-linux-gnu")
CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ cmake .
make -j8
Below is not needed:
cmake_minimum_required(VERSION 2.8)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER "/usr/bin/aarch64-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "/usr/bin/aarch64-linux-gnu-g++")
set(CMAKE_C_FLAGS "-march=armv8-a -mtune=cortex-a55")
set(CMAKE_CXX_FLAGS "-march=armv8-a -mtune=cortex-a55")
set(CMAKE_SYSROOT "")
set(CMAKE_LIBRARY_ARCHITECTURE "aarch64-linux-gnu")
set(ENV{PKG_CONFIG_DIR} "")
set(ENV{PKG_CONFIG_LIBDIR} "${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig")
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
set(GLES2 ON)
set(SCREENSCRAPER_DEV_LOGIN "devid=jelos&devpassword=jelos")
set(SCREENSCRAPER_SOFTNAME "MyBuildEmulationStation")
set(OPENGLES2_INCLUDE_DIR "/usr/include")
add_definitions(-DHAVE_INTL)
...
...
Install golang for cross compiling aarch64
- Download go binary from https://go.dev/dl/
wget https://go.dev/dl/go1.20.5.linux-amd64.tar.gz
- Open WSL shell
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.20.5.linux-amd64.tar.gz
sudo nano /etc/profile; export PATH=$PATH:/usr/local/go/bin
sudo ln -s /usr/local/go/bin/go /usr/bin/go
- Restart WSL shell and test go
go version
- Install needed libraries for target host arm64:
sudo apt install libsdl2-dev:arm64
Create go project:
mkdir go-project-1 && cd go-project-1
nano main.go
(copy paste from sample go hello world)go mod init go-project-1
CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc GOOS=linux GOARCH=arm64 go build -trimpath -x -ldflags "-s -w"