Hi Alex,

attached is a patch to compile picolisp on arm out of the box.  The -m32
switch doesn't seem to be defined there.

The -fPIC option was necessary for:

gcc -o ../lib/z3d   -shared -export-dynamic z3d.o 
/usr/bin/ld: z3d.o: relocation R_ARM_MOVW_ABS_NC against `a local symbol' can 
not be used when making a shared object; recompile with -fPIC
z3d.o: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [../lib/z3d] Error 1
make: Target `picolisp' not remade because of errors.

Maybe there is a better way to handle the error?

Would it be possible to include it in the official version?

Thank you,

Tomas

diff --git a/src/Makefile b/src/Makefile
index 7267011..a229ab8 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -7,46 +7,55 @@ lib = ../lib
 
 picoFiles = main.c gc.c apply.c flow.c sym.c subr.c big.c io.c net.c tab.c
 
-CFLAGS = -c -O2 -m32 -pipe \
+ifeq ($(shell uname -m), armv6l)
+       M32 = -fPIC
+else
+ifeq ($(shell uname -m), armv7l)
+       M32 = -fPIC
+else
+       M32 = -m32
+endif
+endif
+
+CFLAGS = -c -O2 $(M32) -pipe \
        -falign-functions -fomit-frame-pointer -fno-strict-aliasing \
        -W -Wimplicit -Wreturn-type -Wunused -Wformat \
        -Wuninitialized -Wstrict-prototypes \
        -D_GNU_SOURCE  -D_FILE_OFFSET_BITS=64
 
-
 ifeq ($(shell uname), Linux)
        OS = Linux
-       PICOLISP-FLAGS = -m32 -rdynamic
+       PICOLISP-FLAGS = $(M32) -rdynamic
        LIB-FLAGS = -lc -lm -ldl
-       DYNAMIC-LIB-FLAGS = -m32 -shared -export-dynamic
+       DYNAMIC-LIB-FLAGS = $(M32) -shared -export-dynamic
        STRIP = strip
 else
 ifeq ($(shell uname), OpenBSD)
        OS = OpenBSD
-       PICOLISP-FLAGS = -m32 -rdynamic -Wl,-E
+       PICOLISP-FLAGS = $(M32) -rdynamic -Wl,-E
        LIB-FLAGS = -lc -lm
        DYNAMIC-LIB-FLAGS = -Wl,-E -Wl,-shared
        STRIP = strip
 else
 ifeq ($(shell uname), FreeBSD)
        OS = FreeBSD
-       PICOLISP-FLAGS = -m32 -rdynamic
+       PICOLISP-FLAGS = $(M32) -rdynamic
        LIB-FLAGS = -lc -lm
-       DYNAMIC-LIB-FLAGS = -m32 -shared -export-dynamic
+       DYNAMIC-LIB-FLAGS = $(M32) -shared -export-dynamic
        STRIP = strip
 else
 ifeq ($(shell uname), NetBSD)
        OS = NetBSD
-       PICOLISP-FLAGS = -m32 -rdynamic
+       PICOLISP-FLAGS = $(M32) -rdynamic
        LIB-FLAGS = -lc -lm
-       DYNAMIC-LIB-FLAGS = -m32 -shared -export-dynamic
+       DYNAMIC-LIB-FLAGS = $(M32) -shared -export-dynamic
        STRIP = strip
 else
 ifeq ($(shell uname), Darwin)
        OS = Darwin
-       PICOLISP-FLAGS = -m32
+       PICOLISP-FLAGS = $(M32)
        LIB-FLAGS = -lc -lm -ldl
-       DYNAMIC-LIB-FLAGS = -m32 -dynamiclib -undefined dynamic_lookup
+       DYNAMIC-LIB-FLAGS = $(M32) -dynamiclib -undefined dynamic_lookup
        STRIP = strip -x
 else
 ifeq ($(shell uname -o), Cygwin)

Reply via email to