This pages contains information about self-hosting on ARM devices.
==== General configuration ====
* Adding swap space over NFS may cause instability and deadlocks Source: [[https://lists.freebsd.org/pipermail/freebsd-arm/2019-June/019930.html|https://lists.freebsd.org/pipermail/freebsd-arm/2019-June/019930.html]]
==== Checking out source ====
* SD cards are not suitable for heavy I/O and certain operations may take an excessive amount of time such as checking out source via SVN or GIT. This can however heavily depend on your SD card's performance; faster rating doesn't necessarily translate into better random write and read speed.
svnlite checkout svn://svn.freebsd.org/base/head /usr/src --> 10h58m28.12s real 5m32.95s user 16m11.79s sys
Also worth considering is that they have a very limited amount of writes compared to a HDD and SSD.
==== Building world/kernel ====
* Default ''%%tmpfs%%'' size (50MByte) may be too small to successfully build world and kernel with default settings. 96Mbyte is reported to be large enough to sucessfully complete a build. \\ Source: [[https://lists.freebsd.org/pipermail/freebsd-arm/2019-June/019930.html|https://lists.freebsd.org/pipermail/freebsd-arm/2019-June/019930.html]])--\\ After import of LLVM/Clang 9 ''%%tmpfs%%'' needs to be 128Mbyte for build and installworld to complete successfully.
* Compiling LLVM/Clang will roughly use 500-700MByte of memory per process at some stages which may cause your device to run out of memory. Adding a swap (1Gbyte is usually enough) will mitigate this issue but you most likely also want to limit jobs to 1 per 512Mbyte of total available memory. Compiling world and kernel takes more than **a day** using 2 jobs on armv7 or arm64.
* You may want to set ''%%CPUTYPE?=%%'' in ''%%/etc/make.conf%%'' \\ For valid options see ''%%/usr/share/examples/etc/make.conf%%'' as of [[https://svnweb.freebsd.org/base/head/share/examples/etc/make.conf?revision=349291|r349291]]
==== Using ports ====
* If your device has less than 2Gbyte of RAM (see above) you can force number of jobs by setting ''%%MAKE_JOBS_NUMBER%%'' in ''%%/etc/make.conf%%'' to avoid excessive usage of swap and out of memory issues.
MAKE_JOBS_NUMBER=n
Where ''%%n%%'' corrensponds to the number of jobs.