diff --git a/src/main/c/Posix/Makefile b/src/main/c/Posix/Makefile index d8040d67..e6ce1b50 100644 --- a/src/main/c/Posix/Makefile +++ b/src/main/c/Posix/Makefile @@ -6,6 +6,7 @@ COMPILE_ARM64 := aarch64-unknown-linux-gnueabi-gcc COMPILE_SOLARIS_X86 := x86_64-sun-solaris2.10-gcc COMPILE_SOLARIS_SPARC := sparc-sun-solaris2.10-gcc COMPILE_APPLE := /usr/local/bin/gcc-9 +COMPILE_APPLE_AARCH64 := /usr/bin/gcc LINK := gcc LINK_ARM32 := arm32-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_SPARC := sparc-sun-solaris2.10-gcc 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_POSIX := -fuse-linker-plugin CFLAGS_APPLE := +CFLAGS_APPLE_AARCH64 := -fPIC -Os -flto -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 LDFLAGS := -Os -flto -static-libgcc LDFLAGS_POSIX := -shared -fuse-linker-plugin -s 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) INCLUDES := -I"$(JDK_HOME)/include" -I"$(JDK_HOME)/include/linux" -I"$(JDK_HOME)/include/darwin" -I"$(JDK_HOME)/include/solaris" LIBRARIES_POSIX := LIBRARIES_APPLE := -framework Cocoa -framework IOKit -framework JavaVM +LIBRARIES_APPLE_AARCH64 := -framework Cocoa -framework IOKit DELETE := @rm MKDIR := @mkdir 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 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 +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 FLAGSlinux32 := -m32 FLAGSlinux64 := -m64 @@ -68,6 +74,7 @@ FLAGSsolaris64 := -m64 FLAGSsolarisSparc32 := -mno-app-regs -mcpu=v8 -mv8plus -m32 FLAGSsolarisSparc64 := -mno-app-regs -mcpu=v9 -m64 FLAGSosx64 := -m64 +FLAGSosxaarch64 := JNI_HEADER := ../com_fazecast_jSerialComm_SerialPort.h JAVA_CLASS := $(JAVA_CLASS_DIR)/SerialPort.class @@ -103,6 +110,11 @@ osx : osx64 $(DELETE) -rf "$(BUILD_DIR)" $(DELETE) -rf ../*.h +# Build all OSX (Apple Silicon) libraries +osx_aarch64 : osxaarch64 + $(DELETE) -rf "$(BUILD_DIR)" + $(DELETE) -rf ../*.h + # Build architecture-specific Linux libraries linux32 : $(JAVA_CLASS_DIR) $(BUILD_DIR)/linux_x86 $(BUILD_DIR)/linux_x86/$(LIBRARY_NAME_POSIX) $(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) $(DELETE) -rf $(BUILD_DIR)/osx_x86_64/*.o $(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 $(BUILD_DIR)/linux_x86 : $(MKDIR) -p $@ @@ -182,6 +198,8 @@ $(BUILD_DIR)/solaris_sparc64 : $(MKDIR) -p $@ $(BUILD_DIR)/osx_x86_64 : $(MKDIR) -p $@ +$(BUILD_DIR)/osx_aarch64 : + $(MKDIR) -p $@ $(JAVA_CLASS_DIR) : $(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) $(BUILD_DIR)/osx_x86_64/$(LIBRARY_NAME_APPLE) : $(JNI_HEADER) $(OBJECTSosx64) $(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 $(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 $@ $(BUILD_DIR)/osx_x86_64/%.o : %.c 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 $(JNI_HEADER) : $(JAVA_CLASS) diff --git a/src/main/java/com/fazecast/jSerialComm/SerialPort.java b/src/main/java/com/fazecast/jSerialComm/SerialPort.java index 4f9983a1..412c2766 100644 --- a/src/main/java/com/fazecast/jSerialComm/SerialPort.java +++ b/src/main/java/com/fazecast/jSerialComm/SerialPort.java @@ -105,7 +105,9 @@ else if (OS.indexOf("win") >= 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"; else libraryPath = "OSX/x86"; diff --git a/src/main/resources/OSX/aarch64/libjSerialComm.jnilib b/src/main/resources/OSX/aarch64/libjSerialComm.jnilib new file mode 100755 index 00000000..b20718ef Binary files /dev/null and b/src/main/resources/OSX/aarch64/libjSerialComm.jnilib differ