diff --git a/CHANGES.md b/CHANGES.md
index b0ecdbe795..aa7e1f2572 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -7,6 +7,7 @@ Next Release (5.7.0)
Features
--------
+* [#1238](https://github.com/java-native-access/jna/pull/1238): Add macOS `aarch64` architecture to universal `darwin` target. Cherry pick [libffi/libffi#577](https://github.com/libffi/libffi/pull/577). - [@fkistner](https://github.com/fkistner), [@Vzor-](https://github.com/Vzor-), [@tresf](https://github.com/tresf).
* [#1264](https://github.com/java-native-access/jna/pull/1264): Update libffi to v3.3; Add Windows `aarch64` target. - [@tresf](https://github.com/tresf).
* [#1293](https://github.com/java-native-access/jna/issues/1293): Bind part of Windows Application Recovery and Restart API: `RegisterApplicationRestart`, `UnregisterApplicationRestart` and `GetApplicationRestartSettings` in `c.s.j.p.w.Kernel32` - [@matthiasblaesing](https://github.com/matthiasblaesing).
* [#1217](https://github.com/java-native-access/jna/pull/1217): Add mappings for AIX `Perfstat` library to `c.s.j.p.unix.aix` - [@dbwiddis](https://github.com/dbwiddis).
diff --git a/build.xml b/build.xml
index 41bf1be99f..31b9fc9d81 100644
--- a/build.xml
+++ b/build.xml
@@ -276,8 +276,7 @@
-
-
+
@@ -295,6 +294,14 @@
+
+
+
+
+
+
+
+
@@ -316,6 +323,9 @@
+
+
+
@@ -521,7 +531,7 @@ com/sun/jna/openbsd-x86-64/libjnidispatch.so;
processor=x86-64;osname=openbsd,
com/sun/jna/darwin/libjnidispatch.jnilib;
-osname=macosx;processor=x86;processor=x86-64;processor=ppc
+osname=macosx;processor=x86;processor=x86-64;processor=aarch64;processor=ppc
"/>
@@ -873,6 +883,21 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -882,27 +907,12 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -918,49 +928,43 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -989,7 +993,7 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc
-
+
@@ -1055,6 +1059,68 @@ cd ..
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1074,6 +1140,7 @@ cd ..
+
-
+
-
+
diff --git a/lib/native/darwin.jar b/lib/native/darwin.jar
index b67789b883..31e6a36e55 100644
Binary files a/lib/native/darwin.jar and b/lib/native/darwin.jar differ
diff --git a/native/Makefile b/native/Makefile
index 48dbd6d594..05e5d26c1f 100644
--- a/native/Makefile
+++ b/native/Makefile
@@ -11,7 +11,7 @@
#
# Windows (x86/amd64/aarch64)
# Windows CE/Mobile (arm)
-# Darwin/OS X (i386/x86_64/ppc)
+# Darwin/OS X (i386/x86-64/ppc/aarch64)
# Linux (i386/amd64/ppc/arm)
# Solaris (i386/amd64/sparc/sparcv9)
# AIX (ppc/ppc64)
@@ -392,47 +392,61 @@ endif
ifeq ($(OS),darwin)
-XCODE_VERSION=$(shell xcodebuild -version | grep Xcode | sed 's/^Xcode \([1-9]\).*/\1/g')
-JAVA_INCLUDES+=-I/System/Library/Frameworks/JavaVM.framework/Headers
-DEFAULT_ARCH=$(shell arch)
-ARCH=$(shell arch)
-HOST_CONFIG=--host $(ARCH)-apple-darwin
-FFI_ENV += CC="$(CC)" CFLAGS="-arch $(ARCH) $(ISYSROOT) $(COPT) $(CDEBUG)" CPPFLAGS="$(CDEFINES)" LD="$(LD) -arch $(ARCH)"
-ALT_ARCHS=
-ifneq ($(ARCH),i386)
-ALT_ARCHS+=i386
+
+DARWIN_ARCH=$(ARCH)
+ifeq ($(ARCH),aarch64)
+ DARWIN_ARCH=arm64
+else
+ifeq ($(ARCH),x86-64)
+ DARWIN_ARCH=x86_64
+else
+ifeq ($(ARCH),x86)
+ DARWIN_ARCH=x86
+else
endif
-ifneq ($(ARCH),x86_64)
-ALT_ARCHS+=x86_64
endif
+endif
+
+XCODE_VERSION=$(shell xcodebuild -version | grep Xcode | sed 's/^Xcode \([1-9][0-9]*\).*/\1/g')
+MACOS_VERSION_MAJOR=$(shell sw_vers -productVersion | cut -d. -f 1)
+MACOS_VERSION_MINOR=$(shell sw_vers -productVersion | cut -d. -f 2)
+JAVA_INCLUDES+=-I/System/Library/Frameworks/JavaVM.framework/Headers
+# Actual deployment target depends on SDK support
+MACOSX_DEPLOYMENT_TARGET=10.3
+DEFAULT_ARCH=$(shell arch)
+HOST_CONFIG=--host $(DARWIN_ARCH)-apple-darwin
+FFI_ENV += CC="$(CC)" CFLAGS="-mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) -arch $(DARWIN_ARCH) $(ISYSROOT) $(COPT) $(CDEBUG)" CPPFLAGS="$(CDEFINES)" LD="$(LD) -arch $(DARWIN_ARCH)"
+LIBSFX=.dylib
+JNISFX=-$(ARCH).jnilib
+# JAWT no longer supported on OSX
+CDEFINES+=-DTARGET_RT_MAC_CFM=0 -DFFI_MMAP_EXEC_WRIT -DNO_JAWT
+
ifneq ($(ARCH),ppc)
-ifeq ($(XCODE_VERSION),3)
-# Xcode 3 options
-# not supported on XCode 4+
-ALT_ARCHS+=ppc
-else
+ifneq ($(XCODE_VERSION),3)
# Xcode 4+ options
NO_COMPACT_UNWIND=-Wl,-no_compact_unwind
endif
endif
-LIBSFX=.dylib
-JNISFX=.jnilib
ifneq ($(SDKROOT),)
SYSLIBROOT=-Wl,-syslibroot,$(SDKROOT)
ISYSROOT=-isysroot $(SDKROOT)
-ARCHFLAGS=-arch i386 -arch x86_64
-ifeq ($(XCODE_VERSION),3)
-ARCHFLAGS+=-arch ppc
-endif
+ARCHFLAGS+=-arch $(DARWIN_ARCH)
endif
PCFLAGS+=$(ISYSROOT) -x objective-c
-# JAWT no longer supported on OSX
-CDEFINES+=-DTARGET_RT_MAC_CFM=0 -DFFI_MMAP_EXEC_WRIT -DNO_JAWT
-LDFLAGS=$(ARCHFLAGS) -dynamiclib -o $@ -framework JavaVM \
+
+# MAJOR < 10 || (MAJOR = 10 && MINOR < 7)
+MACOS_LT_10_7 = $(shell [ ${MACOS_VERSION_MAJOR} -lt 10 -o ${MACOS_VERSION_MAJOR} -eq 10 -a ${MACOS_VERSION_MINOR} -lt 7 ] && echo true)
+
+# JavaVM.framwork is "Deprecated in OS X v10.7."
+ifeq ($(MACOS_LT_10_7),true)
+FRAMEWORK=-framework JavaVM
+endif
+
+LDFLAGS=$(ARCHFLAGS) -dynamiclib -o $@ $(FRAMEWORK) \
-compatibility_version $(shell echo ${JNA_JNI_VERSION}|sed 's/^\([0-9][0-9]*\).*/\1/g') \
-current_version $(JNA_JNI_VERSION) \
- -mmacosx-version-min=10.3 \
+ -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) \
-framework Foundation \
$(NO_COMPACT_UNWIND) \
-install_name ${@F} \
@@ -447,11 +461,7 @@ endif
$(BUILD)/%.o : %.c dispatch.h protect.h $(FFI_LIB)
@mkdir -p $(BUILD)
ifneq ($(SDKROOT),)
- $(CC) $(LOC_CC_OPTS) -arch $(ARCH) $(CFLAGS) -c $< -o $@.$(ARCH)
- for arch in $(ALT_ARCHS); do \
- $(CC) $(LOC_CC_OPTS) -arch $$arch -I$(BUILD)/libffi.$$arch/include $(CFLAGS) -c $< -o $@.$$arch; \
- done
- lipo -create -output $@ $@.*
+ $(CC) $(LOC_CC_OPTS) -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) -arch $(DARWIN_ARCH) $(CFLAGS) -c $< -o $@
else
$(CC) $(CFLAGS) $(LOC_CC_OPTS) -c $< $(COUT)
endif
@@ -507,25 +517,6 @@ $(FFI_LIB):
&& $(FFI_ENV) $(FFI_SRC)/configure $(FFI_CONFIG) $(HOST_CONFIG)); \
fi
$(MAKE) -C $(FFI_BUILD)
-ifneq ($(SDKROOT),)
- @for arch in $(ALT_ARCHS); do \
- mkdir -p $(BUILD)/libffi.$$arch; \
- if [ ! -f $(BUILD)/libffi.$$arch/Makefile ]; then \
- echo "Configuring libffi ($$arch)"; \
- (cd $(BUILD)/libffi.$$arch \
- && CC="$(CC)" CFLAGS="-arch $$arch $(ISYSROOT) $(COPT) $(CDEBUG)" CPPFLAGS="$(CDEFINES)" \
- LDFLAGS="-arch $$arch" \
- $(FFI_SRC)/configure $(FFI_CONFIG) --host=$$arch-apple-darwin --disable-dependency-tracking); \
- fi; \
- $(MAKE) -C $(BUILD)/libffi.$$arch; \
- done
-ifneq ($(ALT_ARCHS),)
- /usr/bin/libtool -static -o $@.tmp $(FFI_BUILD)/.libs/${@F} $(BUILD)/libffi.*/.libs/${@F}
-else
- /usr/bin/libtool -static -o $@.tmp $(FFI_BUILD)/.libs/${@F}
-endif
- mv $@.tmp $@
-endif
endif
clean:
diff --git a/native/build.xml b/native/build.xml
index 1d17b6d84e..27250a9d8e 100644
--- a/native/build.xml
+++ b/native/build.xml
@@ -15,8 +15,7 @@
-
-
+
@@ -38,6 +37,9 @@
message="OS/arch not supported (${os.name}/${jre.arch}), edit build.xml and native/Makefile to add it."/>
+
+
+
@@ -238,11 +240,17 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -250,12 +258,6 @@
-
-
-
-
-
-
@@ -279,44 +281,42 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
+
+
-
getFieldOrder() {
}
public int addVarArgs(String fmt, Number... args);
public String returnStringVarArgs(String fmt, Object... args);
- public void modifyStructureVarArgs(String fmt, Object arg1, Object... args);
- public String returnStringVarArgs2(String... args);
+ public void modifyStructureVarArgs(String fmt, Object... args);
+ public String returnStringVarArgs2(String fmt, String... args);
}
TestLibrary lib;
@Override
diff --git a/www/MacDevelopmentEnvironment.md b/www/MacDevelopmentEnvironment.md
index 715ba61207..4ca8d37996 100644
--- a/www/MacDevelopmentEnvironment.md
+++ b/www/MacDevelopmentEnvironment.md
@@ -1,6 +1,54 @@
Mac Development Environment
===========================
+### Prequisites
+* [Xcode](https://developer.apple.com/download/) with Command Line tools
+* The following tools: `ant autoconf automake libtool gettext`
+ * These are available via [Homebrew](https://brew.sh)
+ ```bash
+ brew install ant autoconf automake libtool gettext
+ ```
+
+ * ... or alternately via [MacPorts](https://www.macports.org/)
+
+### Compiling
+
+1. To compile and run unit tests for the current archecture:
+ ```bash
+ ant
+ ```
+
+2. To compile native components only and skip unit tests:
+ ```bash
+ ant native
+ ```
+
+3. To provide an alternate (older) macOS SDK:
+ ```bash
+ ant -DSDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk
+ ```
+
+4. To cross-compile for an alternate architecture:
+ ```bash
+ # ARM64 (>= 11.0)
+ ant -Dos.prefix=darwin-aarch64
+
+ # x86 (<= 10.13)
+ ant -Dos.prefix=darwin-x86
+
+ # x86_64
+ ant -Dos.prefix=darwin-x86-64
+
+ # PPC (<= 10.5)
+ ant -Dos.prefix=darwin-ppc
+
+ # PPC64
+ ant -Dos.prefix=darwin-ppc64
+ ```
+
+### Troubleshooting
+
+
* Xcode - If you only have the Xcode command line tools installed, and not the full Xcode UI, you may see build errors like this:
native: