From a868adf0534296951b59d479e737bb2f25fae315 Mon Sep 17 00:00:00 2001 From: Antonio Linares Date: Sat, 4 Oct 2025 08:54:21 +0200 Subject: [PATCH] removed duplicated linked libraries for darwin --- config/bin.mk | 17 +++++++++++++++++ utils/hbmk2/hbmk2.prg | 26 ++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/config/bin.mk b/config/bin.mk index 82b3b49c0e..e656f35cb6 100644 --- a/config/bin.mk +++ b/config/bin.mk @@ -53,6 +53,22 @@ ifeq ($(BUILD_SHARED),yes) HB_LIBS_TPL := else # (have to use '=' operator here) + ifeq ($(HB_PLATFORM),darwin) + # On macOS, ld warns about duplicate libraries and can handle circular deps without duplicates + HB_LIBS_TPL = \ + hbextern \ + hbdebug \ + $(_HB_VM) \ + hbrtl \ + hblang \ + hbcpage \ + $(HB_GT_LIBS) \ + $(_HB_RDD) \ + hbmacro \ + hbcplr \ + hbpp \ + hbcommon + else HB_LIBS_TPL = \ hbextern \ hbdebug \ @@ -68,6 +84,7 @@ else hbcplr \ hbpp \ hbcommon + endif ifneq ($(HB_HAS_PCRE_LOCAL),) HB_LIBS_TPL += hbpcre diff --git a/utils/hbmk2/hbmk2.prg b/utils/hbmk2/hbmk2.prg index 650f6ef7ef..9deda5c07c 100644 --- a/utils/hbmk2/hbmk2.prg +++ b/utils/hbmk2/hbmk2.prg @@ -1843,6 +1843,17 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit hbmk[ _HBMK_cCCEXT ] := ".exe" #endif + /* Apply platform-specific library fixes */ + IF hbmk[ _HBMK_cPLAT ] == "darwin" + /* On macOS, remove duplicate 'hbrdd' since ld warns about duplicate libraries and doesn't support lib grouping */ + IF hbmk[ _HBMK_nHBMODE ] == _HBMODE_HB10 + aLIB_BASE_RDD := { "hbrdd", "hbusrrdd", "rddntx", "rddcdx", "rddfpt", "hbhsx", "hbsix" } + ELSE + aLIB_BASE_RDD := { "hbrdd", "hbuddall", "hbusrrdd", "rddntx", "rddcdx", "rddnsx", "rddfpt", "hbhsx", "hbsix" } + ENDIF + aLIB_BASE_RDD_MT := aLIB_BASE_RDD + ENDIF + /* Setup platform dependent data */ cBin_CompPRG := "harbour" + l_cHBSUFFIX @@ -4180,7 +4191,12 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit ELSE AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB} {LF}" ) AAdd( hbmk[ _HBMK_aOPTD ], "{LL} {LB} {LF}" ) - l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) + IF hbmk[ _HBMK_cPLAT ] == "darwin" + /* On macOS, ld can handle circular dependencies without duplicates and warns about duplicate libraries */ + l_aLIBHBBASE_2 := {} + ELSE + l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) + ENDIF ENDIF IF hbmk[ _HBMK_cPLAT ] == "darwin" /* Leave space for later modifying .dylib paths using `install_name_tool`. @@ -4549,7 +4565,13 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit ELSE AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB} {LF}" ) AAdd( hbmk[ _HBMK_aOPTD ], "{LL} {LB} {LF}" ) - l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) + IF hbmk[ _HBMK_cPLAT ] == "darwin" + /* On macOS, ld warns about duplicate libraries, so we skip the duplicate base libs + since macOS ld can handle circular dependencies without explicit grouping */ + l_aLIBHBBASE_2 := {} + ELSE + l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) + ENDIF ENDIF IF hbmk[ _HBMK_lSTRIP ] IF hbmk[ _HBMK_lCreateLib ]