aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2015-06-24 03:27:36 +0800
committered <ed@FreeBSD.org>2015-06-24 03:27:36 +0800
commitf407805fd96d73d0956ed5e2ee6c166fdd678791 (patch)
treedfe4d49ed2a4c6295014173c56d76346c9d05f8a
parentede2bb7d9d8fcbaeeeda017007d81dbba746591c (diff)
downloadfreebsd-ports-gnome-f407805fd96d73d0956ed5e2ee6c166fdd678791.tar.gz
freebsd-ports-gnome-f407805fd96d73d0956ed5e2ee6c166fdd678791.tar.zst
freebsd-ports-gnome-f407805fd96d73d0956ed5e2ee6c166fdd678791.zip
Add devel/cloudabi-compiler-rt.
This is the last port that is needed to have a working C toolchain for CloudABI. C++ still requires libc++, libc++abi and libunwind. These will be added later. As mentioned in the comments, we don't use CMake to build compiler-rt, as this is too hard in this specific instance. CMake sort of depends on compiler-rt to be present, which is a bit weird. Differential Revision: https://reviews.freebsd.org/D2892 Reviewed by: bapt
-rw-r--r--devel/Makefile1
-rw-r--r--devel/cloudabi-compiler-rt/Makefile72
-rw-r--r--devel/cloudabi-compiler-rt/distinfo2
-rw-r--r--devel/cloudabi-compiler-rt/pkg-descr9
4 files changed, 84 insertions, 0 deletions
diff --git a/devel/Makefile b/devel/Makefile
index 5857f2b7dcb6..23f91db8811c 100644
--- a/devel/Makefile
+++ b/devel/Makefile
@@ -250,6 +250,7 @@
SUBDIR += clojure-cider
SUBDIR += cloudabi-binutils
SUBDIR += cloudabi-cloudlibc
+ SUBDIR += cloudabi-compiler-rt
SUBDIR += cmake
SUBDIR += cmake-fedora
SUBDIR += cmake-gui
diff --git a/devel/cloudabi-compiler-rt/Makefile b/devel/cloudabi-compiler-rt/Makefile
new file mode 100644
index 000000000000..649e556304fc
--- /dev/null
+++ b/devel/cloudabi-compiler-rt/Makefile
@@ -0,0 +1,72 @@
+# Created by: Ed Schouten <ed@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= compiler-rt
+DISTVERSION= 0.240389
+CATEGORIES= devel
+MASTER_SITES= https://nuxi.nl/distfiles/compiler-rt/
+PKGNAMEPREFIX= cloudabi-
+
+MAINTAINER= ed@FreeBSD.org
+COMMENT= Compiler runtime library for CloudABI
+
+LICENSE= MIT
+
+BUILD_DEPENDS= x86_64-unknown-cloudabi-ar:${PORTSDIR}/devel/cloudabi-binutils \
+ x86_64-unknown-cloudabi-cc:${PORTSDIR}/lang/cloudabi-clang \
+ ${LOCALBASE}/x86_64-unknown-cloudabi/lib/libc.a:${PORTSDIR}/devel/cloudabi-cloudlibc
+
+USES= tar:xz
+
+PLIST_FILES= x86_64-unknown-cloudabi/lib/libcompiler_rt.a
+
+WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}/lib/builtins
+
+# Do not use the CMake build rules provided by compiler-rt. The CMake build
+# rules shipped with compiler-rt depend both on a standard C++ library and a
+# compiler that can generate working executables. In our case we are not
+# capable of generating executables, for the reason that we need an installed
+# copy of compiler-rt.
+#
+# Fall back to generating the object files and the library manually.
+SRCFILES= absvdi2.c absvsi2.c absvti2.c adddf3.c addsf3.c addtf3.c \
+ addvdi3.c addvsi3.c addvti3.c ashldi3.c ashlti3.c ashrdi3.c \
+ ashrti3.c clear_cache.c clzdi2.c clzsi2.c clzti2.c cmpdi2.c \
+ cmpti2.c comparedf2.c comparesf2.c ctzdi2.c ctzsi2.c ctzti2.c \
+ divdc3.c divdf3.c divdi3.c divmoddi4.c divmodsi4.c divsc3.c \
+ divsf3.c divsi3.c divtf3.c divti3.c divxc3.c \
+ enable_execute_stack.c extendhfsf2.c extendsfdf2.c ffsdi2.c \
+ ffsti2.c fixdfdi.c fixdfsi.c fixdfti.c fixsfdi.c fixsfsi.c \
+ fixsfti.c fixunsdfdi.c fixunsdfsi.c fixunsdfti.c fixunssfdi.c \
+ fixunssfsi.c fixunssfti.c fixunsxfdi.c fixunsxfsi.c \
+ fixunsxfti.c fixxfdi.c fixxfti.c floatsidf.c floatsisf.c \
+ floattidf.c floattisf.c floattixf.c floatunsidf.c \
+ floatunsisf.c floatuntidf.c floatuntisf.c floatuntixf.c \
+ int_util.c lshrdi3.c lshrti3.c moddi3.c modsi3.c modti3.c \
+ muldc3.c muldf3.c muldi3.c mulodi4.c mulosi4.c muloti4.c \
+ mulsc3.c mulsf3.c multf3.c multi3.c mulvdi3.c mulvsi3.c \
+ mulvti3.c mulxc3.c negdf2.c negdi2.c negsf2.c negti2.c \
+ negvdi2.c negvsi2.c negvti2.c paritydi2.c paritysi2.c \
+ parityti2.c popcountdi2.c popcountsi2.c popcountti2.c \
+ powidf2.c powisf2.c powitf2.c powixf2.c subdf3.c subsf3.c \
+ subtf3.c subvdi3.c subvsi3.c subvti3.c trampoline_setup.c \
+ truncdfhf2.c truncdfsf2.c truncsfhf2.c ucmpdi2.c ucmpti2.c \
+ udivdi3.c udivmoddi4.c udivmodsi4.c udivmodti4.c udivsi3.c \
+ udivti3.c umoddi3.c umodsi3.c umodti3.c x86_64/floatdidf.c \
+ x86_64/floatdisf.c x86_64/floatdixf.c x86_64/floatundidf.S \
+ x86_64/floatundisf.S x86_64/floatundixf.S
+
+do-build:
+.for f in ${SRCFILES}
+ ${LOCALBASE}/bin/x86_64-unknown-cloudabi-cc -O2 \
+ -c -o ${WRKSRC}/$f.o ${WRKSRC}/$f
+.endfor
+ cd ${WRKSRC}; ${LOCALBASE}/bin/x86_64-unknown-cloudabi-ar -rcs \
+ libcompiler_rt.a ${SRCFILES:S/$/.o/}
+
+do-install:
+ @${MKDIR} ${STAGEDIR}${PREFIX}/x86_64-unknown-cloudabi/lib/
+ ${INSTALL_DATA} ${WRKSRC}/libcompiler_rt.a \
+ ${STAGEDIR}${PREFIX}/x86_64-unknown-cloudabi/lib/
+
+.include <bsd.port.mk>
diff --git a/devel/cloudabi-compiler-rt/distinfo b/devel/cloudabi-compiler-rt/distinfo
new file mode 100644
index 000000000000..fa1d41745720
--- /dev/null
+++ b/devel/cloudabi-compiler-rt/distinfo
@@ -0,0 +1,2 @@
+SHA256 (compiler-rt-0.240389.tar.xz) = 1df516ee4a9662e261458f69018b3c44e3c3d18702e1e90234478c00ad14c5eb
+SIZE (compiler-rt-0.240389.tar.xz) = 1182404
diff --git a/devel/cloudabi-compiler-rt/pkg-descr b/devel/cloudabi-compiler-rt/pkg-descr
new file mode 100644
index 000000000000..8d3b20b0a7a8
--- /dev/null
+++ b/devel/cloudabi-compiler-rt/pkg-descr
@@ -0,0 +1,9 @@
+The compiler-rt library provides fallback routines for mathematical
+functions that are not implemented in hardware. For example, when
+compiling for a 32-bit target, converting a double to a 64-bit unsigned
+integer is compiling into a runtime call to the "__fixunsdfdi" function.
+
+This library is a prerequisite for having a working CloudABI toolchain,
+as Clang attempts to link this library into executables unconditionally.
+
+WWW: http://compiler-rt.llvm.org/