On Tue, 2 Dec 2025 08:18:05 GMT, Matthias Baesken <[email protected]> wrote:

>> make/autoconf/flags-ldflags.m4 line 83:
>> 
>>> 81:     else
>>> 82:       LDFLAGS_LTO="-flto=auto -fuse-linker-plugin -fno-strict-aliasing"
>>> 83:     fi
>> 
>> The way I understand this flag, we are defining a non temporary location for 
>> this file. Just specifying a file name without a directory path means it's 
>> relative to the directory where the compiler is running, which in our case 
>> is `make/`. We do not want to drop files in the source tree. Also, this file 
>> needs to be unique for each link unit using lto, so we can't have a global 
>> value defined here in configure. The filename needs to be generated uniquely 
>> into the build output dir for each call to SetupNativeCompilation.
>
> In the error/warning messages we got we saw `/tmp/lto.o` . Not sure if the 
> files would show up under 'make' when giving no full path with this added 
> flag, but if so this would not be very nice; but from my observations I never 
> saw stored files. Can we somehow reference the build-target-dir in 
> configure/autoconf files ?

We could set EXTRA_LDFLAGS_LTO for macos/clang and then use it later in 
make/common/native/Flags.gmk where we add a unique string for every lib built 
and also keep it away from the source dir


     LDFLAGS_LTO="-flto=auto -fuse-linker-plugin -fno-strict-aliasing"
+    EXTRA_LDFLAGS_LTO="-Wl,-object_path_lto,"
     LDFLAGS_CXX_PARTIAL_LINKING="$MACHINE_FLAG -r"
 
     if test "x$OPENJDK_TARGET_OS" = xlinux; then
@@ -159,6 +160,7 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_HELPER],
   # Export some intermediate variables for compatibility
   LDFLAGS_CXX_JDK="$DEBUGLEVEL_LDFLAGS_JDK_ONLY"
   AC_SUBST(LDFLAGS_LTO)
+  AC_SUBST(EXTRA_LDFLAGS_LTO)
   AC_SUBST(LDFLAGS_CXX_JDK)
   AC_SUBST(LDFLAGS_CXX_PARTIAL_LINKING)
 ])
diff --git a/make/autoconf/spec.gmk.template b/make/autoconf/spec.gmk.template
index b3d58704c50..e4523a23e6e 100644
--- a/make/autoconf/spec.gmk.template
+++ b/make/autoconf/spec.gmk.template
@@ -592,6 +592,8 @@ LDFLAGS_CXX_PARTIAL_LINKING := @LDFLAGS_CXX_PARTIAL_LINKING@
 # LDFLAGS specific to link time optimization
 LDFLAGS_LTO := @LDFLAGS_LTO@
 
+EXTRA_LDFLAGS_LTO := @EXTRA_LDFLAGS_LTO@
+
 # Sometimes a different linker is needed for c++ libs
 LDCXX := @LDCXX@
 # The flags for linking libstdc++ linker.
diff --git a/make/common/native/Flags.gmk b/make/common/native/Flags.gmk
index 843701cb4db..ee96dbb5d11 100644
--- a/make/common/native/Flags.gmk
+++ b/make/common/native/Flags.gmk
@@ -229,6 +229,7 @@ define SetupLinkerFlags
   # TOOLCHAIN_TYPE plus OPENJDK_TARGET_OS
   ifeq ($$($1_LINK_TIME_OPTIMIZATION), true)
     $1_EXTRA_LDFLAGS += $(LDFLAGS_LTO)
+    $1_EXTRA_LDFLAGS += $(EXTRA_LDFLAGS_LTO)/tmp/$1.o
   endif

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/28559#discussion_r2581755075

Reply via email to