On Thu, Jan 22, 2026 at 03:35:41PM +0000, Klemens Nanni wrote:
> 22.01.2026 17:26, Jeremie Courreges-Anglas пишет:
> > boost publically exposes C++ libs with ABI details encoded.  That
> > doesn't work very well when mixing compilers.
> 
> Right.
> 
> > I suspect that passing
> > -mlong-calls to the b2 compilation (do-configure) should be enough,
> > but I'm not sure how to do that.
> 
> build.sh accepts flags, but then:
> 
> |clang++: warning: ignoring '-mlong-calls' option as it is not currently 
> supported with the implicit usage of -mabicalls [-Woption-ignored]
> 
> ... second attempt, diff below:
> 
> |> clang++ -x c++ -std=c++11 -pthread -mlong-calls -mno-abicalls 
> -Wno-deprecated-declarations -DNDEBUG bindjam.cpp [...] -o b2
> |fatal error: error in backend: Cannot select: 0x45fc4c9a0: i64 = 
> MipsISD::GPRel TargetGlobalAddress:i64<ptr @.str> 0 [TF=3]
> |  0x442ad8ee0: i64 = TargetGlobalAddress<ptr @.str> 0 [TF=3]
> |In function: _ZN2b23jam6to_jamIbEEPNS_5valueET_
> |[...]

Pfff... so either there's a magic trick we don't know, or -mlong-calls
is plain useless with clang.

> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/boost/Makefile,v
> diff -u -p -r1.157 Makefile
> --- Makefile  15 Jan 2026 15:00:58 -0000      1.157
> +++ Makefile  22 Jan 2026 15:30:46 -0000
> @@ -90,13 +90,15 @@ LIB_DEPENDS=      archivers/bzip2 \
>  
>  LIB_DEPENDS-md=      devel/boost
>  
> +BUILD_SH_ARGS=       # empty
> +.if ${MACHINE_ARCH} == "mips64"
> +# XXX bindjam.cpp:(.text+0x600): relocation truncated to fit: R_MIPS_CALL16 
> ...
> +BUILD_SH_ARGS+=      --cxxflags='-mlong-calls -mno-abicalls'
> +.endif
> +
>  .include <bsd.port.arch.mk>
>  
> -.if ${PROPERTIES:Mclang}
> -TOOLSET=     clang
> -.else
> -TOOLSET=     gcc
> -.endif
> +TOOLSET=     ${CHOSEN_COMPILER:base-%=:ports-%=}

FWIW I'm really not a fan of these chicken scratches...

>  BJAM_CONFIG= -sICU_PATH=${LOCALBASE} \
>               -sBZIP2_INCLUDE=${LOCALBASE}/include \
> @@ -138,7 +140,7 @@ do-configure:
>       @cd ${WRKSRC}/libs/config && \
>               ${SETENV} ${CONFIGURE_ENV} /bin/sh ./configure
>       @cd ${WRKSRC}/tools/build/src/engine && ${SETENV} ${CONFIGURE_ENV} \
> -             /bin/sh ./build.sh ${TOOLSET} && cp b2 ${WRKSRC}
> +             /bin/sh ./build.sh ${BUILD_SH_ARGS} ${TOOLSET} && cp b2 
> ${WRKSRC}
>       @cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} /bin/sh ./bootstrap.sh 
> ${BOOTSTRAP}
>  
>  do-build:
> 

-- 
jca

Reply via email to