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)