From e84c2a9e9ae5ed667e554471015a5df3bfd8634a Mon Sep 17 00:00:00 2001
From: Mike Pall <mike>
Date: Sun, 29 Jul 2012 12:22:18 +0200
Subject: Handle cross-compiles with FPU/no-FPU or hard-fp/soft-fp ABI
 mismatch.

---
 src/Makefile  |  8 +++++++-
 src/lj_arch.h | 14 +++++++++-----
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/Makefile b/src/Makefile
index 531f8bab..748a4ed7 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -379,9 +379,15 @@ ifneq (,$(findstring LJ_DUALNUM 1,$(TARGET_TESTARCH)))
 endif
 ifneq (,$(findstring LJ_ARCH_HASFPU 1,$(TARGET_TESTARCH)))
   DASM_AFLAGS+= -D FPU
+  TARGET_ARCH+= -DLJ_ARCH_HASFPU=1
+else
+  TARGET_ARCH+= -DLJ_ARCH_HASFPU=0
 endif
 ifeq (,$(findstring LJ_ABI_SOFTFP 1,$(TARGET_TESTARCH)))
-  DASM_AFLAGS+= -D HF
+  DASM_AFLAGS+= -D HFABI
+  TARGET_ARCH+= -DLJ_ABI_SOFTFP=0
+else
+  TARGET_ARCH+= -DLJ_ABI_SOFTFP=1
 endif
 DASM_AFLAGS+= -D VER=$(subst LJ_ARCH_VERSION_,,$(filter LJ_ARCH_VERSION_%,$(subst LJ_ARCH_VERSION ,LJ_ARCH_VERSION_,$(TARGET_TESTARCH))))
 ifeq (Windows,$(TARGET_SYS))
diff --git a/src/lj_arch.h b/src/lj_arch.h
index a3d51542..8850f8a9 100644
--- a/src/lj_arch.h
+++ b/src/lj_arch.h
@@ -121,7 +121,6 @@
 #define LJ_ARCH_NAME		"x86"
 #define LJ_ARCH_BITS		32
 #define LJ_ARCH_ENDIAN		LUAJIT_LE
-#define LJ_ARCH_HASFPU		1
 #if LJ_TARGET_WINDOWS || __CYGWIN__
 #define LJ_ABI_WIN		1
 #else
@@ -139,7 +138,6 @@
 #define LJ_ARCH_NAME		"x64"
 #define LJ_ARCH_BITS		64
 #define LJ_ARCH_ENDIAN		LUAJIT_LE
-#define LJ_ARCH_HASFPU		1
 #define LJ_ABI_WIN		LJ_TARGET_WINDOWS
 #define LJ_TARGET_X64		1
 #define LJ_TARGET_X86ORX64	1
@@ -154,8 +152,12 @@
 #define LJ_ARCH_NAME		"arm"
 #define LJ_ARCH_BITS		32
 #define LJ_ARCH_ENDIAN		LUAJIT_LE
+#ifndef LJ_ARCH_HASFPU
 #define LJ_ARCH_HASFPU		0
+#endif
+#ifndef LJ_ABI_SOFTFP
 #define LJ_ABI_SOFTFP		1
+#endif
 #define LJ_ABI_EABI		1
 #define LJ_TARGET_ARM		1
 #define LJ_TARGET_EHRETREG	0
@@ -184,7 +186,6 @@
 #define LJ_ARCH_BITS		32
 #endif
 #define LJ_ARCH_ENDIAN		LUAJIT_BE
-#define LJ_ARCH_HASFPU		1
 #define LJ_TARGET_PPC		1
 #define LJ_TARGET_EHRETREG	3
 #define LJ_TARGET_JUMPRANGE	25	/* +-2^25 = +-32MB */
@@ -228,8 +229,9 @@
 #define LJ_ARCH_NAME		"ppcspe"
 #define LJ_ARCH_BITS		32
 #define LJ_ARCH_ENDIAN		LUAJIT_BE
-#define LJ_ARCH_HASFPU		1
+#ifndef LJ_ABI_SOFTFP
 #define LJ_ABI_SOFTFP		1
+#endif
 #define LJ_ABI_EABI		1
 #define LJ_TARGET_PPCSPE	1
 #define LJ_TARGET_EHRETREG	3
@@ -251,7 +253,6 @@
 #define LJ_ARCH_ENDIAN		LUAJIT_BE
 #endif
 #define LJ_ARCH_BITS		32
-#define LJ_ARCH_HASFPU		1
 #define LJ_TARGET_MIPS		1
 #define LJ_TARGET_EHRETREG	4
 #define LJ_TARGET_JUMPRANGE	27	/* 2*2^27 = 256MB-aligned region */
@@ -358,6 +359,9 @@
 #define LJ_HASFFI		1
 #endif
 
+#ifndef LJ_ARCH_HASFPU
+#define LJ_ARCH_HASFPU		1
+#endif
 #define LJ_SOFTFP		(!LJ_ARCH_HASFPU)
 
 #if LJ_ARCH_ENDIAN == LUAJIT_BE
-- 
cgit v1.2.3-55-g6feb