Merge pull request #343 from nuntipat/apple-silicon

Add native support for Apple Silicon
This commit is contained in:
Will Hedgecock 2021-04-14 11:17:08 -05:00 committed by GitHub
commit 3896f2d414
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 2 deletions

View File

@ -6,6 +6,7 @@ COMPILE_ARM64 := aarch64-unknown-linux-gnueabi-gcc
COMPILE_SOLARIS_X86 := x86_64-sun-solaris2.10-gcc COMPILE_SOLARIS_X86 := x86_64-sun-solaris2.10-gcc
COMPILE_SOLARIS_SPARC := sparc-sun-solaris2.10-gcc COMPILE_SOLARIS_SPARC := sparc-sun-solaris2.10-gcc
COMPILE_APPLE := /usr/local/bin/gcc-9 COMPILE_APPLE := /usr/local/bin/gcc-9
COMPILE_APPLE_AARCH64 := /usr/bin/gcc
LINK := gcc LINK := gcc
LINK_ARM32 := arm32-unknown-linux-gnueabi-gcc LINK_ARM32 := arm32-unknown-linux-gnueabi-gcc
LINK_ARM32HF := arm32hf-unknown-linux-gnueabi-gcc LINK_ARM32HF := arm32hf-unknown-linux-gnueabi-gcc
@ -13,16 +14,20 @@ LINK_ARM64 := aarch64-unknown-linux-gnueabi-gcc
LINK_SOLARIS_X86 := x86_64-sun-solaris2.10-gcc LINK_SOLARIS_X86 := x86_64-sun-solaris2.10-gcc
LINK_SOLARIS_SPARC := sparc-sun-solaris2.10-gcc LINK_SOLARIS_SPARC := sparc-sun-solaris2.10-gcc
LINK_APPLE := /usr/local/bin/gcc-9 LINK_APPLE := /usr/local/bin/gcc-9
LINK_APPLE_AARCH64 := /usr/bin/gcc
CFLAGS := -fPIC -Os -flto -static-libgcc -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 CFLAGS := -fPIC -Os -flto -static-libgcc -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
CFLAGS_POSIX := -fuse-linker-plugin CFLAGS_POSIX := -fuse-linker-plugin
CFLAGS_APPLE := CFLAGS_APPLE :=
CFLAGS_APPLE_AARCH64 := -fPIC -Os -flto -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
LDFLAGS := -Os -flto -static-libgcc LDFLAGS := -Os -flto -static-libgcc
LDFLAGS_POSIX := -shared -fuse-linker-plugin -s LDFLAGS_POSIX := -shared -fuse-linker-plugin -s
LDFLAGS_APPLE := -dynamiclib LDFLAGS_APPLE := -dynamiclib
LDFLAGS_APPLE_AARCH64 := -Os -flto -dynamiclib
JDK_HOME := $(shell if [ "`uname`" = "Darwin" ]; then echo "`/usr/libexec/java_home`"; else echo "$$JDK_HOME"; fi) JDK_HOME := $(shell if [ "`uname`" = "Darwin" ]; then echo "`/usr/libexec/java_home`"; else echo "$$JDK_HOME"; fi)
INCLUDES := -I"$(JDK_HOME)/include" -I"$(JDK_HOME)/include/linux" -I"$(JDK_HOME)/include/darwin" -I"$(JDK_HOME)/include/solaris" INCLUDES := -I"$(JDK_HOME)/include" -I"$(JDK_HOME)/include/linux" -I"$(JDK_HOME)/include/darwin" -I"$(JDK_HOME)/include/solaris"
LIBRARIES_POSIX := LIBRARIES_POSIX :=
LIBRARIES_APPLE := -framework Cocoa -framework IOKit -framework JavaVM LIBRARIES_APPLE := -framework Cocoa -framework IOKit -framework JavaVM
LIBRARIES_APPLE_AARCH64 := -framework Cocoa -framework IOKit
DELETE := @rm DELETE := @rm
MKDIR := @mkdir MKDIR := @mkdir
COPY := @cp COPY := @cp
@ -53,6 +58,7 @@ OBJECTSsolaris64 := $(BUILD_DIR)/solaris_x86_64/SerialPort_Posix.o $(BUILD_DIR
OBJECTSsolarisSparc32 := $(BUILD_DIR)/solaris_sparc32/SerialPort_Posix.o $(BUILD_DIR)/solaris_sparc32/PosixHelperFunctions.o OBJECTSsolarisSparc32 := $(BUILD_DIR)/solaris_sparc32/SerialPort_Posix.o $(BUILD_DIR)/solaris_sparc32/PosixHelperFunctions.o
OBJECTSsolarisSparc64 := $(BUILD_DIR)/solaris_sparc64/SerialPort_Posix.o $(BUILD_DIR)/solaris_sparc64/PosixHelperFunctions.o OBJECTSsolarisSparc64 := $(BUILD_DIR)/solaris_sparc64/SerialPort_Posix.o $(BUILD_DIR)/solaris_sparc64/PosixHelperFunctions.o
OBJECTSosx64 := $(BUILD_DIR)/osx_x86_64/SerialPort_Posix.o $(BUILD_DIR)/osx_x86_64/PosixHelperFunctions.o OBJECTSosx64 := $(BUILD_DIR)/osx_x86_64/SerialPort_Posix.o $(BUILD_DIR)/osx_x86_64/PosixHelperFunctions.o
OBJECTSosxaarch64 := $(BUILD_DIR)/osx_aarch64/SerialPort_Posix.o $(BUILD_DIR)/osx_aarch64/PosixHelperFunctions.o
CPATH_APPLE := /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include CPATH_APPLE := /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
FLAGSlinux32 := -m32 FLAGSlinux32 := -m32
FLAGSlinux64 := -m64 FLAGSlinux64 := -m64
@ -68,6 +74,7 @@ FLAGSsolaris64 := -m64
FLAGSsolarisSparc32 := -mno-app-regs -mcpu=v8 -mv8plus -m32 FLAGSsolarisSparc32 := -mno-app-regs -mcpu=v8 -mv8plus -m32
FLAGSsolarisSparc64 := -mno-app-regs -mcpu=v9 -m64 FLAGSsolarisSparc64 := -mno-app-regs -mcpu=v9 -m64
FLAGSosx64 := -m64 FLAGSosx64 := -m64
FLAGSosxaarch64 :=
JNI_HEADER := ../com_fazecast_jSerialComm_SerialPort.h JNI_HEADER := ../com_fazecast_jSerialComm_SerialPort.h
JAVA_CLASS := $(JAVA_CLASS_DIR)/SerialPort.class JAVA_CLASS := $(JAVA_CLASS_DIR)/SerialPort.class
@ -103,6 +110,11 @@ osx : osx64
$(DELETE) -rf "$(BUILD_DIR)" $(DELETE) -rf "$(BUILD_DIR)"
$(DELETE) -rf ../*.h $(DELETE) -rf ../*.h
# Build all OSX (Apple Silicon) libraries
osx_aarch64 : osxaarch64
$(DELETE) -rf "$(BUILD_DIR)"
$(DELETE) -rf ../*.h
# Build architecture-specific Linux libraries # Build architecture-specific Linux libraries
linux32 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/linux_x86 $(BUILD_DIR)/linux_x86/$(LIBRARY_NAME_POSIX) linux32 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/linux_x86 $(BUILD_DIR)/linux_x86/$(LIBRARY_NAME_POSIX)
$(DELETE) -rf $(BUILD_DIR)/linux_x86/*.o $(DELETE) -rf $(BUILD_DIR)/linux_x86/*.o
@ -152,7 +164,11 @@ solarisSparc64 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/solaris_sparc64 $(BUILD_DIR)/sol
osx64 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/osx_x86_64 $(BUILD_DIR)/osx_x86_64/$(LIBRARY_NAME_APPLE) osx64 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/osx_x86_64 $(BUILD_DIR)/osx_x86_64/$(LIBRARY_NAME_APPLE)
$(DELETE) -rf $(BUILD_DIR)/osx_x86_64/*.o $(DELETE) -rf $(BUILD_DIR)/osx_x86_64/*.o
$(COPY) $(BUILD_DIR)/osx_x86_64/*.* $(RESOURCE_DIR_OSX)/x86_64 $(COPY) $(BUILD_DIR)/osx_x86_64/*.* $(RESOURCE_DIR_OSX)/x86_64
osxaarch64 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/osx_aarch64 $(BUILD_DIR)/osx_aarch64/$(LIBRARY_NAME_APPLE)
$(DELETE) -rf $(BUILD_DIR)/osx_aarch64/*.o
$(COPY) $(BUILD_DIR)/osx_aarch64/*.* $(RESOURCE_DIR_OSX)/aarch64
# Rule to create build directories # Rule to create build directories
$(BUILD_DIR)/linux_x86 : $(BUILD_DIR)/linux_x86 :
$(MKDIR) -p $@ $(MKDIR) -p $@
@ -182,6 +198,8 @@ $(BUILD_DIR)/solaris_sparc64 :
$(MKDIR) -p $@ $(MKDIR) -p $@
$(BUILD_DIR)/osx_x86_64 : $(BUILD_DIR)/osx_x86_64 :
$(MKDIR) -p $@ $(MKDIR) -p $@
$(BUILD_DIR)/osx_aarch64 :
$(MKDIR) -p $@
$(JAVA_CLASS_DIR) : $(JAVA_CLASS_DIR) :
$(MKDIR) -p $@ $(MKDIR) -p $@
@ -214,6 +232,8 @@ $(BUILD_DIR)/solaris_sparc64/$(LIBRARY_NAME_POSIX) : $(JNI_HEADER) $(OBJECTSsola
$(LINK_SOLARIS_SPARC) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSsolarisSparc64) -o $@ $(OBJECTSsolarisSparc64) $(LIBRARIES_POSIX) $(LINK_SOLARIS_SPARC) $(LDFLAGS) $(LDFLAGS_POSIX) $(FLAGSsolarisSparc64) -o $@ $(OBJECTSsolarisSparc64) $(LIBRARIES_POSIX)
$(BUILD_DIR)/osx_x86_64/$(LIBRARY_NAME_APPLE) : $(JNI_HEADER) $(OBJECTSosx64) $(BUILD_DIR)/osx_x86_64/$(LIBRARY_NAME_APPLE) : $(JNI_HEADER) $(OBJECTSosx64)
$(LINK_APPLE) $(LDFLAGS) $(LDFLAGS_APPLE) $(FLAGSosx64) -o $@ $(OBJECTSosx64) $(LIBRARIES_APPLE) $(LINK_APPLE) $(LDFLAGS) $(LDFLAGS_APPLE) $(FLAGSosx64) -o $@ $(OBJECTSosx64) $(LIBRARIES_APPLE)
$(BUILD_DIR)/osx_aarch64/$(LIBRARY_NAME_APPLE) : $(JNI_HEADER) $(OBJECTSosxaarch64)
$(LINK_APPLE_AARCH64) $(LDFLAGS_APPLE_AARCH64) $(FLAGSosxaarch64) -o $@ $(OBJECTSosxaarch64) $(LIBRARIES_APPLE_AARCH64)
# Suffix rules to get from *.c -> *.o # Suffix rules to get from *.c -> *.o
$(BUILD_DIR)/linux_x86/%.o : %.c $(BUILD_DIR)/linux_x86/%.o : %.c
@ -244,6 +264,8 @@ $(BUILD_DIR)/solaris_sparc64/%.o : %.c
$(COMPILE_SOLARIS_SPARC) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSsolarisSparc64) -c $< -o $@ $(COMPILE_SOLARIS_SPARC) $(INCLUDES) $(CFLAGS) $(CFLAGS_POSIX) $(FLAGSsolarisSparc64) -c $< -o $@
$(BUILD_DIR)/osx_x86_64/%.o : %.c $(BUILD_DIR)/osx_x86_64/%.o : %.c
CPATH=$(CPATH_APPLE) $(COMPILE_APPLE) $(INCLUDES) $(CFLAGS) $(CFLAGS_APPLE) $(FLAGSosx64) -c $< -o $@ CPATH=$(CPATH_APPLE) $(COMPILE_APPLE) $(INCLUDES) $(CFLAGS) $(CFLAGS_APPLE) $(FLAGSosx64) -c $< -o $@
$(BUILD_DIR)/osx_aarch64/%.o : %.c
CPATH=$(CPATH_APPLE) $(COMPILE_APPLE_AARCH64) $(INCLUDES) $(CFLAGS_APPLE_AARCH64) $(FLAGSosxaarch64) -c $< -o $@
# Rule to build JNI header file # Rule to build JNI header file
$(JNI_HEADER) : $(JAVA_CLASS) $(JNI_HEADER) : $(JAVA_CLASS)

View File

@ -105,7 +105,9 @@ public final class SerialPort
} }
else if (OS.indexOf("mac") >= 0) else if (OS.indexOf("mac") >= 0)
{ {
if (System.getProperty("os.arch").indexOf("64") >= 0) if (System.getProperty("os.arch").equals("aarch64"))
libraryPath = "OSX/aarch64";
else if (System.getProperty("os.arch").indexOf("64") >= 0)
libraryPath = "OSX/x86_64"; libraryPath = "OSX/x86_64";
else else
libraryPath = "OSX/x86"; libraryPath = "OSX/x86";

Binary file not shown.