git: bf143897d312 - main - devel/wasi-libcxx: actually disable exceptions

From: Christoph Moench-Tegeder <cmt_at_FreeBSD.org>
Date: Wed, 24 Nov 2021 21:13:19 UTC
The branch main has been updated by cmt:

URL: https://cgit.FreeBSD.org/ports/commit/?id=bf143897d312fc861061eeca33d4cf3e777b6728

commit bf143897d312fc861061eeca33d4cf3e777b6728
Author:     Christoph Moench-Tegeder <cmt@FreeBSD.org>
AuthorDate: 2021-11-24 20:58:57 +0000
Commit:     Christoph Moench-Tegeder <cmt@FreeBSD.org>
CommitDate: 2021-11-24 20:58:57 +0000

    devel/wasi-libcxx: actually disable exceptions
    
    This port was accidentially using the base system compiler for some
    parts of the configure stages - which gives wrong results in the
    compiler feature tests, as base clang on FreeBSD 13.0 (llvm 11) does
    not know about the wasm32 target.
    Worse, even with the correct compiler some of the feature tests depend
    on a present and usable libc++ for the wasi target, which we don't
    have yet (this port will build one, but before...).
    The end result was that the build system failed to figure out the
    compiler flags for disabling exceptions (-fno-exceptions in clang's
    case) and built the wasm libc++ with exceptions enabled. But exceptions
    are not (yet) supported in wasi-sdk, so trying to build any code against
    this wasm libc++ failed with linker errors like
      wasm-ld: error: /usr/local/share/wasi-sysroot/lib/wasm32-wasi/libc++.a(string.cpp.o): undefined symbol: __cxa_allocate_exception
      wasm-ld: error: /usr/local/share/wasi-sysroot/lib/wasm32-wasi/libc++.a(string.cpp.o): undefined symbol: __cxa_throw
    
    To solve that, we have to force the configure stages to use the correct
    compiler by pushing CC/CXX and related variables into CONFIGURE_ENV
    and specify the results of the compiler feature tests via cmake
    arguments. That is a horrible workaround, but short of a full bootstrap
    build, I can't see any other solution to the chicken-and-egg problem
    with wasi-libcxx requiring a functional wasi-libc++ to build.
    
    PR:             260005
    Approved by:    greg at unrelenting dot technology (maintainer)
---
 devel/wasi-libcxx/Makefile | 75 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 74 insertions(+), 1 deletion(-)

diff --git a/devel/wasi-libcxx/Makefile b/devel/wasi-libcxx/Makefile
index 5bd273616f9b..eb5fe7308a65 100644
--- a/devel/wasi-libcxx/Makefile
+++ b/devel/wasi-libcxx/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	libcxx
 DISTVERSION=	13.0.0
+PORTREVISION=	1
 CATEGORIES=	devel lang
 MASTER_SITES=	https://github.com/llvm/llvm-project/releases/download/llvmorg-${DISTVERSION:S/rc/-rc/}/ \
 		https://${PRE_}releases.llvm.org/${LLVM_RELEASE}/${RCDIR}
@@ -30,6 +31,9 @@ LLVM_PREFIX=	${PREFIX}/llvm${LLVM_SUFFIX}
 WASI_SYSROOT=	${LOCALBASE}/share/wasi-sysroot
 WRKSRC=		${WRKDIR}/${DISTNAME}/libcxx
 
+CONFIGURE_ENV+=	CC="${CC}" CFLAGS="${CFLAGS}"
+CONFIGURE_ENV+=	CXX="${CXX}" CXXFLAGS="${CXXFLAGS}"
+
 CMAKE_INSTALL_PREFIX=	${PREFIX}/share/wasi-sysroot
 CMAKE_ARGS=	-DCMAKE_C_COMPILER_WORKS=1 \
 		-DCMAKE_CXX_COMPILER_WORKS=1 \
@@ -63,7 +67,76 @@ CMAKE_ARGS=	-DCMAKE_C_COMPILER_WORKS=1 \
 		-DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
 		-DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
 		-DLIBCXXABI_HAS_WIN32_THREAD_API:BOOL=OFF \
-		-DLIBCXXABI_LIBCXX_INCLUDES=${CONFIGURE_WRKSRC}/include/c++/v1
+		-DLIBCXXABI_LIBCXX_INCLUDES=${CONFIGURE_WRKSRC}/include/c++/v1 \
+		-DLIBCXX_SUPPORTS_FNO_EXCEPTIONS_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_NOSTDLIBXX_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_NODEFAULTLIBS_FLAG:BOOL=ON \
+		-DLIBCXX_HAS_COMMENT_LIB_PRAGMA:BOOL=ON \
+		-DLIBCXX_SUPPORTS_FALIGNED_ALLOCATION_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_NOSTDINCXX_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_FVISIBILITY_EQ_HIDDEN_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WALL_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WEXTRA_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_W_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WWRITE_STRINGS_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WNO_UNUSED_PARAMETER_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WNO_LONG_LONG_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WERROR_EQ_RETURN_TYPE_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WEXTRA_SEMI_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WUNDEF_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WNO_USER_DEFINED_LITERALS_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WNO_COVERED_SWITCH_DEFAULT_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WNO_SUGGEST_OVERRIDE_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WNO_IGNORED_ATTRIBUTES_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_WNO_ERROR_FLAG:BOOL=ON \
+		-DLIBCXX_SUPPORTS_EHS_FLAG:BOOL=OFF \
+		-DLIBCXX_SUPPORTS_EHA_FLAG:BOOL=OFF \
+		-DLIBCXX_SUPPORTS_ZL_FLAG:BOOL=OFF \
+		-DLIBCXX_SUPPORTS_NODEFAULTLIB_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_FNO_EXCEPTIONS_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_NOSTDLIBXX_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_NODEFAULTLIBS_FLAG:BOOL=ON \
+		-DLIBCXXABI_HAS_COMMENT_LIB_PRAGMA:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_FALIGNED_ALLOCATION_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_NOSTDINCXX_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_FVISIBILITY_EQ_HIDDEN_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WALL_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WEXTRA_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_W_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WWRITE_STRINGS_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WNO_UNUSED_PARAMETER_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WNO_LONG_LONG_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WERROR_EQ_RETURN_TYPE_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WEXTRA_SEMI_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WUNDEF_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WNO_USER_DEFINED_LITERALS_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WNO_COVERED_SWITCH_DEFAULT_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WNO_SUGGEST_OVERRIDE_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WNO_IGNORED_ATTRIBUTES_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WNO_ERROR_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_EHS_FLAG:BOOL=OFF \
+		-DLIBCXXABI_SUPPORTS_EHA_FLAG:BOOL=OFF \
+		-DLIBCXXABI_SUPPORTS_ZL_FLAG:BOOL=OFF \
+		-DLIBCXXABI_SUPPORTS_NODEFAULTLIB_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WCHAR_SUBSCRIPTS_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WCONVERSION_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WMISMATCHED_TAGS_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WMISSING_BRACES_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WNEWLINE_EOF_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WUNUSED_FUNCTION_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WSHADOW_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WSHORTEN_64_TO_32_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WSIGN_COMPARE_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WSIGN_CONVERSION_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WSTRICT_ALIASING_EQ_2_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WSTRICT_OVERFLOW_EQ_4_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WUNUSED_PARAMETER_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WUNUSED_VARIABLE_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_WX_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_PEDANTIC_FLAG:BOOL=ON \
+		-DLIBCXXABI_SUPPORTS_FSTRICT_ALIASING_FLAG:BOOL=ON
 
 post-extract:
 	@${MKDIR} ${WRKDIR}/.build_cxxabi