From 3c6ef5e27ae3585b48e9599020e4323bf9ed381e Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Mon, 22 Sep 2025 14:15:51 +0000 Subject: [PATCH] 8368102: Don't store macros in spec.gmk Reviewed-by: erikj --- make/autoconf/flags-cflags.m4 | 31 ------------------ make/autoconf/flags-ldflags.m4 | 2 +- make/autoconf/spec.gmk.template | 9 ------ make/common/JdkNativeCompilation.gmk | 45 ++++++++++++++++++++++++-- make/common/modules/LauncherCommon.gmk | 4 +-- make/common/native/Link.gmk | 22 ++++++++++++- make/hotspot/lib/CompileGtest.gmk | 2 +- make/hotspot/lib/JvmFeatures.gmk | 2 +- 8 files changed, 69 insertions(+), 48 deletions(-) diff --git a/make/autoconf/flags-cflags.m4 b/make/autoconf/flags-cflags.m4 index 0e2825d14b0..9d58a280998 100644 --- a/make/autoconf/flags-cflags.m4 +++ b/make/autoconf/flags-cflags.m4 @@ -37,56 +37,25 @@ AC_DEFUN([FLAGS_SETUP_SHARED_LIBS], if test "x$TOOLCHAIN_TYPE" = xgcc; then # Default works for linux, might work on other platforms as well. SHARED_LIBRARY_FLAGS='-shared' - # --disable-new-dtags forces use of RPATH instead of RUNPATH for rpaths. - # This protects internal library dependencies within the JDK from being - # overridden using LD_LIBRARY_PATH. See JDK-8326891 for more information. - SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$ORIGIN[$]1 -Wl,--disable-new-dtags' - SET_SHARED_LIBRARY_ORIGIN="-Wl,-z,origin $SET_EXECUTABLE_ORIGIN" - SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1' elif test "x$TOOLCHAIN_TYPE" = xclang; then if test "x$OPENJDK_TARGET_OS" = xmacosx; then # Linking is different on MacOSX SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0" - SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path$(or [$]1,/.)' - SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" - SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/[$]1' elif test "x$OPENJDK_TARGET_OS" = xaix; then # Linking is different on aix SHARED_LIBRARY_FLAGS="-shared -Wl,-bM:SRE -Wl,-bnoentry" - SET_EXECUTABLE_ORIGIN="" - SET_SHARED_LIBRARY_ORIGIN='' - SET_SHARED_LIBRARY_NAME='' else # Default works for linux, might work on other platforms as well. SHARED_LIBRARY_FLAGS='-shared' - SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$ORIGIN[$]1' - if test "x$OPENJDK_TARGET_OS" = xlinux; then - SET_EXECUTABLE_ORIGIN="$SET_EXECUTABLE_ORIGIN -Wl,--disable-new-dtags" - fi - SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1' - - # arm specific settings - if test "x$OPENJDK_TARGET_CPU" = "xarm"; then - # '-Wl,-z,origin' isn't used on arm. - SET_SHARED_LIBRARY_ORIGIN='-Wl,-rpath,\$$$$ORIGIN[$]1' - else - SET_SHARED_LIBRARY_ORIGIN="-Wl,-z,origin $SET_EXECUTABLE_ORIGIN" - fi fi elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then SHARED_LIBRARY_FLAGS="-dll" - SET_EXECUTABLE_ORIGIN='' - SET_SHARED_LIBRARY_ORIGIN='' - SET_SHARED_LIBRARY_NAME='' fi - AC_SUBST(SET_EXECUTABLE_ORIGIN) - AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) - AC_SUBST(SET_SHARED_LIBRARY_NAME) AC_SUBST(SHARED_LIBRARY_FLAGS) ]) diff --git a/make/autoconf/flags-ldflags.m4 b/make/autoconf/flags-ldflags.m4 index a12a6e7f9a6..651be3a1913 100644 --- a/make/autoconf/flags-ldflags.m4 +++ b/make/autoconf/flags-ldflags.m4 @@ -98,7 +98,7 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_HELPER], # Setup OS-dependent LDFLAGS if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$TOOLCHAIN_TYPE" = xclang; then - # FIXME: We should really generalize SET_SHARED_LIBRARY_ORIGIN instead. + # FIXME: We should really generalize SetSharedLibraryOrigin instead. OS_LDFLAGS_JVM_ONLY="-Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.." OS_LDFLAGS="-mmacosx-version-min=$MACOSX_VERSION_MIN -Wl,-reproducible" fi diff --git a/make/autoconf/spec.gmk.template b/make/autoconf/spec.gmk.template index ab6bb51c27e..4eb5aa2f66d 100644 --- a/make/autoconf/spec.gmk.template +++ b/make/autoconf/spec.gmk.template @@ -624,17 +624,8 @@ ASFLAGS_DEBUG_SYMBOLS := @ASFLAGS_DEBUG_SYMBOLS@ # Compress (or not) jars COMPRESS_JARS := @COMPRESS_JARS@ -# Options to linker to specify the library name. -# (Note absence of := assignment, because we do not want to evaluate the macro body here) -SET_SHARED_LIBRARY_NAME = @SET_SHARED_LIBRARY_NAME@ - SHARED_LIBRARY_FLAGS := @SHARED_LIBRARY_FLAGS@ -# Set origin using the linker, ie use the relative path to the dependent library to find the dependencies. -# (Note absence of := assignment, because we do not want to evaluate the macro body here) -SET_SHARED_LIBRARY_ORIGIN = @SET_SHARED_LIBRARY_ORIGIN@ -SET_EXECUTABLE_ORIGIN = @SET_EXECUTABLE_ORIGIN@ - LIBRARY_PREFIX := @LIBRARY_PREFIX@ SHARED_LIBRARY_SUFFIX := @SHARED_LIBRARY_SUFFIX@ STATIC_LIBRARY_SUFFIX := @STATIC_LIBRARY_SUFFIX@ diff --git a/make/common/JdkNativeCompilation.gmk b/make/common/JdkNativeCompilation.gmk index 0285669ffd8..29001e09bd0 100644 --- a/make/common/JdkNativeCompilation.gmk +++ b/make/common/JdkNativeCompilation.gmk @@ -30,6 +30,47 @@ ifeq ($(INCLUDE), true) include NativeCompilation.gmk +ifeq ($(call isCompiler, gcc), true) + # --disable-new-dtags forces use of RPATH instead of RUNPATH for rpaths. + # This protects internal library dependencies within the JDK from being + # overridden using LD_LIBRARY_PATH. See JDK-8326891 for more information. + SetExecutableOrigin = \ + -Wl,-rpath,\$(DOLLAR)ORIGIN$1 -Wl,--disable-new-dtags + SetSharedLibraryOrigin = \ + -Wl,-z,origin -Wl,-rpath,\$(DOLLAR)ORIGIN$1 -Wl,--disable-new-dtags +else ifeq ($(call isCompiler, clang), true) + ifeq ($(call isTargetOs, macosx), true) + SetExecutableOrigin = \ + -Wl,-rpath,@loader_path$(or $1,/.) + SetSharedLibraryOrigin = \ + -Wl,-rpath,@loader_path$(or $1,/.) + else ifeq ($(call isTargetOs, aix), true) + SetExecutableOrigin = + SetSharedLibraryOrigin = + else + ifeq ($(call isTargetOs, linux), true) + SetExecutableOrigin = \ + -Wl,-rpath,\$(DOLLAR)ORIGIN$1 -Wl,--disable-new-dtags + else + SetExecutableOrigin = \ + -Wl,-rpath,\$(DOLLAR)ORIGIN$1 + endif + + ifeq ($(call isTargetOs, arm), true) + SetSharedLibraryOrigin = \ + -Wl,-rpath,\$(DOLLAR)ORIGIN$1 + else + SetSharedLibraryOrigin = \ + -Wl,-z,origin -Wl,-rpath,\$(DOLLAR)ORIGIN$1 + endif + endif +else ifeq ($(call isCompiler, microsoft), true) + SetExecutableOrigin = + SetSharedLibraryOrigin = +else + $(error Unknown toolchain) +endif + FindSrcDirsForComponent += \ $(call uniq, $(wildcard \ $(TOPDIR)/src/$(strip $1)/$(OPENJDK_TARGET_OS)/native/$(strip $2) \ @@ -444,9 +485,9 @@ define SetupJdkNativeCompilationBody ifneq ($$($1_LD_SET_ORIGIN), false) ifeq ($$($1_TYPE), EXECUTABLE) - $1_LDFLAGS += $$(call SET_EXECUTABLE_ORIGIN) + $1_LDFLAGS += $$(call SetExecutableOrigin) else - $1_LDFLAGS += $$(call SET_SHARED_LIBRARY_ORIGIN) + $1_LDFLAGS += $$(call SetSharedLibraryOrigin) endif endif # APPEND_LDFLAGS, if it exists, must be set after the origin flags diff --git a/make/common/modules/LauncherCommon.gmk b/make/common/modules/LauncherCommon.gmk index 700c0de74d5..0b420df5684 100644 --- a/make/common/modules/LauncherCommon.gmk +++ b/make/common/modules/LauncherCommon.gmk @@ -156,8 +156,8 @@ define SetupBuildLauncherBody DISABLED_WARNINGS_gcc := unused-function unused-variable, \ DISABLED_WARNINGS_clang := unused-function, \ LDFLAGS := $$($1_LDFLAGS), \ - LDFLAGS_linux := $$(call SET_EXECUTABLE_ORIGIN,/../lib), \ - LDFLAGS_macosx := $$(call SET_EXECUTABLE_ORIGIN,/../lib), \ + LDFLAGS_linux := $$(call SetExecutableOrigin,/../lib), \ + LDFLAGS_macosx := $$(call SetExecutableOrigin,/../lib), \ LDFLAGS_FILTER_OUT := $$($1_LDFLAGS_FILTER_OUT), \ JDK_LIBS := $$($1_JDK_LIBS), \ JDK_LIBS_windows := $$($1_JDK_LIBS_windows), \ diff --git a/make/common/native/Link.gmk b/make/common/native/Link.gmk index e888edfcc4c..855e50bddfb 100644 --- a/make/common/native/Link.gmk +++ b/make/common/native/Link.gmk @@ -50,6 +50,26 @@ GetEntitlementsFile = \ $(if $(wildcard $f), $f, $(DEFAULT_ENTITLEMENTS_FILE)) \ ) +ifeq ($(call isCompiler, gcc), true) + SetSharedLibraryName = \ + -Wl,-soname=$1 +else ifeq ($(call isCompiler, clang), true) + ifeq ($(call isTargetOs, macosx), true) + SetSharedLibraryName = \ + -Wl,-install_name,@rpath/$1 + else ifeq ($(call isTargetOs, aix), true) + SetSharedLibraryName = + else + # Default works for linux, might work on other platforms as well. + SetSharedLibraryName = \ + -Wl,-soname=$1 + endif +else ifeq ($(call isCompiler, microsoft), true) + SetSharedLibraryName = +else + $(error Unknown toolchain) +endif + ################################################################################ define SetupLinking # Unless specifically set, stripping should only happen if symbols are also @@ -131,7 +151,7 @@ define CreateDynamicLibraryOrExecutable # A shared dynamic library or an executable binary has been specified ifeq ($$($1_TYPE), LIBRARY) # Generating a dynamic library. - $1_EXTRA_LDFLAGS += $$(call SET_SHARED_LIBRARY_NAME,$$($1_BASENAME)) + $1_EXTRA_LDFLAGS += $$(call SetSharedLibraryName,$$($1_BASENAME)) endif ifeq ($(MACOSX_CODESIGN_MODE), hardened) diff --git a/make/hotspot/lib/CompileGtest.gmk b/make/hotspot/lib/CompileGtest.gmk index 30d3e3b524c..d615e254f5a 100644 --- a/make/hotspot/lib/CompileGtest.gmk +++ b/make/hotspot/lib/CompileGtest.gmk @@ -152,7 +152,7 @@ $(eval $(call SetupJdkExecutable, BUILD_GTEST_LAUNCHER, \ -I$(GTEST_FRAMEWORK_SRC)/googlemock \ -I$(GTEST_FRAMEWORK_SRC)/googlemock/include, \ LD_SET_ORIGIN := false, \ - LDFLAGS_unix := $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_unix := $(call SetSharedLibraryOrigin), \ JDK_LIBS := gtest:libjvm, \ COPY_DEBUG_SYMBOLS := $(GTEST_COPY_DEBUG_SYMBOLS), \ ZIP_EXTERNAL_DEBUG_SYMBOLS := false, \ diff --git a/make/hotspot/lib/JvmFeatures.gmk b/make/hotspot/lib/JvmFeatures.gmk index 0fd1c752174..79bbd6a4106 100644 --- a/make/hotspot/lib/JvmFeatures.gmk +++ b/make/hotspot/lib/JvmFeatures.gmk @@ -57,7 +57,7 @@ ifeq ($(call check-jvm-feature, zero), true) -DZERO_LIBARCH='"$(OPENJDK_TARGET_CPU_LEGACY_LIB)"' $(LIBFFI_CFLAGS) JVM_LIBS_FEATURES += $(LIBFFI_LIBS) ifeq ($(ENABLE_LIBFFI_BUNDLING), true) - JVM_LDFLAGS_FEATURES += $(call SET_EXECUTABLE_ORIGIN,/..) + JVM_LDFLAGS_FEATURES += $(call SetExecutableOrigin,/..) endif else JVM_EXCLUDE_PATTERNS += /zero/