diff --git a/.github/workflows/compile_openjdk.yml b/.github/workflows/compile_openjdk.yml new file mode 100644 index 0000000000000000000000000000000000000000..8a2f7819af4f794efd19a749ffa7864adb768adb --- /dev/null +++ b/.github/workflows/compile_openjdk.yml @@ -0,0 +1,34 @@ +name: Compile OpenJDK with jdk-macos-legacy patches + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + build: + name: Build OpenJDK versions + runs-on: macos-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Clone OpenJDK + run: | + git clone https://github.com/openjdk/jdk17u.git --depth 1 --branch jdk-17.0.12+2 + cd jdk17u + + - name: Apply patches + run: | + git apply ../jdk-macos-legacy/patches/17/10.8.patch + git apply ../jdk-macos-legacy/patches/17/awtwindow.patch + git apply ../jdk-macos-legacy/patches/17/remove_disconnectx.patch + git apply ../jdk-macos-legacy/patches/17/remove_metal_backend.patch + + - name: Run patch scripts + run: | + bash ../jdk-macos-legacy/patches/17/remove_metal_backend.sh . diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..496ee2ca6a2f08396a4076fe43dedf3dc0da8b6d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file diff --git a/README.md b/README.md index 3ebd6cd4e6204ce9206790be98efeac5a7b92dcc..b67ee8c65938d741d900248d9ecafdcd3ec1a732 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Builds of the OpenJDK are compiled from release tags on a regular basis. These b 2. Apply the patch files (located in the patches/`version number` folders) to the OpenJDK source code for the version you want to build 3. Run any shell scripts in the patches/`version number` folder. All scripts have the following syntax: ```shell -./script.sh /path/to/openjdk/source +./script.sh /path/to/openjdk/source/folder ``` 4. Follow the build instructions for OpenJDK diff --git a/patches/17/10.8.patch b/patches/17/10.8.patch new file mode 100644 index 0000000000000000000000000000000000000000..d117688776a68222a197549c753acd755af21ea3 --- /dev/null +++ b/patches/17/10.8.patch @@ -0,0 +1,26 @@ +diff --git a/make/autoconf/flags.m4 b/make/autoconf/flags.m4 +index 1dbcbe05ed6..9ee8990b118 100644 +--- a/make/autoconf/flags.m4 ++++ b/make/autoconf/flags.m4 +@@ -136,7 +136,7 @@ AC_DEFUN([FLAGS_SETUP_MACOSX_VERSION], + if test "x$OPENJDK_TARGET_CPU_ARCH" = xaarch64; then + MACOSX_VERSION_MIN=11.00.00 + else +- MACOSX_VERSION_MIN=10.12.0 ++ MACOSX_VERSION_MIN=10.8.0 + fi + MACOSX_VERSION_MIN_NODOTS=${MACOSX_VERSION_MIN//\./} + +diff --git a/make/conf/jib-profiles.js b/make/conf/jib-profiles.js +index 4ee43abe774..a1492ea80f9 100644 +--- a/make/conf/jib-profiles.js ++++ b/make/conf/jib-profiles.js +@@ -446,7 +446,7 @@ var getJibProfilesProfiles = function (input, common, data) { + target_cpu: "x64", + dependencies: ["devkit", "gtest", "pandoc"], + configure_args: concat(common.configure_args_64bit, "--with-zlib=system", +- "--with-macosx-version-max=10.12.00", ++ "--with-macosx-version-max=10.8.00", + "--enable-compatible-cds-alignment", + // Use system SetFile instead of the one in the devkit as the + // devkit one may not work on Catalina. diff --git a/patches/17/awtwindow.patch b/patches/17/awtwindow.patch new file mode 100644 index 0000000000000000000000000000000000000000..ca43a62510ebf0e5e611c8a1f2cc173c41786d30 --- /dev/null +++ b/patches/17/awtwindow.patch @@ -0,0 +1,21 @@ +diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m +index 150e82c6965..965760b3646 100644 +--- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m ++++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m +@@ -1104,10 +1104,12 @@ + (AWTWindow *) lastKeyWindow { + { + JNI_COCOA_ENTER(env); + [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ +- if (allowAutomaticTabbing) { +- [NSWindow setAllowsAutomaticWindowTabbing:YES]; +- } else { +- [NSWindow setAllowsAutomaticWindowTabbing:NO]; ++ if ([NSWindow respondsToSelector:@selector(setAllowsAutomaticWindowTabbing:)]) { ++ if (allowAutomaticTabbing) { ++ [NSWindow setAllowsAutomaticWindowTabbing:YES]; ++ } else { ++ [NSWindow setAllowsAutomaticWindowTabbing:NO]; ++ } + } + }]; + JNI_COCOA_EXIT(env); diff --git a/patches/17/remove_disconnectx.patch b/patches/17/remove_disconnectx.patch new file mode 100644 index 0000000000000000000000000000000000000000..2ea950e70d8d84b6229fc7d9f4eeba1f025d3992 --- /dev/null +++ b/patches/17/remove_disconnectx.patch @@ -0,0 +1,42 @@ +diff --git a/src/java.base/unix/native/libnio/ch/DatagramChannelImpl.c b/src/java.base/unix/native/libnio/ch/DatagramChannelImpl.c +index 902a816419d..553126950fa 100644 +--- a/src/java.base/unix/native/libnio/ch/DatagramChannelImpl.c ++++ b/src/java.base/unix/native/libnio/ch/DatagramChannelImpl.c +@@ -50,28 +50,21 @@ Java_sun_nio_ch_DatagramChannelImpl_disconnect0(JNIEnv *env, jclass clazz, + jint fd = fdval(env, fdo); + int rv; + +-#if defined(__APPLE__) +- // On macOS systems we use disconnectx +- rv = disconnectx(fd, SAE_ASSOCID_ANY, SAE_CONNID_ANY); +-#else ++ + SOCKETADDRESS sa; +- memset(&sa, 0, sizeof(sa)); +- #if defined(_ALLBSD_SOURCE) +- sa.sa.sa_family = isIPv6 ? AF_INET6 : AF_INET; +- #else +- sa.sa.sa_family = AF_UNSPEC; +- #endif + socklen_t len = isIPv6 ? sizeof(struct sockaddr_in6) : + sizeof(struct sockaddr_in); ++ ++ memset(&sa, 0, sizeof(sa)); ++#if defined(_ALLBSD_SOURCE) ++ sa.sa.sa_family = isIPv6 ? AF_INET6 : AF_INET; ++#else ++ sa.sa.sa_family = AF_UNSPEC; ++#endif + rv = connect(fd, &sa.sa, len); + #endif + +-#if defined(_ALLBSD_SOURCE) && !defined(__APPLE__) +- // On _ALLBSD_SOURCE except __APPLE__ we consider EADDRNOTAVAIL +- // error to be OK and ignore it. __APPLE__ systems are excluded +- // in this check since for __APPLE__ systems, unlike other BSD systems, +- // we issue a "disconnectx" call (a few lines above), +- // which isn't expected to return this error code. ++#if defined(_ALLBSD_SOURCE) + if (rv < 0 && errno == EADDRNOTAVAIL) + rv = errno = 0; + #elif defined(_AIX) diff --git a/patches/17/remove_metal_backend.patch b/patches/17/remove_metal_backend.patch new file mode 100644 index 0000000000000000000000000000000000000000..d5560e2ba52655144e928bd7dbef204cccbe26f7 --- /dev/null +++ b/patches/17/remove_metal_backend.patch @@ -0,0 +1,129 @@ +diff --git a/make/modules/java.desktop/lib/Awt2dLibraries.gmk b/make/modules/java.desktop/lib/Awt2dLibraries.gmk +index 3bbff03638b..1acf6528992 100644 +--- a/make/modules/java.desktop/lib/Awt2dLibraries.gmk ++++ b/make/modules/java.desktop/lib/Awt2dLibraries.gmk +@@ -161,7 +161,6 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \ + LIBS_macosx := -lmlib_image \ + -framework Cocoa \ + -framework OpenGL \ +- -framework Metal \ + -framework JavaRuntimeSupport \ + -framework ApplicationServices \ + -framework AudioToolbox, \ +@@ -736,8 +735,7 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false) + -framework ApplicationServices \ + -framework Foundation \ + -framework Security \ +- -framework Cocoa \ +- -framework Metal ++ -framework Cocoa + else ifeq ($(call isTargetOs, windows), true) + LIBSPLASHSCREEN_LIBS += kernel32.lib user32.lib gdi32.lib delayimp.lib $(WIN_JAVA_LIB) jvm.lib + else +@@ -798,7 +796,6 @@ ifeq ($(call isTargetOs, macosx), true) + libawt_lwawt/awt \ + libawt_lwawt/font \ + libawt_lwawt/java2d/opengl \ +- libawt_lwawt/java2d/metal \ + include \ + common/awt/debug \ + common/java2d/opengl \ +@@ -834,7 +831,6 @@ ifeq ($(call isTargetOs, macosx), true) + -framework AudioToolbox \ + -framework Carbon \ + -framework Cocoa \ +- -framework Metal \ + -framework Security \ + -framework ExceptionHandling \ + -framework JavaRuntimeSupport \ +@@ -870,31 +866,6 @@ else + endif + + ifeq ($(call isTargetOs, macosx), true) +- SHADERS_SRC := $(TOPDIR)/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/shaders.metal +- SHADERS_SUPPORT_DIR := $(SUPPORT_OUTPUTDIR)/native/java.desktop/libosxui +- SHADERS_AIR := $(SHADERS_SUPPORT_DIR)/shaders.air +- SHADERS_LIB := $(INSTALL_LIBRARIES_HERE)/shaders.metallib +- +- $(eval $(call SetupExecute, metal_shaders, \ +- INFO := Running metal on $(notdir $(SHADERS_SRC)) (for libosxui.dylib), \ +- DEPS := $(SHADERS_SRC), \ +- OUTPUT_FILE := $(SHADERS_AIR), \ +- SUPPORT_DIR := $(SHADERS_SUPPORT_DIR), \ +- COMMAND := $(METAL) -c -std=osx-metal2.0 \ +- -mmacosx-version-min=$(MACOSX_METAL_VERSION_MIN) \ +- -o $(SHADERS_AIR) $(SHADERS_SRC), \ +- )) +- +- $(eval $(call SetupExecute, metallib_shaders, \ +- INFO := Running metallib on $(notdir $(SHADERS_AIR)) (for libosxui.dylib), \ +- DEPS := $(SHADERS_AIR), \ +- OUTPUT_FILE := $(SHADERS_LIB), \ +- SUPPORT_DIR := $(SHADERS_SUPPORT_DIR), \ +- COMMAND := $(METALLIB) -o $(SHADERS_LIB) $(SHADERS_AIR), \ +- )) +- +- TARGETS += $(SHADERS_LIB) +- + $(eval $(call SetupJdkLibrary, BUILD_LIBOSXUI, \ + NAME := osxui, \ + OPTIMIZATION := LOW, \ +@@ -909,7 +880,6 @@ ifeq ($(call isTargetOs, macosx), true) + -L$(INSTALL_LIBRARIES_HERE), \ + LIBS := -lawt -losxapp -lawt_lwawt \ + -framework Cocoa \ +- -framework Metal \ + -framework Carbon \ + -framework ApplicationServices \ + -framework JavaRuntimeSupport \ +@@ -917,7 +887,6 @@ ifeq ($(call isTargetOs, macosx), true) + )) + + TARGETS += $(BUILD_LIBOSXUI) +- $(BUILD_LIBOSXUI): $(SHADERS_LIB) + + $(BUILD_LIBOSXUI): $(BUILD_LIBAWT) + +diff --git a/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java b/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java +index 64117b8999e..301b1dbee1f 100644 +--- a/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java ++++ b/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java +@@ -89,7 +89,6 @@ public final class MTLGraphicsConfig extends CGraphicsConfig + private final Object disposerReferent = new Object(); + private final int maxTextureSize; + +- private static native boolean isMetalFrameworkAvailable(); + private static native boolean tryLoadMetalLibrary(int displayID, String shaderLib); + private static native long getMTLConfigInfo(int displayID, String mtlShadersLib); + +@@ -100,7 +99,7 @@ public final class MTLGraphicsConfig extends CGraphicsConfig + private static native int nativeGetMaxTextureSize(); + + static { +- mtlAvailable = isMetalFrameworkAvailable(); ++ mtlAvailable = false; + } + + private MTLGraphicsConfig(CGraphicsDevice device, +diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTSurfaceLayers.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTSurfaceLayers.m +index 1cc4abfaaad..2af0689c044 100644 +--- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTSurfaceLayers.m ++++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTSurfaceLayers.m +@@ -29,7 +29,6 @@ + #import "JNIUtilities.h" + + #import <QuartzCore/CATransaction.h> +-#import <QuartzCore/CAMetalLayer.h> + + @implementation AWTSurfaceLayers + +@@ -71,8 +70,7 @@ - (void) setLayer:(CALayer *)newLayer { + // Updates back buffer size of the layer if it's an OpenGL/Metal layer + // including all OpenGL/Metal sublayers + + (void) repaintLayersRecursively:(CALayer*)aLayer { +- if ([aLayer isKindOfClass:[CAOpenGLLayer class]] || +- [aLayer isKindOfClass:[CAMetalLayer class]]) { ++ if ([aLayer isKindOfClass:[CAOpenGLLayer class]]) { + [aLayer setNeedsDisplay]; + } + for(CALayer *child in aLayer.sublayers) { diff --git a/patches/17/remove_metal_backend.sh b/patches/17/remove_metal_backend.sh new file mode 100755 index 0000000000000000000000000000000000000000..9416a2ea2c15e52810017b5024b7b8da18ffe617 --- /dev/null +++ b/patches/17/remove_metal_backend.sh @@ -0,0 +1,15 @@ +# syntax: [remove-metal-backend.sh] [path-to-openjdk-repo] + +if [ $# -ne 1 ]; then + echo "Usage: remove-metal-backend.sh [path-to-openjdk-repo]" + exit 1 +fi + +REPO_PATH=$1 + +if [ ! -d $REPO_PATH ]; then + echo "Error: $REPO_PATH is not a directory" + exit 1 +fi + +rm -rf $REPO_PATH/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal \ No newline at end of file