jswigart / omni-bot

Omni-bot is a first person shooter bot frameworkfor AI controlled multiplayer opponents in several popular FPS games and engines
http://www.omni-bot.com
75 stars 23 forks source link

ARM support #22

Open Kukers86PL opened 2 years ago

Kukers86PL commented 2 years ago

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

plastovicka commented 2 years ago

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 commented 2 years ago

Pretty sure only x86 and x86_64 are including OB.

Guess that tutorial for rpi says it can work.

alesbd commented 1 year ago

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 commented 1 year ago

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

alesbd commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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

Exagone313 commented 7 months ago

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.