FAT_FILES=$(FATJAR) $(ALTOSLIB_CLASS) $(ALTOSUILIB_CLASS) $(FREETTS_CLASS) $(JFREECHART_CLASS) $(JCOMMON_CLASS)
-LINUX_FILES=$(FAT_FILES) libaltos.so $(FIRMWARE) $(DOC)
+if MULTI_ARCH
+LINUX_LIBS=libaltos32.so libaltos64.so
+else
+LINUX_LIBS=libaltos.so
+endif
+
+LINUX_FILES=$(FAT_FILES) $(LINUX_LIBS) $(FIRMWARE) $(DOC)
LINUX_EXTRA=altosui-fat
MACOSX_INFO_PLIST=Info.plist
-rm -f "$@"
$(LN_S) ../libaltos/.libs/"$@" .
+libaltos32.so: build-libaltos
+ -rm -f "$@"
+ $(LN_S) ../libaltos/.libs/"$@" .
+
+libaltos64.so: build-libaltos
+ -rm -f "$@"
+ $(LN_S) ../libaltos/.libs/"$@" .
+
libaltos.dylib:
-rm -f "$@"
$(LN_S) ../libaltos/"$@" .
static public boolean initialized = false;
static public boolean loaded_library = false;
+ static final String[] library_names = { "altos", "altos32", "altos64" };
+
public static boolean load_library() {
if (!initialized) {
- try {
- System.loadLibrary("altos");
- libaltos.altos_init();
- loaded_library = true;
- } catch (UnsatisfiedLinkError e) {
+ for (String name : library_names) {
try {
- System.loadLibrary("altos64");
+ System.out.printf ("Trying library %s\n", name);
+ System.loadLibrary(name);
libaltos.altos_init();
loaded_library = true;
- } catch (UnsatisfiedLinkError e2) {
+ System.out.printf ("Using library %s\n", name);
+ break;
+ } catch (UnsatisfiedLinkError e) {
+ System.out.printf("Link error %s\n", e.getMessage());
loaded_library = false;
}
}
AC_DEFINE(HAVE_STLINK,1,[Using STlink library])
fi
-AM_CONDITIONAL([LIBSTLINK], [test x$HAVE_STLINK == xyes])
+AM_CONDITIONAL([LIBSTLINK], [test x$HAVE_STLINK = xyes])
+
+AC_ARG_ENABLE([multi-arch],
+ [AS_HELP_STRING([--enable-multi-arch],
+ [enable building both i386 and amd64 libraries (default=auto)])],
+ [MULTI_ARCH=$enableval],
+ [MULTI_ARCH=auto])
+
+case x"$MULTI_ARCH" in
+xauto)
+ arch=`uname -m`
+ case x"$arch" in
+ xx86_64|xi*86)
+ save_CFLAGS="$CFLAGS"
+ save_LIBS="$LIBS"
+ LIBS="-lbluetooth"
+ CFLAGS="-m64"
+ AC_MSG_CHECKING([if ]$CC[ ]$CFLAGS[ can link programs])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
+ [M64_LINK=yes],
+ [M64_LINK=no])
+ AC_MSG_RESULT([$M64_LINK])
+ CFLAGS="-m32"
+ AC_MSG_CHECKING([if ]$CC[ ]$CFLAGS[ can link programs])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
+ [M32_LINK=yes],
+ [M32_LINK=no])
+ AC_MSG_RESULT([$M32_LINK])
+ CFLAGS="$save_CFLAGS"
+ LIBS="$save_LIBS"
+ case x"$M64_LINK"x"$M32_LINK" in
+ xyesxyes)
+ MULTI_ARCH=yes
+ ;;
+ *)
+ MULTI_ARCH=no
+ ;;
+ esac
+ ;;
+ *)
+ MULTI_ARCH=no
+ ;;
+ esac
+ ;;
+xyes|xno)
+ ;;
+*)
+ MULTI_ARCH="no"
+ ;;
+esac
+
+AM_CONDITIONAL([MULTI_ARCH], [test x$MULTI_ARCH = xyes])
AC_OUTPUT([
Makefile
echo " Android support.............: ${HAVE_ANDROID_SDK}"
echo " STlink support..............: ${HAVE_STLINK}"
echo " Local pdclib................: ${HAVE_PDCLIB}"
+echo " i386 and amd64 libaltos.....: ${MULTI_ARCH}"
echo ""
echo " Java paths"
echo " freetts.....................: ${FREETTS}"
altoslibdir=$(libdir)/altos
altoslib_LTLIBRARIES=libaltos.la
-
-libaltos_la_LDFLAGS = -version-info 1:0:1
+libaltos_la_LDFLAGS=-version-info 1:0:1
libaltos_la_SOURCES=\
libaltos.c \
noinst_PROGRAMS=cjnitest
+cjnitest_SOURCES=cjnitest.c
cjnitest_LDADD=libaltos.la
+if MULTI_ARCH
+altoslib_LTLIBRARIES+=libaltos32.la libaltos64.la
+
+libaltos32_la_LDFLAGS=$(libaltos_la_LDFLAGS)
+libaltos64_la_LDFLAGS=$(libaltos_la_LDFLAGS)
+
+libaltos32_la_CFLAGS=-m32 $(AM_CFLAGS)
+libaltos64_la_CFLAGS=-m64 $(AM_CFLAGS)
+
+libaltos32_la_SOURCES=$(libaltos_la_SOURCES)
+libaltos64_la_SOURCES=$(libaltos_la_SOURCES)
+
+noinst_PROGRAMS+=cjnitest32 cjnitest64
+
+cjnitest32_CFLAGS=-m32
+cjnitest64_CFLAGS=-m64
+
+cjnitest32_SOURCES=$(cjnitest_SOURCES)
+cjnitest64_SOURCES=$(cjnitest_SOURCES)
+
+cjnitest32_LDADD=libaltos32.la
+cjnitest64_LDADD=libaltos64.la
+
+endif
+
+
LIBS=-lbluetooth
HFILES=libaltos.h