summaryrefslogtreecommitdiff
path: root/lang/rust/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'lang/rust/Makefile')
-rw-r--r--lang/rust/Makefile163
1 files changed, 163 insertions, 0 deletions
diff --git a/lang/rust/Makefile b/lang/rust/Makefile
new file mode 100644
index 00000000000..ed2085eb0bc
--- /dev/null
+++ b/lang/rust/Makefile
@@ -0,0 +1,163 @@
+# $NetBSD: Makefile,v 1.1 2016/09/06 10:36:49 jperkin Exp $
+
+DISTNAME= rustc-1.11.0-src
+PKGNAME= ${DISTNAME:S/rustc/rust/:S/-src//}
+CATEGORIES= lang
+MASTER_SITES= http://static.rust-lang.org/dist/
+
+MAINTAINER= pkgsrc-users@NetBSD.org
+HOMEPAGE= http://www.rust-lang.org/
+COMMENT= Safe, concurrent, practical language
+LICENSE= mit OR apache-2.0
+
+WRKSRC= ${WRKDIR}/${DISTNAME:S/-src//}
+
+USE_GCC_RUNTIME= yes
+USE_LANGUAGES= c c++
+USE_TOOLS+= bash gmake
+
+HAS_CONFIGURE= yes
+CONFIGURE_ARGS+= --prefix=${PREFIX}
+CONFIGURE_ARGS+= --build=${RUST_ARCH}
+CONFIGURE_ARGS+= --mandir=${PREFIX}/${PKGMANDIR}
+CONFIGURE_ARGS+= --release-channel=stable
+CONFIGURE_ENV+= CFG_DISABLE_CODEGEN_TESTS=1
+
+UNLIMIT_RESOURCES+= cputime
+
+REPLACE_BASH+= src/rust-installer/gen-install-script.sh
+REPLACE_BASH+= src/rust-installer/gen-installer.sh
+
+#
+# Lots of per-platform specific documentation, e.g. for each system call,
+# making it difficult to PLIST. If it ends up being important we'll just have
+# to go with lots of PLIST.${OPSYS}
+#
+CONFIGURE_ARGS+= --disable-docs
+
+TEST_TARGET= check
+
+# Required for LLVM (-std=c++11)
+GCC_REQD+= 4.8
+
+.include "../../mk/bsd.prefs.mk"
+
+#
+# Use jemalloc on systems where rust does by default too.
+#
+PLIST_VARS+= jemalloc
+.if ${OPSYS} == "Linux" || ${OPSYS} == "Darwin"
+. include "../../devel/jemalloc/buildlink3.mk"
+CONFIGURE_ARGS+= --jemalloc-root=${BUILDLINK_PREFIX.jemalloc}/lib
+PLIST.jemalloc= yes
+.else
+CONFIGURE_ARGS+= --disable-jemalloc
+.endif
+
+#
+# Can't use pkgsrc llvm on SunOS at the moment due to a relocation error.
+#
+.if ${OPSYS} != "SunOS"
+. include "../../lang/llvm/buildlink3.mk"
+CONFIGURE_ARGS+= --llvm-root=${BUILDLINK_PREFIX.llvm}
+.endif
+
+#
+# Rust unfortunately requires itself to build. On platforms which aren't
+# supported by upstream (where they offer binary bootstraps), or where we
+# do not trust random binaries from the Internet, we need to build and
+# provide our own bootstrap.
+#
+# pkgsrc can be used to do this, but the resulting bootstrap must be
+# relocatable (i.e. $ORIGIN) and not depend on anything from pkgsrc (so it
+# is common to use rust's internal llvm).
+#
+# The following variables need to be modified/commented out when producing
+# a stage2 bootstrap.
+#
+CONFIGURE_ARGS+= --enable-local-rust
+CONFIGURE_ARGS+= --local-rust-root=${WRKDIR}/rust-${RUST_STAGE2_VER}-${RUST_ARCH}/rustc
+#
+.if !empty(MACHINE_PLATFORM:MDarwin-*-i386)
+RUST_ARCH= i686-apple-darwin
+.elif !empty(MACHINE_PLATFORM:MDarwin-*-x86_64)
+RUST_ARCH= x86_64-apple-darwin
+.elif !empty(MACHINE_PLATFORM:MLinux-*-i386)
+RUST_ARCH= i686-unknown-linux-gnu
+.elif !empty(MACHINE_PLATFORM:MLinux-*-x86_64)
+RUST_ARCH= x86_64-unknown-linux-gnu
+.elif !empty(MACHINE_PLATFORM:MSunOS-*-x86_64)
+RUST_ARCH= x86_64-sun-solaris
+SITES.${RUST_STAGE2}= https://us-east.manta.joyent.com/pkgsrc/public/tmp/
+.else
+NOT_FOR_PLATFORM+= ${MACHINE_PLATFORM}
+.endif
+
+RUST_STAGE2_VER= 1.10.0
+RUST_STAGE2?= rust-${RUST_STAGE2_VER}-${RUST_ARCH}.tar.gz
+SITES.${RUST_STAGE2}?= https://static.rust-lang.org/dist/
+DISTFILES= ${DEFAULT_DISTFILES} ${RUST_STAGE2}
+
+PLIST_SRC= PLIST
+.if ${OPSYS} == "Darwin"
+PLIST_SRC+= PLIST.lldb
+.else
+PLIST_SRC+= PLIST.gdb
+.endif
+
+OPSYSVARS+= SOEXT
+SOEXT.Darwin= dylib
+SOEXT.*= so
+
+RUST_VERHASH= 39b92f95
+PLIST_SUBST+= RUST_ARCH=${RUST_ARCH:Q}
+PLIST_SUBST+= RUST_VERHASH=${RUST_VERHASH:Q}
+PLIST_SUBST+= SOEXT=${SOEXT:Q}
+PRINT_PLIST_AWK+= { gsub(/${RUST_ARCH}/, "$${RUST_ARCH}") }
+PRINT_PLIST_AWK+= { gsub(/${RUST_VERHASH}/, "$${RUST_VERHASH}") }
+PRINT_PLIST_AWK+= { gsub(/\.${SOEXT}/, ".$${SOEXT}") }
+
+.if ${OPSYS} == "SunOS"
+BUILD_DEPENDS+= grep>=0:../../textproc/grep
+BUILD_DEPENDS+= coreutils>=0:../../sysutils/coreutils
+TOOLS_PATH.grep= ${PREFIX}/bin/ggrep
+TOOLS_CREATE+= md5sum
+TOOLS_PATH.md5sum= ${PREFIX}/bin/gmd5sum
+
+SUBST_CLASSES+= ranlib
+SUBST_STAGE.ranlib= pre-configure
+SUBST_FILES.ranlib= mk/rt.mk
+SUBST_SED.ranlib= -e 's,RANLIB=.* \\,RANLIB="true" \\,g'
+.endif
+
+post-install:
+ ${RM} -f ${DESTDIR}${PREFIX}/lib/rustlib/install.log
+
+.if ${OPSYS} == "Darwin"
+.PHONY: fix-darwin-install-name
+post-install: fix-darwin-install-name
+fix-darwin-install-name:
+. for bin in rustc rustdoc
+ otool -XL ${DESTDIR}${PREFIX}/bin/${bin} \
+ | ${GREP} '@rpath' | while read rpath rest; do \
+ install_name_tool -change $$rpath \
+ `${ECHO} $$rpath | ${SED} -e 's,@rpath,${PREFIX}/lib,g'` \
+ ${DESTDIR}${PREFIX}/bin/${bin}; \
+ done
+. endfor
+. for libdir in lib lib/rustlib/${RUST_ARCH}/lib
+ for f in ${DESTDIR}${PREFIX}/${libdir}/lib*.dylib; do \
+ [ ! -f $$f ] && continue; \
+ install_name_tool -id `${ECHO} $$f | ${SED} -e 's,${DESTDIR},,g'` $$f; \
+ otool -XL $$f | grep '@rpath' | while read rpath rest; do \
+ install_name_tool -change $$rpath \
+ `${ECHO} $$rpath | ${SED} -e 's,@rpath,${PREFIX}/${libdir},g'` \
+ $$f; \
+ done; \
+ done
+. endfor
+.endif
+
+.include "../../devel/cmake/buildlink3.mk"
+.include "../../lang/python/tool.mk"
+.include "../../mk/bsd.pkg.mk"