On Tue, 2 Dec 2025 18:10:47 GMT, Erik Joelsson <[email protected]> wrote:
>> 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 > >> 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 ? > > I pointed this out because I observed it: > > > $ git status > On branch pull/28559 > Untracked files: > (use "git add <file>..." to include in what will be committed) > make/lto.o > > nothing added to commit but untracked files present (use "git add" to track) > > > Neither `/tmp/lto.o` nor `$TOPDIR/make/lto.o` are acceptable locations for > output files, temporary or not, from the build process. > 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 Yes, something along these lines is needed, though I'm not sure we need to convolute this unnecessarily by defining the flag in configure. If there was ever an expectation that other toolchains would need something similar, then abstracting it out into a configure defined variable would make sense, but in this case I think keeping it simpler is preferred. Here is how I would like it solved. In Flags.gmk, inside the LINK_TIME_OPTIMIZATION conditional, check for macosx and add the flag. The filename needs to be an absolute path to the OBJECT_DIR and a unique file name based on the NAME. Also include a comment explaining why this is needed, some summary version of the note you quoted above. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/28559#discussion_r2582354361
