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: