Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Issue] defforeign test fails for armhf #395

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .travis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ if [ "$QEMU" != "" ]; then
export EXIT_STATUS=0;
set +e
# run test in EusLisp/test
make -C test
for test_l in test/*.l; do

travis_time_start euslisp.${test_l##*/}.test
Expand Down Expand Up @@ -235,6 +236,7 @@ if [[ "`uname -m`" == "aarch"* ]]; then
fi

# run test in EusLisp/test
make -C $CI_SOURCE_PATH/test
for test_l in $CI_SOURCE_PATH/test/*.l; do

travis_time_start euslisp.${test_l##*/}.test
Expand Down
4 changes: 2 additions & 2 deletions lisp/c/eval.c
Original file line number Diff line number Diff line change
Expand Up @@ -1018,10 +1018,10 @@ pointer args[];
else if (p==K_STRING) {
if (elmtypeof(lisparg)==ELM_FOREIGN) cargv[i++]=lisparg->c.ivec.iv[0];
else cargv[i++]=(eusinteger_t)(lisparg->c.str.chars);}
else if (p==K_FLOAT32) {
else if (p==K_FLOAT32 || ((WORD_SIZE == 32) && (p==K_FLOAT)) ) {
numbox.f=ckfltval(lisparg);
cargv[i++]=(int)numbox.i.i1;}
else if (p==K_DOUBLE || p==K_FLOAT) {
else if (p==K_DOUBLE || ((WORD_SIZE == 64) && (p==K_FLOAT)) ) {
numbox.d=ckfltval(lisparg);
cargv[i++]=numbox.i.i1; cargv[i++]=numbox.i.i2;}
else error(E_USER,(pointer)"unknown type specifier");}
Expand Down
34 changes: 34 additions & 0 deletions test/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
GCC_MACHINE=$(shell gcc -dumpmachine)
$(info "-- GCC_MACHINE = ${GCC_MACHINE}")
OS=$(shell uname -s | sed 's/[^A-Za-z1-9].*//')
$(info "-- OS = ${OS}")
ifeq ($(OS),Linux)
export MAKEFILE=Makefile.Linux
endif
ifeq ($(OS),CYGWIN)
export MAKEFILE=Makefile.Cygwin
endif
ifeq ($(OS),Darwin)
export MAKEFILE=Makefile.Darwin
endif

$(info "-- MAKEFILE = ${MAKEFILE}")

# set EUSDIR if not defined
export EUSDIR?=$(CURDIR)/..
$(info "-- EUSDIR = ${EUSDIR}")

include $(MAKEFILE)

SRC=testdefforeign.c
OBJ=$(basename $(SRC)).o
LIB=$(LPFX)$(basename $(SRC)).$(LSFX)

$(LIB): $(OBJ)
$(LD) $(SOFLAGS) $(OUTOPT)$(LIB) $(OBJ) $(LDFLAGS)

$(OBJ): $(SRC)
$(CC) $(CFLAGS) -DCOMPILE_LIB -c $(SRC) $(OBJOPT)$(OBJ)

clean:
rm -f $(LIB) $(OBJ)
12 changes: 12 additions & 0 deletions test/Makefile.Cygwin
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
CC = c++
CFLAGS = -O2 -falign-functions=4 -DCygwin -I$(EUSDIR)/include
LDFLAGS =
OBJOPT = -o
OUTOPT = -o
LD = c++ -shared -falign-functions=4
EXELD = c++ -falign-functions=4
SOFLAGS =
EXESFX = .exe
LSFX = dll
LPFX = lib
LIBS = -L$(ARCHDIR) -lRAPID
12 changes: 12 additions & 0 deletions test/Makefile.Darwin
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
CC = c++
CFLAGS = -O2 -falign-functions=8 -fPIC -DDarwin -DGCC -I$(EUSDIR)/include
LDFLAGS =
OBJOPT = -o
OUTOPT = -o
LD = c++
SOFLAGS = -dynamiclib -flat_namespace -undefined suppress
EXELD = c++
EXESFX =
LSFX = so
LPFX = lib
LIBS = -L$(ARCHDIR) -lRAPID
33 changes: 33 additions & 0 deletions test/Makefile.Linux
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
CC = c++
CFLAGS = -O2 -DLinux -DGCC -I$(EUSDIR)/include
LDFLAGS =
OBJOPT = -o
OUTOPT = -o
LD = c++
SOFLAGS = -shared
EXELD = c++
EXESFX =
LSFX = so
LPFX = lib

ifneq (,$(findstring 64,$(shell gcc -dumpmachine)))
CFLAGS+=-falign-functions=8
else
CFLAGS+=-falign-functions=4
endif

ifneq ($(shell gcc -dumpmachine | egrep "^(arm|aarch)"),)
LDFLAGS+=-Wl,-z,execstack
CFLAGS+=-DARM -fPIC
endif
ifneq ($(shell gcc -dumpmachine | grep "^x86_64"),)
CFLAGS+=-fPIC
endif

ifneq ($(shell gcc -dumpmachine | grep "i.*86-linux"),)
CC += -m32
LD += -m32
EXELD += -m32
endif


35 changes: 35 additions & 0 deletions test/test-defforeign.l
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
(require :unittest "lib/llib/unittest.l")

(init-unit-test)

(deftest test-defforeign
(defvar *testforeign-lib*
(load-foreign (format nil "~a/test/libtestdefforeign.so" (unix:getenv "EUSDIR"))))

(defforeign test1
*testforeign-lib*
"test1"
(:integer :float)
:float
)

(defforeign test2
*testforeign-lib*
"test2"
(:string)
:float
)

(setq test1-result (test1 1 2.5))
(format t "test1: ~a~%" test1-result)
(assert (= test1-result 3.5))

(setq test2-result (test2 (float-vector 1.0 2.5)))
(format t "test2: ~a~%" test2-result)
(assert (= test2-result 3.5))
)

(eval-when
(load eval)
(run-all-tests)
(exit))
34 changes: 34 additions & 0 deletions test/testdefforeign.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// for eus.h
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <setjmp.h>
#include <errno.h>
#include <sstream>

#define class eus_class
#define throw eus_throw
#define export eus_export
#define vector eus_vector
#define string eus_string
#include <eus.h> // include eus.h just for eusfloat_t ...
#undef class
#undef throw
#undef export
#undef vector
#undef string

extern "C" {
eusfloat_t test1(eusinteger_t v1, eusfloat_t v2) {
printf("// v1: %d\n", (int)v1);
printf("// v2: %f\n", v2);
return v1 + v2;
}

eusfloat_t test2(eusfloat_t *v) {
printf("// v[0]: %f\n", v[0]);
printf("// v[1]: %f\n", v[1]);
return v[0] + v[1];
}
}