diff --git a/etc/bashrc b/etc/bashrc index 02d084f060..2e157923b7 100644 --- a/etc/bashrc +++ b/etc/bashrc @@ -6,7 +6,7 @@ # \\/ M anipulation | #------------------------------------------------------------------------------ # Copyright (C) 2011-2016 OpenFOAM Foundation -# Copyright (C) 2016-2022 OpenCFD Ltd. +# Copyright (C) 2016-2023 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, distributed under GPL-3.0-or-later. @@ -87,6 +87,7 @@ export WM_COMPILE_OPTION=Opt # +lld : with lld linker (with clang) # +mold : with mold linker (with clang) # ~libz : without libz compression +# ~rpath : without rpath handling [MacOS] # +openmp : with openmp # ~openmp : without openmp # +ccache : use ccache diff --git a/etc/cshrc b/etc/cshrc index 7f19beec7b..5a42602f50 100644 --- a/etc/cshrc +++ b/etc/cshrc @@ -6,7 +6,7 @@ # \\/ M anipulation | #------------------------------------------------------------------------------ # Copyright (C) 2011-2016 OpenFOAM Foundation -# Copyright (C) 2016-2022 OpenCFD Ltd. +# Copyright (C) 2016-2023 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, distributed under GPL-3.0-or-later. @@ -87,6 +87,7 @@ setenv WM_COMPILE_OPTION Opt # +lld : with lld linker (with clang) # +mold : with mold linker (with clang) # ~libz : without libz compression +# ~rpath : without rpath handling [MacOS] # +openmp : with openmp # ~openmp : without openmp # +ccache : use ccache diff --git a/wmake/rules/darwin64Clang/c++ b/wmake/rules/darwin64Clang/c++ index 7547b28d53..a9e092144a 100644 --- a/wmake/rules/darwin64Clang/c++ +++ b/wmake/rules/darwin64Clang/c++ @@ -16,10 +16,16 @@ cctoo = $(Ctoo) cpptoo = $(Ctoo) cxxtoo = $(Ctoo) -LINK_LIBS = $(c++DBUG) -LINKLIBSO = $(CC) $(c++FLAGS) -Wl,-dylib,-undefined,dynamic_lookup +# Linking: +# with or without rpath components on MacOS +# - current default is with rpath unless explicitly disabled -LINKEXE = $(CC) $(c++FLAGS) -Wl,-execute,-undefined,dynamic_lookup +ifneq (,$(findstring ~rpath,$(WM_COMPILE_CONTROL))) + include $(DEFAULT_RULES)/link-c++ + +else + include $(DEFAULT_RULES)/link-rpath-c++ +endif #------------------------------------------------------------------------------ diff --git a/wmake/rules/darwin64Clang/link-c++ b/wmake/rules/darwin64Clang/link-c++ new file mode 100644 index 0000000000..d1c1f6e6a7 --- /dev/null +++ b/wmake/rules/darwin64Clang/link-c++ @@ -0,0 +1,9 @@ +#------------------------------------------------------------------------------ + +LINK_LIBS = $(c++DBUG) + +LINKLIBSO = $(CC) $(c++FLAGS) -Wl,-dylib,-undefined,dynamic_lookup + +LINKEXE = $(CC) $(c++FLAGS) -Wl,-execute,-undefined,dynamic_lookup + +#------------------------------------------------------------------------------ diff --git a/wmake/rules/darwin64Clang/link-rpath-c++ b/wmake/rules/darwin64Clang/link-rpath-c++ new file mode 100644 index 0000000000..f7a7cd6001 --- /dev/null +++ b/wmake/rules/darwin64Clang/link-rpath-c++ @@ -0,0 +1,15 @@ +#------------------------------------------------------------------------------ +include $(DEFAULT_RULES)/rpath + +LINK_LIBS = $(c++DBUG) + +LINKLIBSO = $(CC) $(c++FLAGS) \ + $(PROJECT_RPATH) -dynamiclib \ + -install_name @rpath/$(notdir $(LIB)$(EXT_SO)) \ + -Wl,-dylib,-undefined,dynamic_lookup + +LINKEXE = $(CC) $(c++FLAGS) \ + $(subst @loader_path,@executable_path/../lib,$(PROJECT_RPATH)) \ + -Wl,-execute,-undefined,dynamic_lookup + +#------------------------------------------------------------------------------ diff --git a/wmake/rules/darwin64Clang/rpath b/wmake/rules/darwin64Clang/rpath new file mode 100644 index 0000000000..834b8f1693 --- /dev/null +++ b/wmake/rules/darwin64Clang/rpath @@ -0,0 +1,30 @@ +#------------------------------------------------------------------------------ + +# Compile-time rpath information: + +FOAM_MPI ?= dummy +ifeq (,$(strip $(FOAM_MPI))) + FOAM_MPI = dummy +endif + +PROJECT_RPATH := + +# ThirdParty libraries (FOAM_EXT_LIBBIN) : mpi-specific and serial +ifneq (,$(strip $(FOAM_EXT_LIBBIN))) + ifneq (dummy,$(strip $(FOAM_MPI))) + PROJECT_RPATH += -rpath $(FOAM_EXT_LIBBIN)/$(FOAM_MPI) + endif + PROJECT_RPATH += -rpath $(FOAM_EXT_LIBBIN) +endif + +# project libraries (FOAM_LIBBIN) : mpi-specific and serial +# encode as @loader_path and recompose as @executable_path as needed +ifneq (dummy,$(strip $(FOAM_MPI))) + PROJECT_RPATH += -rpath @loader_path/$(FOAM_MPI) +endif +PROJECT_RPATH += -rpath @loader_path + +# Fallback for stubs libraries (largely for missing MPI) - to be found last +PROJECT_RPATH += -rpath @loader_path/dummy + +#------------------------------------------------------------------------------