From dc765b10da7f1dc8e267bcd70b4dcee243475c83 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 12 Jul 2021 10:08:05 -0700 Subject: [PATCH] libaltos: Use cross compilers to build libaltos for i686, amd64, aarch64, armel and armhf Use current debian packages to build libraries for x86 and arm debian hosts. Signed-off-by: Keith Packard --- altosui/Makefile.am | 41 ++++++++---------- altosuilib/AltosUILib.java | 25 +++++------ libaltos/Makefile.am | 89 ++++++++++++++++++++++++++------------ libaltos/gcc | 22 ++++++++++ micropeak/Makefile.am | 19 ++++++-- telegps/Makefile.am | 39 ++++++++--------- 6 files changed, 148 insertions(+), 87 deletions(-) create mode 100755 libaltos/gcc diff --git a/altosui/Makefile.am b/altosui/Makefile.am index 1cbb919f..1935e75e 100644 --- a/altosui/Makefile.am +++ b/altosui/Makefile.am @@ -57,7 +57,7 @@ ALTOSUILIB_CLASS=\ altosuilib_$(ALTOSUILIB_VERSION).jar if MULTI_ARCH -LIBALTOS_LINUX=libaltos32.so libaltos64.so +LIBALTOS_LINUX=libaltos_i686.so libaltos_amd64.so libaltos_aarch64.so libaltos_armel.so libaltos_armhf.so else LIBALTOS_LINUX=libaltos.so endif @@ -266,7 +266,7 @@ install-altosuiJAVA: altosui.jar classes/altosui: mkdir -p classes/altosui -$(JAR): classaltosui.stamp Manifest.txt $(JAVA_ICONS) $(ALTOSLIB_CLASS) $(ALTOSUILIB_CLASS) +$(JAR): classaltosui.stamp Manifest.txt $(JAVA_ICONS) $(ALTOSLIB_CLASS) $(ALTOSUILIB_CLASS) build-libaltos jar cfm $@ Manifest.txt \ $(ICONJAR) \ -C classes altosui \ @@ -315,11 +315,23 @@ libaltos.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . -libaltos32.so: build-libaltos +libaltos_i686.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . -libaltos64.so: build-libaltos +libaltos_amd64.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos_aarch64.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos_armel.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos_armhf.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . @@ -327,31 +339,16 @@ libaltos.dylib: -rm -f "$@" $(LN_S) ../libaltos/"$@" . -altos.dll: ../libaltos/altos.dll +altos.dll: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/"$@" . -altos64.dll: ../libaltos/altos64.dll +altos64.dll: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/"$@" . -../libaltos/.libs/libaltos64.so: ../libaltos/.libs/libaltos32.so - -../libaltos/.libs/libaltos32.so: build-libaltos - -../libaltos/.libs/libaltos.so: build-libaltos - -../libaltos/altos.dll: build-altos-dll - -../libaltos/altos64.dll: build-altos64-dll - build-libaltos: - +cd ../libaltos && make libaltos.la -build-altos-dll: - +cd ../libaltos && make altos.dll - -build-altos64-dll: - +cd ../libaltos && make altos64.dll + +cd ../libaltos && make $(ALTOSLIB_CLASS): -rm -f "$@" diff --git a/altosuilib/AltosUILib.java b/altosuilib/AltosUILib.java index 97a9067a..a0cf325d 100644 --- a/altosuilib/AltosUILib.java +++ b/altosuilib/AltosUILib.java @@ -89,23 +89,20 @@ public class AltosUILib extends AltosLib { static public boolean loaded_library = false; static public boolean has_bluetooth = false; - static final String[] library_names_32 = { "altos", "altos32", "altos64" }; - static final String[] library_names_64 = { "altos", "altos64", "altos32" }; + static final String[] library_names = { + "altos", + "altos32", + "altos64", + "altos_i686", + "altos_amd64", + "altos_aarch64", + "altos_armel", + "altos_armhf" + }; public static boolean load_library() { if (!initialized) { - String model = System.getProperty("sun.arch.data.model", "missing"); - boolean is_64 = false; - if (model.equals("64")) { - is_64 = true; - } else if (model.equals("32")) { - ; - } else { - String arch = System.getProperty("os.arch", "missing"); - if (arch.endsWith("64")) - is_64 = true; - } - for (String name : is_64 ? library_names_64 : library_names_32) { + for (String name : library_names) { try { System.loadLibrary(name); libaltos.altos_init(); diff --git a/libaltos/Makefile.am b/libaltos/Makefile.am index 8c57b3f9..2b9a7aa6 100644 --- a/libaltos/Makefile.am +++ b/libaltos/Makefile.am @@ -1,3 +1,4 @@ +export PATH=$(shell echo "$$PWD:$$PATH") AM_CFLAGS=-DLINUX -DPOSIX_TTY -I$(JVM_INCLUDE) -I$(JVM_INCLUDE)/linux AM_JAVACFLAGS=$(JAVAC_VERSION_FLAGS) -encoding UTF-8 -Xlint:deprecation -Xlint:unchecked @@ -33,27 +34,59 @@ btletest_SOURCES=btletest.c btletest_LDADD=-lbluetooth 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 +altoslib_LTLIBRARIES+=libaltos_i686.la libaltos_amd64.la libaltos_aarch64.la libaltos_armel.la libaltos_armhf.la + +I686=i686-linux-gnu +libaltos_i686_la_LDFLAGS=-Wl,arch=$(I686) $(libaltos_la_LDFLAGS) +libaltos_i686_la_CFLAGS=-Warch=i686-linux-gnu $(AM_CFLAGS) +libaltos_i686_la_SOURCES=$(libaltos_la_SOURCES) + +AMD64=x86_64-linux-gnu +libaltos_amd64_la_LDFLAGS=-Wl,arch=$(AMD64) $(libaltos_la_LDFLAGS) +libaltos_amd64_la_CFLAGS=-Warch=x86_64-linux-gnu $(AM_CFLAGS) +libaltos_amd64_la_SOURCES=$(libaltos_la_SOURCES) + +AARCH64=aarch64-linux-gnu +libaltos_aarch64_la_LDFLAGS=-Wl,arch=$(AARCH64) $(libaltos_la_LDFLAGS) +libaltos_aarch64_la_CFLAGS=-Warch=$(AARCH64) $(AM_CFLAGS) +libaltos_aarch64_la_SOURCES=$(libaltos_la_SOURCES) + +ARMEL=arm-linux-gnueabi +libaltos_armel_la_LDFLAGS=-Wl,arch=$(ARMEL) $(libaltos_la_LDFLAGS) +libaltos_armel_la_CFLAGS=-Warch=$(ARMEL) $(AM_CFLAGS) +libaltos_armel_la_SOURCES=$(libaltos_la_SOURCES) + +ARMHF=arm-linux-gnueabihf +libaltos_armhf_la_LDFLAGS=-Wl,arch=$(ARMHF) $(libaltos_la_LDFLAGS) +libaltos_armhf_la_CFLAGS=-Warch=$(ARMHF) $(AM_CFLAGS) +libaltos_armhf_la_SOURCES=$(libaltos_la_SOURCES) + +noinst_PROGRAMS+=cjnitest_i686 cjnitest_amd64 cjnitest_aarch64 cjnitest_armel cjnitest_armhf + +cjnitest_i686_CFLAGS=$(libaltos_i686_la_CFLAGS) +cjnitest_i686_LDFLAGS=-Wl,arch=$(I686) +cjnitest_i686_SOURCES=$(cjnitest_SOURCES) +cjnitest_i686_LDADD=libaltos_i686.la + +cjnitest_amd64_CFLAGS=$(libaltos_amd64_la_CFLAGS) +cjnitest_amd64_LDFLAGS=-Wl,arch=$(AMD64) +cjnitest_amd64_SOURCES=$(cjnitest_SOURCES) +cjnitest_amd64_LDADD=libaltos_amd64.la + +cjnitest_aarch64_CFLAGS=$(libaltos_aarch64_la_CFLAGS) +cjnitest_aarch64_LDFLAGS=-Wl,arch=$(AARCH64) +cjnitest_aarch64_SOURCES=$(cjnitest_SOURCES) +cjnitest_aarch64_LDADD=libaltos_aarch64.la + +cjnitest_armel_CFLAGS=$(libaltos_armel_la_CFLAGS) +cjnitest_armel_LDFLAGS=-Wl,arch=$(ARMEL) +cjnitest_armel_SOURCES=$(cjnitest_SOURCES) +cjnitest_armel_LDADD=libaltos_armel.la + +cjnitest_armhf_CFLAGS=$(libaltos_armhf_la_CFLAGS) +cjnitest_armhf_LDFLAGS=-Wl,arch=$(ARMHF) +cjnitest_armhf_SOURCES=$(cjnitest_SOURCES) +cjnitest_armhf_LDADD=libaltos_armhf.la endif @@ -70,6 +103,9 @@ $(SWIG_FILE): libaltos.i0 $(HFILES) all-local: classlibaltos.stamp +test: + which gcc + libaltos_wrap.c: classlibaltos.stamp classlibaltos.stamp: $(SWIG_FILE) @@ -85,12 +121,11 @@ MINGLIBS=-lsetupapi -lws2_32 fat: all altos.dll altos64.dll -#altos.dll: $(WINDOWS_SRC) $(WINDOWS_H) -# $(MINGCC32) -o $@ $(MINGFLAGS) -shared $(WINDOWS_SRC) $(MINGLIBS) +altos.dll: $(WINDOWS_SRC) $(WINDOWS_H) + $(MINGCC32) -o $@ $(MINGFLAGS) -shared $(WINDOWS_SRC) $(MINGLIBS) -#altos64.dll: $(WINDOWS_SRC) $(WINDOWS_H) -# $(MINGCC64) -o $@ $(MINGFLAGS) -shared $(WINDOWS_SRC) $(MINGLIBS) +altos64.dll: $(WINDOWS_SRC) $(WINDOWS_H) + $(MINGCC64) -o $@ $(MINGFLAGS) -shared $(WINDOWS_SRC) $(MINGLIBS) clean-local: - -rm -rf libaltosJNI *.class *.java classlibaltos.stamp $(SWIG_FILE) libaltos_wrap.c -# -rm -rf altos.dll altos64.dll + -rm -rf libaltosJNI *.class *.java classlibaltos.stamp $(SWIG_FILE) libaltos_wrap.c altos.dll altos64.dll diff --git a/libaltos/gcc b/libaltos/gcc new file mode 100755 index 00000000..da261cc1 --- /dev/null +++ b/libaltos/gcc @@ -0,0 +1,22 @@ +#!/bin/bash +NEW_PATH=`echo $PATH | sed 's/^[^:]*://'` +PATH=$NEW_PATH +CC=gcc +args=() +for i in "$@"; do + case "$i" in + -Wl,arch=*) + arch=`echo "$i" | sed -e 's/^-Wl,arch=//'` + CC="$arch"-gcc + ;; + -Warch=*) + arch=`echo "$i" | sed -e 's/^-Warch=//'` + CC="$arch"-gcc + ;; + *) + args+=( "$i" ) + ;; + esac +done +echo " " "$CC" "${args[@]}" +exec "$CC" "${args[@]}" diff --git a/micropeak/Makefile.am b/micropeak/Makefile.am index 9a0328d7..09cf9617 100644 --- a/micropeak/Makefile.am +++ b/micropeak/Makefile.am @@ -37,7 +37,7 @@ JAR=micropeak.jar FATJAR=micropeak-fat.jar if MULTI_ARCH -LIBALTOS_LINUX=libaltos32.so libaltos64.so +LIBALTOS_LINUX=libaltos_i686.so libaltos_amd64.so libaltos_aarch64.so libaltos_armel.so libaltos_armhf.so else LIBALTOS_LINUX=libaltos.so endif @@ -241,11 +241,23 @@ libaltos.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . -libaltos32.so: build-libaltos +libaltos_i686.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . -libaltos64.so: build-libaltos +libaltos_amd64.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos_aarch64.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos_armel.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos_armhf.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . @@ -273,6 +285,7 @@ altos64.dll: ../libaltos/altos64.dll build-libaltos: +cd ../libaltos && make libaltos.la + build-altos-dll: +cd ../libaltos && make altos.dll diff --git a/telegps/Makefile.am b/telegps/Makefile.am index 26e5dfb8..7ab0749c 100644 --- a/telegps/Makefile.am +++ b/telegps/Makefile.am @@ -43,7 +43,7 @@ JAR=telegps.jar FATJAR=telegps-fat.jar if MULTI_ARCH -LIBALTOS_LINUX=libaltos32.so libaltos64.so +LIBALTOS_LINUX=libaltos_i686.so libaltos_amd64.so libaltos_aarch64.so libaltos_armel.so libaltos_armhf.so else LIBALTOS_LINUX=libaltos.so endif @@ -244,11 +244,23 @@ libaltos.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . -libaltos32.so: build-libaltos +libaltos_i686.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . -libaltos64.so: build-libaltos +libaltos_amd64.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos_aarch64.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos_armel.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos_armhf.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . @@ -256,31 +268,16 @@ libaltos.dylib: -rm -f "$@" $(LN_S) ../libaltos/"$@" . -altos.dll: ../libaltos/altos.dll +altos.dll: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/"$@" . -altos64.dll: ../libaltos/altos64.dll +altos64.dll: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/"$@" . -../libaltos/.libs/libaltos64.so: ../libaltos/.libs/libaltos32.so - -../libaltos/.libs/libaltos32.so: build-libaltos - -../libaltos/.libs/libaltos.so: build-libaltos - -../libaltos/altos.dll: build-altos-dll - -../libaltos/altos64.dll: build-altos64-dll - build-libaltos: - +cd ../libaltos && make libaltos.la -build-altos-dll: - +cd ../libaltos && make altos.dll - -build-altos64-dll: - +cd ../libaltos && make altos64.dll + +cd ../libaltos && make $(ALTOSLIB_CLASS): -rm -f "$@" -- 2.30.2