PORTNAME=	libcxx
DISTVERSION?=	0
PORTREVISION?=	0
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}/
PKGNAMEPREFIX=	wasi-
PKGNAMESUFFIX=	${LLVM_VERSION}
DISTNAME=	llvm-project-${DISTVERSION}.src
DISTFILES=	llvm-project-${DISTVERSION}.src${EXTRACT_SUFX}

MAINTAINER=	vishwin@FreeBSD.org
COMMENT=	C++ standard library for WebAssembly System Interface
WWW=		https://llvm.org/

LICENSE=	LLVM2
LICENSE_NAME=	Apache License 2.0 with LLVM Exceptions
LICENSE_FILE=	${WRKSRC}/llvm/LICENSE.TXT
LICENSE_PERMS=	dist-mirror dist-sell pkg-mirror pkg-sell auto-accept

.if ${DISTVERSION} == 0
IGNORE=		is a meta port; there is nothing to build
PKGNAMESUFFIX=	-master
.endif

BUILD_DEPENDS=	${WASI_SYSROOT}/include/stdarg.h:devel/wasi-libc \
		wasi-compiler-rt${LLVM_VERSION}>0:devel/wasi-compiler-rt${LLVM_VERSION}

USES=		cmake llvm:${LLVM_SUFFIX} tar:xz

LLVM_RELEASE=	${DISTVERSION:C/rc.*//}
LLVM_SUFFIX=	${LLVM_RELEASE:C/\.[0-9]\.[0-9]$//}
DISTINFO_FILE=	${PORTSDIR}/${LLVM_PORT}/distinfo
SSP_UNSAFE=	yes
NO_ARCH=	yes
PLIST=		${.CURDIR}/pkg-plist

CONFIGURE_ENV+=	CC="${CC}" CFLAGS="${CFLAGS}" \
		CXX="${CXX}" CXXFLAGS="${CXXFLAGS}"
CC=		${LOCALBASE}/bin/clang${LLVM_VERSION}
CXX=		${LOCALBASE}/bin/clang++${LLVM_VERSION}
WASI_SYSROOT=	${LOCALBASE}/share/wasi-sysroot
TRIPLE=		wasm32-wasi
WITHOUT_CPU_CFLAGS=	yes
# try to sync with https://github.com/WebAssembly/wasi-sdk
# Makefile and wasi-sdk.cmake
CMAKE_INSTALL_PREFIX=	${PREFIX}/share/wasi-sysroot
CMAKE_SOURCE_PATH=	${WRKSRC}/runtimes
CMAKE_ARGS=	-DCMAKE_AR=${LOCALBASE}/bin/llvm-ar${LLVM_VERSION} \
		-DCMAKE_RANLIB=${LOCALBASE}/bin/llvm-ranlib${LLVM_VERSION} \
		-DCMAKE_C_COMPILER_TARGET=${TRIPLE} \
		-DCMAKE_CXX_COMPILER_TARGET=${TRIPLE} \
		-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
		-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
		-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY \
		-DCMAKE_C_COMPILER_WORKS=ON \
		-DCMAKE_CXX_COMPILER_WORKS=ON \
		-DCMAKE_STAGING_PREFIX=${CMAKE_INSTALL_PREFIX} \
		-DLLVM_CONFIG_PATH=${LOCALBASE}/bin/${LLVM_CONFIG} \
		-DCXX_SUPPORTS_CXX11=ON \
		-DLIBCXX_ENABLE_THREADS:BOOL=OFF \
		-DLIBCXX_HAS_PTHREAD_API:BOOL=OFF \
		-DLIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
		-DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
		-DLIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF \
		-DLLVM_COMPILER_CHECKED=ON \
		-DLIBCXX_ENABLE_SHARED:BOOL=OFF \
		-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \
		-DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \
		-DLIBCXX_ENABLE_FILESYSTEM:BOOL=OFF \
		-DLIBCXX_CXX_ABI=libcxxabi \
		-DLIBCXX_HAS_MUSL_LIBC:BOOL=ON \
		-DLIBCXX_ABI_VERSION=2 \
		-DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \
		-DLIBCXXABI_ENABLE_SHARED:BOOL=OFF \
		-DLIBCXXABI_SILENT_TERMINATE:BOOL=ON \
		-DLIBCXXABI_ENABLE_THREADS:BOOL=OFF \
		-DLIBCXXABI_HAS_PTHREAD_API:BOOL=OFF \
		-DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
		-DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
		-DLIBCXXABI_HAS_WIN32_THREAD_API:BOOL=OFF \
		-DUNIX:BOOL=ON \
		-DCMAKE_SYSROOT=${WASI_SYSROOT} \
		-DLIBCXX_LIBDIR_SUFFIX=/${TRIPLE} \
		-DLIBCXXABI_LIBDIR_SUFFIX=/${TRIPLE} \
		-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi"

.include <bsd.port.mk>
