Hi debian-powerpc, Could someone please test a patched ioquake3 on PowerPC, preferably one without Altivec? Please reply to me or to the bug, I'm not subscribed to debian-powerpc.
You will need 3D acceleration supported by Linux (which probably means some sort of ATI/AMD or nVidia). Testing on any of these platforms is welcome, as long as you know which one you're using: * PowerPC with no Altivec (e.g. Mac G3) * PowerPC with Altivec (e.g. Mac G4/G5) * powerpcspe with no Altivec Please test ioquake3 from Debian unstable, with the attached patch applied. Testing the unpatched ioquake3 from unstable for comparison would also be helpful. Brief background, from #701561: ioquake3 currently always builds with Altivec. This causes it to FTBFS on powerpcspe (where Altivec doesn't exist), and only work on a subset of supported powerpc machines (since, AIUI, Debian still supports G3 Macs and other non-Altivec PowerPCs). I would like to fix this, but I don't have a working PowerPC, and I'm concerned that the bytecode JIT might have a hidden dependency on Altivec. You can test the engine using either Quake III Arena (non-distributable, but somewhat easier) or OpenArena (DFSG-free). Instructions below. Thanks, S Testing with Quake III Arena ---------------------------- If you have a copy of Quake III Arena for any platform (the only bit you actually need from the retail game is baseq3/pak0.pk3), please try with Debian's contrib quake3 package. game-data-packager can package the necessary non-distributable data to get this working. Testing with OpenArena ---------------------- This is a bit more involved, because the Debian package doesn't normally use the bytecode JIT, and that's the part I'm worried about: * Install Debian's openarena package * Download http://www.pseudorandom.co.uk/~smcv/oa088upstream/vms.pk3 and put it in ~/.openarena/oa088upstream/vms.pk3 (it contains bytecode executables for the UI, server-side game and client-side game - we ship that part of OpenArena as native-code in Debian because it needs to be compiled with a non-DFSG compiler) * Start openarena from a terminal * Go to the Mods menu * Select "oa088upstream" and click Load * Open the console (Shift+Escape), you should see messages like this near the end: > Loading vm file vm/ui.qvm... > File "vm/ui.qvm" found in "/home/smcv/.openarena/oa088upstream/vms.pk3" > ...which has vmMagic VM_MAGIC_VER2 If you see something about "DLL files" near the end instead, then the package of bytecode has not worked and I'll have to provide better instructions. * Close the console (Shift+Escape). * Start a single-player game and try it.
diff --git a/debian/changelog b/debian/changelog index ca4692d..c015603 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +ioquake3 (1.36+u20130504+g42eeb75-2+noaltivec) UNTESTED; urgency=low + + * Add an untested patch to disable Altivec on the architectures + where it isn't guaranteed to be present, or is guaranteed not to be + present. Closes: #701561, if it works. + + -- Simon McVittie <s...@debian.org> Tue, 04 Jun 2013 10:05:29 +0100 + ioquake3 (1.36+u20130504+g42eeb75-2) unstable; urgency=low * Enable Opus support now that #708008 is fixed diff --git a/debian/patches/0001-untested-Add-support-for-PowerPCs-without-Altivec.patch b/debian/patches/0001-untested-Add-support-for-PowerPCs-without-Altivec.patch new file mode 100644 index 0000000..c28eba6 --- /dev/null +++ b/debian/patches/0001-untested-Add-support-for-PowerPCs-without-Altivec.patch @@ -0,0 +1,119 @@ +From 6cb56d6ba2ef47813548efcbc02d26eb942ba713 Mon Sep 17 00:00:00 2001 +From: Simon McVittie <s...@debian.org> +Date: Sun, 19 May 2013 22:57:06 +0100 +Subject: [PATCH] [untested] Add support for PowerPCs without Altivec + +Debian's powerpc port still supports baseline PowerPCs without Altivec +(e.g. Mac G3), and its powerpcspe port is a variant of PowerPC in +which "Signal Processing Engine" extensions replace, and are +incompatible with, the Altivec opcodes. + +(The Signal Processing Engine should not be confused with +Synergistic Processing Elements, as seen in the Playstation 3; +those don't conflict with having Altivec.) +--- + Makefile | 30 ++++++++++++++++++++++++------ + README | 2 ++ + code/qcommon/q_platform.h | 2 +- + 3 files changed, 27 insertions(+), 7 deletions(-) + +diff --git a/Makefile b/Makefile +index 9561445..20876b2 100644 +--- a/Makefile ++++ b/Makefile +@@ -215,6 +215,10 @@ ifndef USE_RENDERER_DLOPEN + USE_RENDERER_DLOPEN=1 + endif + ++ifndef USE_ALTIVEC ++USE_ALTIVEC=1 ++endif ++ + ifndef DEBUG_CFLAGS + DEBUG_CFLAGS=-g -O0 + endif +@@ -335,11 +339,15 @@ ifneq (,$(findstring "$(PLATFORM)", "linux" "gnu_kfreebsd" "kfreebsd-gnu" "gnu") + HAVE_VM_COMPILED=true + else + ifeq ($(ARCH),ppc) +- BASE_CFLAGS += -maltivec ++ ifeq ($(USE_ALTIVEC),1) ++ BASE_CFLAGS += -maltivec -DUSE_ALTIVEC ++ endif + HAVE_VM_COMPILED=true + endif + ifeq ($(ARCH),ppc64) +- BASE_CFLAGS += -maltivec ++ ifeq ($(USE_ALTIVEC),1) ++ BASE_CFLAGS += -maltivec -DUSE_ALTIVEC ++ endif + HAVE_VM_COMPILED=true + endif + ifeq ($(ARCH),sparc) +@@ -409,11 +417,17 @@ ifeq ($(PLATFORM),darwin) + BASE_CFLAGS = -Wall -Wimplicit -Wstrict-prototypes + + ifeq ($(ARCH),ppc) +- BASE_CFLAGS += -arch ppc -faltivec -mmacosx-version-min=10.2 ++ BASE_CFLAGS += -arch ppc -mmacosx-version-min=10.2 ++ ifeq ($(USE_ALTIVEC),1) ++ BASE_CFLAGS += -faltivec -DUSE_ALTIVEC ++ endif + OPTIMIZEVM += -O3 + endif + ifeq ($(ARCH),ppc64) +- BASE_CFLAGS += -arch ppc64 -faltivec -mmacosx-version-min=10.2 ++ BASE_CFLAGS += -arch ppc64 -mmacosx-version-min=10.2 ++ ifeq ($(USE_ALTIVEC),1) ++ BASE_CFLAGS += -faltivec -DUSE_ALTIVEC ++ endif + endif + ifeq ($(ARCH),x86) + OPTIMIZEVM += -march=prescott -mfpmath=sse +@@ -717,11 +731,15 @@ ifeq ($(PLATFORM),openbsd) + HAVE_VM_COMPILED=true + else + ifeq ($(ARCH),ppc) +- BASE_CFLAGS += -maltivec ++ ifeq ($(USE_ALTIVEC),1) ++ BASE_CFLAGS += -maltivec -DUSE_ALTIVEC ++ endif + HAVE_VM_COMPILED=true + endif + ifeq ($(ARCH),ppc64) +- BASE_CFLAGS += -maltivec ++ ifeq ($(USE_ALTIVEC),1) ++ BASE_CFLAGS += -maltivec -DUSE_ALTIVEC ++ endif + HAVE_VM_COMPILED=true + endif + ifeq ($(ARCH),sparc64) +diff --git a/README b/README +index 1f4cf49..6d35132 100644 +--- a/README ++++ b/README +@@ -105,6 +105,8 @@ Makefile.local: + USE_INTERNAL_OGG - build and link against internal ogg library + USE_INTERNAL_OPUS - build and link against internal opus/opusfile libraries + USE_LOCAL_HEADERS - use headers local to ioq3 instead of system ones ++ USE_ALTIVEC - set to 0 to support older or embedded PowerPCs ++ without Altivec + DEBUG_CFLAGS - C compiler flags to use for building debug version + COPYDIR - the target installation directory + TEMPDIR - specify user defined directory for temp files +diff --git a/code/qcommon/q_platform.h b/code/qcommon/q_platform.h +index 9ae85d5..fb0ddff 100644 +--- a/code/qcommon/q_platform.h ++++ b/code/qcommon/q_platform.h +@@ -44,7 +44,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + #if (defined(powerc) || defined(powerpc) || defined(ppc) || \ + defined(__ppc) || defined(__ppc__)) && !defined(C_ONLY) + #define idppc 1 +-#if defined(__VEC__) ++#if defined(__VEC__) && defined(USE_ALTIVEC) + #define idppc_altivec 1 + #ifdef MACOS_X // Apple's GCC does this differently than the FSF. + #define VECCONST_UINT8(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) \ +-- +1.7.10.4 + diff --git a/debian/patches/series b/debian/patches/series index 31a5d4b..b3996ce 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -5,3 +5,4 @@ 0009-Run-in-a-window-by-default-on-new-installations.patch 0010-Look-for-system-Vorbis-Opus-and-Ogg-via-pkg-config.patch ioquake3_hurd_support.patch +0001-untested-Add-support-for-PowerPCs-without-Altivec.patch diff --git a/debian/rules b/debian/rules index 025b420..29c3059 100755 --- a/debian/rules +++ b/debian/rules @@ -20,12 +20,22 @@ else TARGET = debug endif +# Use Altivec/VMX on ppc64, which is really "64-bit PowerPC with Altivec". +# Don't use it on powerpcspe, which has SPE instead of Altivec. +# Don't use it on powerpc yet, but we could if Debian's baseline CPU changes. +ifneq ($(filter ppc64,$(DEB_HOST_ARCH_CPU)),) +USE_ALTIVEC=1 +else +USE_ALTIVEC=0 +endif + override_dh_auto_build: dh_auto_build \ -- \ BR=build \ BD=build \ V=1 \ + USE_ALTIVEC=$(USE_ALTIVEC) \ USE_CODEC_OPUS=1 \ USE_CODEC_VORBIS=1 \ USE_CURL=1 \