Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ARM support #22

Open
Kukers86PL opened this issue Dec 24, 2021 · 9 comments
Open

ARM support #22

Kukers86PL opened this issue Dec 24, 2021 · 9 comments

Comments

@Kukers86PL
Copy link

Could ARM architecture be officially supported to be able to install omnibot on RPI?

@plastovicka
Copy link
Collaborator

Enemy Territory can be downloaded from https://www.etlegacy.com/download. They say that ET:Legacy is bundled with Omni-Bot.
You can also compile it from the source code: https://techyian.github.io/2018-10-14-install-enemy-territory-on-raspberry-pi/

@ensiform
Copy link

ensiform commented Dec 24, 2021

Pretty sure only x86 and x86_64 are including OB.

Guess that tutorial for rpi says it can work.

@alesbd
Copy link

alesbd commented Mar 2, 2023

I'm trying to creat ET server with bots on RHEL 9.1 running on ARM.
Compiling of ET was OK. I got it already running.
But with omni-bot compilation I'm missing DebugDraw.h . Do you got any idea where to get it?

gcc.compile.c++ build/Common/gcc-11/debug/architecture-arm/link-static/RecastInterfaces.o
g++: warning: switch ‘-ffriend-injection’ is no longer supported
In file included from Common/RecastInterfaces.cpp:1:
Common/RecastInterfaces.h:12:10: fatal error: DebugDraw.h: No such file or directory
   12 | #include "DebugDraw.h"
      |          ^~~~~~~~~~~~~
compilation terminated.

    "g++"   -O0 -fno-inline -Wall -g -DPHYSFS_NO_CDROM_SUPPORT -DPHYSFS_SUPPORTS_7Z=1 -DPHYSFS_SUPPORTS_ZIP=1 -ffriend-injection -fno-strict-aliasing -pthread -w -D_DEBUG -D__linux__  -I"/home/et/git/boost_1_81_0" -I"Common" -I"dependencies/Recast/DebugUtils/Include" -I"dependencies/Recast/Detour/Include" -I"dependencies/Recast/Recast/Include" -I"dependencies/gmsrc_ex/src/3rdParty/gmbinder2" -I"dependencies/gmsrc_ex/src/3rdParty/mathlib" -I"dependencies/gmsrc_ex/src/binds" -I"dependencies/gmsrc_ex/src/gm" -I"dependencies/iprof" -I"dependencies/physfs" -I"dependencies/physfs/lzma/C" -I"dependencies/physfs/lzma/C/Archive/7z" -I"dependencies/physfs/lzma/C/Compress/Branch" -I"dependencies/physfs/lzma/C/Compress/Lzma" -I"dependencies/physfs/zlib123" -I"dependencies/wildmagic"  -c -o "build/Common/gcc-11/debug/architecture-arm/link-static/RecastInterfaces.o" "Common/RecastInterfaces.cpp"

...failed gcc.compile.c++ build/Common/gcc-11/debug/architecture-arm/link-static/RecastInterfaces.o...
...skipped <pbuild/Common/gcc-11/debug/architecture-arm/link-static>libCommon.a for lack of <pbuild/Common/gcc-11/debug/architecture-arm/link-static>RecastInterfaces.o...
...failed updating 1 target...
...skipped 1 target...
...updated 51 targets...

Thank you for your help

@plastovicka
Copy link
Collaborator

The master branch is broken. You have to get the source code from the stable branch.

@alesbd
Copy link

alesbd commented Mar 2, 2023

thx a lot for a quick response, I've realized that a few moments before your answer.
Stable looks far more better and there was as well a 'trick' - use the exact commit of gmscriptex that is listed in stable branch :)

och and the same thing will be with boost - I should use boost_1_44_0 and not boost_1_81_0 right?

@plastovicka
Copy link
Collaborator

You can use any version of boost.
You have to change variables BOOST, BOOST_BUILD_PATH and BOOST_LIB in file Omnibot/linux/buildbot.sh. Variable BOOST_SUFFIX should be empty for recent boost versions.

@alesbd
Copy link

alesbd commented Mar 3, 2023

Thank you @plastovicka for your help and support.
OK I think I've reached my dead end.

Build of boost_1_81_0 when fine - no issues, no errors and no warnings.

# as normal user !!!!!!!!!
cd /home/et/git/boost_1_81_0
./bootstrap.sh --with-libraries=date_time,filesystem,regex,system,thread
# as root !!!!!!!!!
cd /home/et/git/boost_1_81_0
./b2 -a address-model=64 architecture=arm cflags=-fPIC link=static install

ls -l /usr/local/lib
drwxr-xr-x. 10 root root   4096 Mar  3 14:56 cmake
-rw-r--r--.  1 root root   9984 Mar  3 14:57 libboost_atomic.a
-rw-r--r--.  1 root root   1522 Mar  3 14:57 libboost_date_time.a
-rw-r--r--.  1 root root 408978 Mar  3 14:57 libboost_filesystem.a
-rw-r--r--.  1 root root 699654 Mar  3 14:57 libboost_regex.a
-rw-r--r--.  1 root root   1500 Mar  3 14:56 libboost_system.a
-rw-r--r--.  1 root root 309936 Mar  3 14:56 libboost_thread.a

But I'm still fighting with Omnibot build

Honestly I'm not sure if BOOST_BUILD_PATH=$BOOST/tools/build is correct. In this path I have:

ls -l $BOOST_BUILD_PATH
total 84
-rw-r--r--.  1 et et 25398 Dec  8 01:02 azure-pipelines.yml
-rw-r--r--.  1 et et   690 Dec  8 01:02 bootstrap.bat
-rwxr-xr-x.  1 et et   622 Dec  8 01:02 bootstrap.sh
-rw-r--r--.  1 et et  1111 Dec  8 01:02 bootstrap_vms.com
-rw-r--r--.  1 et et  5369 Dec  8 01:02 CONTRIBUTING.adoc
drwxr-xr-x.  4 et et    48 Dec  8 01:11 doc
drwxr-xr-x. 23 et et  4096 Dec  8 01:02 example
-rw-r--r--.  1 et et   358 Dec  8 01:11 index.html
-rw-r--r--.  1 et et  6234 Dec  8 01:02 Jamroot.jam
-rw-r--r--.  1 et et  1338 Dec  8 01:02 LICENSE.txt
drwxr-xr-x.  2 et et   133 Dec  8 01:02 notes
-rw-r--r--.  1 et et  1875 Dec  8 01:02 README.adoc
drwxr-xr-x.  9 et et   147 Dec  8 01:02 src
drwxr-xr-x. 12 et et  8192 Dec  8 01:02 test
# as normal user !!!!!!!!!
cd /home/et/git/omni-bot/0.83/Omnibot
export BOOST=/home/et/git/boost_1_81_0
export BOOST_BUILD_PATH=$BOOST/tools/build
export BOOST_LIB=/usr/local/lib
export BOOST_SUFFIX=

cd /home/et/git/omni-bot/0.83/Omnibot
$BOOST/b2 -a address-model=64 architecture=arm release

Log from my buil: omnibot_build.log
And this time I had no file is missing header file, but it looks like some problem in code? Or I have some wrong header files ?
I appreciate any help or idea. Thank you.

@plastovicka
Copy link
Collaborator

I fixed the error in WaypointSerializer today. Update it and then try it again.

@Exagone313
Copy link

Exagone313 commented Apr 21, 2024

I successfully cross-built omni-bot on aarch64 for ET using these steps.

Run the docker.io/etlegacy/lnx-aarch64-build:20240206123350 image in Docker or Podman and then execute this script:

set -e

export BOOST_ROOT=/code/boost
cd /code

apt-get update
apt-get install -y git curl

# compile boost

cat <<EOF > ~/user-config.jam
using gcc : arm : aarch64-linux-gnu-g++ ;
EOF

curl -L -O https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.gz
tar -xf boost-1.84.0.tar.gz
cd boost-1.84.0
./bootstrap.sh --with-libraries=system,filesystem,regex,date_time
./b2 toolset=gcc-arm cxxflags="-fPIC" link=static --prefix="${BOOST_ROOT}" install

# compile omni-bot

git clone https://github.com/jswigart/omni-bot.git -b stable --depth 1 --recursive /code/omni-bot
cd /code/omni-bot/0.83/Omnibot

sed -i -E 's@^(build-project RTCW.*)@#\1@' Jamfile
sed -i -E 's@(std=c\+\+11)@\1 <cflags>-fPIC@' Common/Jamfile

/code/boost-1.84.0/b2 -d+2 toolset=gcc-arm cxxflags="-I${BOOST_ROOT}/include -fPIC" linkflags="-L${BOOST_ROOT}/lib" -a -q release

ls -l /code/omni-bot/0.83/Omnibot/build/ET/gcc-arm/release/omnibot_et.so

What is troubling is that I had to edit Common/Jamfile so it uses -fPIC, I'm not sure what else could have been done. I had an issue with lzma.o not being built with this flag.

The result (gzipped): omnibot_et.aarch64.so.gz

I put it on my (etbloat) server and it seems to work normally.

I'll try to edit the CMake configuration and GitHub actions so that next releases can have aarch64 support officially. My goal is for ET Legacy to ship omni-bot for this architecture.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants