Port: Raspberry Pi. Author: Martin Beaudoin. Merge: Hrvoje Jasak.

This commit is contained in:
Hrvoje Jasak 2016-01-05 22:52:46 +00:00
commit b4e1b80409
19 changed files with 383 additions and 2 deletions

View file

@ -0,0 +1,146 @@
Below are the build instructions for Arch Linux over the Raspberry Pi
These instructions assume that your Arch Linux installation is up and running on
the Raspberry Pi with full network access. If not, please visit the following
Web sites for further instructions. As always, Google will also be your friend.
https://www.raspberrypi.org/documentation/
https://wiki.archlinux.org/index.php/Raspberry_Pi
* Update your Arch Linux installation:
sudo pacman -Syu
* Install required packages:
pacman -S git gcc cmake bison flex make openmpi --needed base-devel
* Create the foam-extend installation directory:
These instructions assume that you install in the default location, which is
~/foam/ . Create this folder with:
mkdir ~/foam
* Obtain and unpack source code (if you read this, you probably already have):
The recommended way is to get the source code through git source code
management system. This way, you can get updates and bugfixes easily by running
"git pull". To install into the default location run:
cd ~/foam
git clone git://git.code.sf.net/p/foam-extend/foam-extend-3.2
* For Arch Linux, you need to customize your file etc/prefs.sh in order to enable
the usage of system-provided packages, and to enable the compilation of other.
Here is a list of commands that will do just that. You can copy/paste
the following block of commands in a control terminal in order to make
the necessary adjustments. You will need to be located at the root of your
foam-extend-3.2 installation for those commands to work.
### - Start to copy commands here ###########################################
#
cd ~/foam/foam-extend-3.2
# Create a prefs.sh file
cp etc/prefs.sh-EXAMPLE etc/prefs.sh
# Create a patch file
cat <<'EOF' >> patch.txt
--- etc/prefs.sh-EXAMPLE 2015-11-23 22:54:50.341631348 -0500
+++ etc/prefs.sh 2015-12-05 13:31:02.967676779 -0500
@@ -36,7 +36,7 @@
# Specify system compiler
# ~~~~~~~~~~~~~~~~~~~~~~~
-#compilerInstall=System
+compilerInstall=System
#compilerInstall=FOAM
# Specify system openmpi
@@ -46,14 +46,14 @@
# The other openmpi related variables will be initialized using
# the command mpicc --showme:
#
-#export WM_MPLIB=SYSTEMOPENMPI
-#export OPENMPI_DIR=path_to_system_installed_openmpi
-#export OPENMPI_BIN_DIR=$OPENMPI_DIR/bin
-#
-#export OPENMPI_LIB_DIR="`$OPENMPI_BIN_DIR/mpicc --showme:libdirs`"
-#export OPENMPI_INCLUDE_DIR="`$OPENMPI_BIN_DIR/mpicc --showme:incdirs`"
-#export OPENMPI_COMPILE_FLAGS="`$OPENMPI_BIN_DIR/mpicc --showme:compile`"
-#export OPENMPI_LINK_FLAGS="`$OPENMPI_BIN_DIR/mpicc --showme:link`"
+export WM_MPLIB=SYSTEMOPENMPI
+export OPENMPI_DIR=/usr
+export OPENMPI_BIN_DIR=$OPENMPI_DIR/bin
+#
+export OPENMPI_LIB_DIR="`$OPENMPI_BIN_DIR/mpicc --showme:libdirs`"
+export OPENMPI_INCLUDE_DIR="`$OPENMPI_BIN_DIR/mpicc --showme:incdirs`"
+export OPENMPI_COMPILE_FLAGS="`$OPENMPI_BIN_DIR/mpicc --showme:compile`"
+export OPENMPI_LINK_FLAGS="`$OPENMPI_BIN_DIR/mpicc --showme:link`"
# Specify system installed ThirdParty packages/libraries
# NB: The packages installed under $WM_THIRD_PARTY_DIR
@@ -201,7 +201,6 @@
# For AllMake.stage1
#export WM_THIRD_PARTY_USE_GCC_492=1
#export WM_THIRD_PARTY_USE_GCC_484=1
-#export WM_THIRD_PARTY_USE_GCC_474=1
#export WM_THIRD_PARTY_USE_GCC_463=1
#export WM_THIRD_PARTY_USE_GCC_451=1
#export WM_THIRD_PARTY_USE_GCC_445=1
@@ -209,7 +208,8 @@
#export WM_THIRD_PARTY_USE_M4_1416=1
#export WM_THIRD_PARTY_USE_BISON_27=1
#export WM_THIRD_PARTY_USE_FLEX_2535=1
-export WM_THIRD_PARTY_USE_CMAKE_322=1
+#export WM_THIRD_PARTY_USE_CMAKE_322=1
+unset WM_THIRD_PARTY_USE_CMAKE_322
#
# For AllMake.stage2
EOF
# Patch the file prefs.sh
patch -p0 < patch.txt
# Cleanup
rm patch.txt
# You are done
#
### - Stop to copy commands here ###########################################
############################################################################
* Set environment variables:
cd ~/foam/foam-extend-3.2
. etc/bashrc
* Before compiling on the Raspberry Pi 2:
Even though the Raspberry Pi2 has a more onboard RAM memory (1 GB), it cannot
compile some parts of foam-extend in parallel without borrowing some virtual
memory (swap). Depending on your system configuration and the amount of enabled
services on your Raspberry Pi, you might even ran out of memory completely. So
it is recommended not to compile foam-extend in parallel unless you keep an eye
regularly on the compilation process and adjust your environment variable
WM_NCOMPPROCS accordingly so you can compile some libraries/applications in
parallel and some others using just 1 core.
export WM_NCOMPPROCS=1 # or maybe 2
* Compile:
# This will take a very long time but it will compile completely
./Allwmake.firstInstall
* Create user directory:
mkdir -p $FOAM_RUN
And you are ready to start.

View file

@ -0,0 +1,151 @@
Below are the build instructions for Raspbian Jessie (November 2015)
These instructions assume that your Raspbian installation is up and running with
full network access. If not, please visit the following Web sites for further
instructions. As always, Google will also be your friend.
https://www.raspberrypi.org/documentation/
https://www.raspberrypi.org/downloads/raspbian/
* Update your Raspbian installation:
sudo apt-get update
sudo apt-get upgrade
* Install required packages:
sudo apt-get install git gcc cmake bison flex make build-essential \
bison zlib1g-dev qt4-dev-tools libqt4-dev libopenmpi-dev openmpi-bin \
rpm libncurses-dev libxt-dev libboost-system-dev libboost-thread-dev \
libgmp-dev libmpfr-dev
* Create the foam-extend installation directory:
These instructions assume that you install in the default location, which is
~/foam/ . Create this folder with:
mkdir ~/foam
* Obtain and unpack source code (if you read this, you probably already have):
The recommended way is to get the source code through git source code
management system. This way, you can get updates and bugfixes easily by running
"git pull". To install into the default location run:
cd ~/foam
git clone git://git.code.sf.net/p/foam-extend/foam-extend-3.2
* For Raspbian, you need to customize your file etc/prefs.sh in order to enable
the usage of system-provided packages, and to enable the compilation of other.
Here is a list of commands that will do just that. You can copy/paste
the following block of commands in a control terminal in order to make
the necessary adjustments. You will need to be located at the root of your
foam-extend-3.2 installation for those commands to work.
### - Start to copy commands here ###########################################
#
cd ~/foam/foam-extend-3.2
# Create a prefs.sh file
cp etc/prefs.sh-EXAMPLE etc/prefs.sh
# Create a patch file
cat <<'EOF' >> patch.txt
--- etc/prefs.sh-EXAMPLE 2015-11-26 05:01:05.676022832 +0000
+++ etc/prefs.sh 2015-12-05 17:27:58.100579669 +0000
@@ -36,8 +36,9 @@
# Specify system compiler
# ~~~~~~~~~~~~~~~~~~~~~~~
-#compilerInstall=System
+compilerInstall=System
#compilerInstall=FOAM
+#WM_COMPILER=Gcc49
# Specify system openmpi
# ~~~~~~~~~~~~~~~~~~~~~~
@@ -46,14 +47,14 @@
# The other openmpi related variables will be initialized using
# the command mpicc --showme:
#
-#export WM_MPLIB=SYSTEMOPENMPI
-#export OPENMPI_DIR=path_to_system_installed_openmpi
-#export OPENMPI_BIN_DIR=$OPENMPI_DIR/bin
-#
-#export OPENMPI_LIB_DIR="`$OPENMPI_BIN_DIR/mpicc --showme:libdirs`"
-#export OPENMPI_INCLUDE_DIR="`$OPENMPI_BIN_DIR/mpicc --showme:incdirs`"
-#export OPENMPI_COMPILE_FLAGS="`$OPENMPI_BIN_DIR/mpicc --showme:compile`"
-#export OPENMPI_LINK_FLAGS="`$OPENMPI_BIN_DIR/mpicc --showme:link`"
+export WM_MPLIB=SYSTEMOPENMPI
+export OPENMPI_DIR=/usr
+export OPENMPI_BIN_DIR=$OPENMPI_DIR/bin
+#
+export OPENMPI_LIB_DIR="`$OPENMPI_BIN_DIR/mpicc --showme:libdirs`"
+export OPENMPI_INCLUDE_DIR="`$OPENMPI_BIN_DIR/mpicc --showme:incdirs`"
+export OPENMPI_COMPILE_FLAGS="`$OPENMPI_BIN_DIR/mpicc --showme:compile`"
+export OPENMPI_LINK_FLAGS="`$OPENMPI_BIN_DIR/mpicc --showme:link`"
# Specify system installed ThirdParty packages/libraries
# NB: The packages installed under $WM_THIRD_PARTY_DIR
@@ -201,7 +202,6 @@
# For AllMake.stage1
#export WM_THIRD_PARTY_USE_GCC_492=1
#export WM_THIRD_PARTY_USE_GCC_484=1
-#export WM_THIRD_PARTY_USE_GCC_474=1
#export WM_THIRD_PARTY_USE_GCC_463=1
#export WM_THIRD_PARTY_USE_GCC_451=1
#export WM_THIRD_PARTY_USE_GCC_445=1
@@ -209,7 +209,8 @@
#export WM_THIRD_PARTY_USE_M4_1416=1
#export WM_THIRD_PARTY_USE_BISON_27=1
#export WM_THIRD_PARTY_USE_FLEX_2535=1
-export WM_THIRD_PARTY_USE_CMAKE_322=1
+#export WM_THIRD_PARTY_USE_CMAKE_322=1
+unset WM_THIRD_PARTY_USE_CMAKE_322
#
# For AllMake.stage2
EOF
# Patch the file prefs.sh
patch -p0 < patch.txt
# Cleanup
rm patch.txt
# You are done
#
### - Stop to copy commands here ###########################################
############################################################################
* Set environment variables:
cd ~/foam/foam-extend-3.2
. etc/bashrc
* Before compiling on the Raspberry Pi 2:
Even though the Raspberry Pi2 has a more onboard RAM memory (1 GB), it cannot
compile some parts of foam-extend in parallel without borrowing some virtual
memory (swap). Depending on your system configuration and the amount of enabled
services on your Raspberry Pi, you might even ran out of memory completely. So
it is recommended not to compile foam-extend in parallel unless you keep an eye
regularly on the compilation process and adjust your environment variable
WM_NCOMPPROCS accordingly so you can compile some libraries/applications in
parallel and some others using just 1 core.
export WM_NCOMPPROCS=1 # or maybe 2
* Compile:
# This will take a very long time but it will compile completely
./Allwmake.firstInstall
* Create user directory:
mkdir -p $FOAM_RUN
And you are ready to start.

View file

@ -288,6 +288,16 @@ Linux)
export WM_LDFLAGS='-m64' export WM_LDFLAGS='-m64'
;; ;;
armv7l)
WM_ARCH=linuxARM7
export WM_COMPILER_LIB_ARCH=32
export WM_CC='gcc'
export WM_CXX='g++'
export WM_CFLAGS='-fPIC -mfloat-abi=hard'
export WM_CXXFLAGS='-fPIC -mfloat-abi=hard'
export WM_LDFLAGS='-mfloat-abi=hard'
;;
*) *)
echo Unknown processor type `uname -m` for Linux echo Unknown processor type `uname -m` for Linux
;; ;;

View file

@ -228,6 +228,16 @@ case Linux:
setenv WM_LDFLAGS '-m64' setenv WM_LDFLAGS '-m64'
breaksw breaksw
armv7l)
setenv WM_ARCH linuxARM7
setenv WM_COMPILER_LIB_ARCH 32
setenv WM_CC 'gcc'
setenv WM_CXX 'g++'
setenv WM_CFLAGS '-fPIC -mfloat-abi=hard'
setenv WM_CXXFLAGS '-fPIC -mfloat-abi=hard'
setenv WM_LDFLAGS '-mfloat-abi=hard'
;;
default: default:
echo Unknown processor type `uname -m` for Linux echo Unknown processor type `uname -m` for Linux
breaksw breaksw

View file

@ -46,7 +46,7 @@ SourceFiles
#include "OSspecific.H" #include "OSspecific.H"
#include <signal.h> #include <signal.h>
#if defined(linux) || defined(linuxAMD64) || defined(linuxIA64) #if defined(linux) || defined(linuxAMD64) || defined(linuxIA64) || defined(linuxARM7)
# define LINUX # define LINUX
#endif #endif

View file

@ -90,7 +90,7 @@ inline void Foam::UList<T>::checkStart(const label start) const
if (start<0 || (start && start>=size_)) if (start<0 || (start && start>=size_))
{ {
FatalErrorIn("UList<T>::checkStart(const label)") FatalErrorIn("UList<T>::checkStart(const label)")
<< "start " << start << " out of range 0 ... " << max(size_-1, 0) << "start " << start << " out of range 0 ... " << max(label(size_-1), label(0))
<< abort(FatalError); << abort(FatalError);
} }
} }

View file

@ -0,0 +1,16 @@
.SUFFIXES: .c .h
cWARN = -Wall
cc = gcc
include $(RULES)/c$(WM_COMPILE_OPTION)
cFLAGS = $(GFLAGS) $(cWARN) $(cOPT) $(cDBUG) $(LIB_HEADER_DIRS) -fPIC
ctoo = $(WM_SCHEDULER) $(cc) $(cFLAGS) -c $$SOURCE -o $@
LINK_LIBS = $(cDBUG)
LINKLIBSO = $(cc) -shared
LINKEXE = $(cc) -Xlinker --add-needed -Xlinker -z -Xlinker nodefs

View file

@ -0,0 +1,21 @@
.SUFFIXES: .C .cxx .cc .cpp
c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast
CC = g++
include $(RULES)/c++$(WM_COMPILE_OPTION)
ptFLAGS = -DNoRepository -ftemplate-depth=100
c++FLAGS = $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC
Ctoo = $(WM_SCHEDULER) $(CC) $(c++FLAGS) -c $$SOURCE -o $@
cxxtoo = $(Ctoo)
cctoo = $(Ctoo)
cpptoo = $(Ctoo)
LINK_LIBS = $(c++DBUG)
LINKLIBSO = $(CC) $(c++FLAGS) -shared -Xlinker --add-needed -Xlinker --no-as-needed
LINKEXE = $(CC) $(c++FLAGS) -Xlinker --add-needed -Xlinker --no-as-needed

View file

@ -0,0 +1,2 @@
c++DBUG = -ggdb3 -DFULLDEBUG
c++OPT = -O0 -fdefault-inline

View file

@ -0,0 +1,2 @@
c++DBUG =
c++OPT = -O3 -floop-optimize -falign-loops -falign-labels -falign-functions -falign-jumps -fprefetch-loop-arrays -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard

View file

@ -0,0 +1,2 @@
c++DBUG = -pg
c++OPT = -O2

View file

@ -0,0 +1,2 @@
cDBUG = -ggdb -DFULLDEBUG
cOPT = -O1 -fdefault-inline -finline-functions

View file

@ -0,0 +1,2 @@
cDBUG =
cOPT = -O3 -floop-optimize -falign-loops -falign-labels -falign-functions -falign-jumps -fprefetch-loop-arrays -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard

View file

@ -0,0 +1,2 @@
cDBUG = -pg
cOPT = -O2

View file

@ -0,0 +1,9 @@
CPP = cpp -traditional-cpp $(GFLAGS)
LD = ld
PROJECT_LIBS = -l$(WM_PROJECT) -ldl
include $(GENERAL_RULES)/standard
include $(RULES)/c
include $(RULES)/c++

View file

@ -0,0 +1,3 @@
PFLAGS = -DOMPI_SKIP_MPICXX
PINC = -I$(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib -lmpi

View file

@ -0,0 +1,3 @@
PFLAGS = -DOMPI_SKIP_MPICXX
PINC = $(OPENMPI_COMPILE_FLAGS)
PLIBS = -L$(MPI_ARCH_PATH)/lib/openmpi -lmpi