pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

mrust-llvm: new pkg: cache LLVM stage (for faster mrust-rustc rebuild [todo])



Module Name:	pkgsrc-wip
Committed By:	Dave Berger <pkgsrc-mrust%web5by5.com@localhost>
Pushed By:	dave
Date:		Wed Feb 2 00:40:44 2022 -0500
Changeset:	7b052c846ffd729468174270a441ed185f98f405

Added Files:
	mrust-llvm/DESCR
	mrust-llvm/Makefile
	mrust-llvm/PLIST
	mrust-llvm/distinfo
	mrust-llvm/patches/patch-Makefile
	mrust-llvm/patches/patch-minicargo.mk

Log Message:
mrust-llvm: new pkg: cache LLVM stage (for faster mrust-rustc rebuild [todo])

In the existing approach, the mrust-rustc package first
unconditionally builds rustc's prerequisite LLVM components--in
addition to then building rustc itself using mrustc.

Once mrust-rustc is updated to depend on, and use, mrust-llvm for
its LLVM components, however (instead of forcing them to rebuild
every time, even when not necessary), hours of compile time may
be saved during rebuilds of the rustc stage.

This will be a more modular approach, and its lower latency for
rebuilds will be helpful for developing, tuning and
troubleshooting the mrust* packages.


Feb  1 22:47:37 2022 EST: mrust-llvm/DESCR
Feb  1 19:52:49 2022 EST: mrust-llvm/Makefile
Feb  1 19:50:04 2022 EST: mrust-llvm/PLIST
Feb  1 08:17:38 2022 EST: mrust-llvm/distinfo
Dec 29 05:57:21 2021 EST: mrust-llvm/patches/patch-Makefile
Dec 24 13:39:42 2021 EST: mrust-llvm/patches/patch-minicargo.mk

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=7b052c846ffd729468174270a441ed185f98f405

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 mrust-llvm/DESCR                      |  23 ++++++
 mrust-llvm/Makefile                   | 145 ++++++++++++++++++++++++++++++++++
 mrust-llvm/PLIST                      |  63 +++++++++++++++
 mrust-llvm/distinfo                   |  12 +++
 mrust-llvm/patches/patch-Makefile     |  19 +++++
 mrust-llvm/patches/patch-minicargo.mk |  12 +++
 6 files changed, 274 insertions(+)

diffs:
diff --git a/mrust-llvm/DESCR b/mrust-llvm/DESCR
new file mode 100644
index 0000000000..7da49a9592
--- /dev/null
+++ b/mrust-llvm/DESCR
@@ -0,0 +1,23 @@
+Mutabah's Rust Compiler
+
+  _In-progress_ alternative rust compiler. Capable of building a
+  fully-working copy of rustc, but not suitable for everyday use
+  (due to terrible error messages).
+
+This project is a "simple" rust compiler written in C++ that is
+able to bootstrap a "recent" rustc, but may eventually become a
+full separate re-implementation.
+
+`mrustc`'s primary goal is bootstrapping `rustc`, and as such it
+tends to assume that the code it's compiling is valid (and any
+errors in the generated code are mrustc bugs). Code generation is
+done by emitting a high-level assembly (currently very ugly C, but
+LLVM/cretone/GIMPLE/... could work) and getting an external tool
+(i.e. `gcc`) to do the heavy-lifting of optimising and machine code
+generation.
+
+=====
+
+This is the mrust LLVM package.  It builds some LLVM components
+from the LLVM sources included in the rust-lang.org distribution.
+Building mrust-rustc depends, in turn, on these components.
diff --git a/mrust-llvm/Makefile b/mrust-llvm/Makefile
new file mode 100644
index 0000000000..ebdb791d62
--- /dev/null
+++ b/mrust-llvm/Makefile
@@ -0,0 +1,145 @@
+# $NetBSD: Makefile,v 1.1 2021/10/12 08:50:00 dlb Exp $
+
+.include "../../wip/mrust/Makefile.common"
+
+PKGNAME=	mrust-llvm-${SNAPSTAMP}
+COMMENT=	Special(?) LLVM build from rustc src
+
+BUILD_TARGET=		rustc-${RUSTVER}-src/build/bin/llvm-config
+DISTFILES=		${DEFAULT_DISTFILES} ${RUSTSRC_DIST}
+##TEST_TARGET=		rust_tests-libs
+##TEST_MAKE_FLAGS=	-o bin/mrustc -o LIBS
+MAKE_FILE=		minicargo.mk
+MAKE_ENV+=		LD_RUN_PATH=${PREFIX}/lib
+MAKE_ENV+=		RUSTC_INSTALL_BINDIR=bin
+MAKE_ENV+=		RUSTC_TARGET=${MACHINE_ARCH}-unknown-${OPSYS:tl}
+##BUILD_MAKE_FLAGS+=	MINICARGO_FLAGS:="-L ${PREFIX}/lib/"
+
+##MAKE_JOBS_SAFE=	no		# DLBFLAG: this may be needed
+##UNLIMIT_RESOURCES=	stacksize	# DLBFLAG: stacksize doesn't need to
+					# be unlimited, but does seem to
+					# need to be higher than the default.
+					# The value that worked for me was
+					# 14m--but that probably could be
+					# tuned (or, simply use this UNLIMIT
+					# feature...?).
+
+USE_TOOLS+=		gmake
+USE_LANGUAGES+=		c c++14
+
+##RUSTBIN=		mrust-rustc
+
+
+#* (no options yet) *#.include "options.mk"
+
+
+# "put" (link?) mrustc & minicargo binaries and libraries into
+# directories where minicargo.mk will look for them.
+# Could buildlink3 help with this?  (Probably not without changing
+# upstream Makefile[s]?)
+pre-build:
+###	for dd in "${WRKSRC}/bin" "${WRKSRC}/${MR_OUTDIR}"; do		\
+###		[ -e "$${dd}" ] || ${MKDIR} "$${dd}";			\
+###	done
+###	for ff in mrustc minicargo; do					\
+###	    [ -e "${WRKSRC}/bin/$${ff}" ] ||				\
+###		${LN} -s ${PREFIX}/bin/$${ff} "${WRKSRC}/bin";		\
+###	done
+###	( cd ${PREFIX}/lib/mrust/;					\
+###	    for ff in *; do						\
+###		[ -e "${WRKSRC}/${MR_OUTDIR}$$ff" ] ||			\
+###		    ${LN} -s "${PREFIX}/lib/mrust/$$ff"			\
+###			"${WRKSRC}/${MR_OUTDIR}";			\
+###	    done; )
+	cd ${WRKSRC} && ${PKGSRC_SETENV} ${MAKE_ENV} \
+		${MAKE_PROGRAM} ${MAKE_FLAGS} ${BUILD_MAKE_FLAGS} RUSTCSRC
+
+
+###pre-test:
+###	( cd ${WRKSRC} &&						\
+###	    ${PKGSRC_SETENV} ${TEST_ENV} 				\
+###		${MAKE_PROGRAM} ${MAKE_FLAGS} ${TEST_MAKE_FLAGS}	\
+###			${TEST_TARGET2} )
+
+
+LLVM_SRC_PFX=	rustc-1.39.0-src/build/
+
+###### include the "/" on PFX
+#####LLVM_MISC_PFX=	tools/
+#####LLVM_MISC=	llvm-opt-fuzzer/CMakeFiles/llvm-opt-fuzzer.dir/link.txt
+
+# include the "/" on PFX
+LLVM_INC_PFX=	include/llvm/
+LLVM_INC=	Config/AsmParsers.def	 Config/AsmPrinters.def	\
+		Config/Disassemblers.def Config/Targets.def	\
+		Config/abi-breaking.h	 Config/llvm-config.h	\
+		IR/Attributes.inc	 IR/IntrinsicEnums.inc
+
+# include the "/" on PFX
+LLVM_BIN_PFX=	bin/
+LLVM_BIN=	llvm-config
+
+# DON'T include the "/" on PFX (libLLVM is part of each file name)
+LLVM_LIB_PFX=	lib/libLLVM
+LLVM_LIB=	AArch64AsmParser.a  AArch64CodeGen.a  AArch64Desc.a     \
+		AArch64Disassembler.a  AArch64Info.a  AArch64Utils.a    \
+		ARMAsmParser.a  ARMCodeGen.a  ARMDesc.a  ARMDisassembler.a \
+		ARMInfo.a  ARMUtils.a  AggressiveInstCombine.a  Analysis.a \
+		AsmParser.a  AsmPrinter.a  BinaryFormat.a  BitReader.a  \
+		BitWriter.a  BitstreamReader.a  CodeGen.a  Core.a       \
+		DebugInfoCodeView.a  DebugInfoDWARF.a  DebugInfoMSF.a   \
+		Demangle.a  GlobalISel.a  IRReader.a  InstCombine.a     \
+		Instrumentation.a  LTO.a  Linker.a  MC.a  MCDisassembler.a \
+		MCParser.a  ObjCARCOpts.a  Object.a  Passes.a  ProfileData.a \
+		Remarks.a  ScalarOpts.a  SelectionDAG.a  Support.a  Target.a \
+		TransformUtils.a  Vectorize.a  X86AsmParser.a  X86CodeGen.a \
+		X86Desc.a  X86Disassembler.a  X86Info.a  X86Utils.a  ipo.a
+
+LLVM_DIRS=	bin  include/llvm/Config  include/llvm/IR  lib
+#####		tools/llvm-opt-fuzzer/CMakeFiles/llvm-opt-fuzzer.dir
+
+STAGE_LLVM=	${DESTDIR}${PREFIX}/lib/mrust/llvm
+
+####
+# The source Makefile doesn't have an "install:" target.
+# Use a simplistic workaround here.
+# [DLBFLAG:] Lacks support for MS Windows style ".EXE" suffixes.
+##
+do-install:
+.for dd in ${LLVM_DIRS}
+	${PKGSRC_SETENV} ${INSTALL_ENV}					\
+	    ${INSTALL_LIB_DIR} ${STAGE_LLVM}/${dd};
+.endfor
+	( cd ${WRKSRC}/${LLVM_SRC_PFX} &&				\
+	    for ff in ${LLVM_INC}; do					\
+		${PKGSRC_SETENV} ${INSTALL_ENV}				\
+		    ${INSTALL_DATA} -l h ${LLVM_INC_PFX}$$ff		\
+		    ${STAGE_LLVM}/${LLVM_INC_PFX}$$ff;			\
+	    done;							\
+	    for ff in ${LLVM_BIN}; do					\
+		${PKGSRC_SETENV} ${INSTALL_ENV}				\
+		    ${INSTALL_PROGRAM} ${LLVM_BIN_PFX}$$ff		\
+		    ${STAGE_LLVM}/${LLVM_BIN_PFX}$$ff;			\
+	    done;							\
+	    for ff in ${LLVM_LIB}; do					\
+		${PKGSRC_SETENV} ${INSTALL_ENV}				\
+		    ${INSTALL_LIB} -l h ${LLVM_LIB_PFX}$$ff		\
+		    ${STAGE_LLVM}/${LLVM_LIB_PFX}$$ff;			\
+	    done;							\
+	)
+#####	    for ff in ${LLVM_MISC}; do					\
+#####		${PKGSRC_SETENV} ${INSTALL_ENV}				\
+#####		    ${INSTALL_DATA} -l h ${LLVM_MISC_PFX}$$ff		\
+#####		    ${STAGE_LLVM}/${LLVM_MISC_PFX}$$ff;			\
+#####	    done;							\
+
+
+###BUILD_DEPENDS+=	mrust-mrustc>=${SNAPSTAMP}:../../wip/mrust-mrustc
+###BUILD_DEPENDS+=	mrust-minicargo>=${SNAPSTAMP}:../../wip/mrust-minicargo
+###BUILD_DEPENDS+=	mrust-libs>=${SNAPSTAMP}:../../wip/mrust-libs
+BUILD_DEPENDS+=	cmake>=3.18.2:../../devel/cmake
+
+
+###.include "../../devel/libatomic/buildlink3.mk"
+###.include "../../mk/dlopen.buildlink3.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/mrust-llvm/PLIST b/mrust-llvm/PLIST
new file mode 100644
index 0000000000..1db428d6fb
--- /dev/null
+++ b/mrust-llvm/PLIST
@@ -0,0 +1,63 @@
+@comment $NetBSD$
+lib/mrust/llvm/bin/llvm-config
+lib/mrust/llvm/include/llvm/Config/AsmParsers.def
+lib/mrust/llvm/include/llvm/Config/AsmPrinters.def
+lib/mrust/llvm/include/llvm/Config/Disassemblers.def
+lib/mrust/llvm/include/llvm/Config/Targets.def
+lib/mrust/llvm/include/llvm/Config/abi-breaking.h
+lib/mrust/llvm/include/llvm/Config/llvm-config.h
+lib/mrust/llvm/include/llvm/IR/Attributes.inc
+lib/mrust/llvm/include/llvm/IR/IntrinsicEnums.inc
+lib/mrust/llvm/lib/libLLVMAArch64AsmParser.a
+lib/mrust/llvm/lib/libLLVMAArch64CodeGen.a
+lib/mrust/llvm/lib/libLLVMAArch64Desc.a
+lib/mrust/llvm/lib/libLLVMAArch64Disassembler.a
+lib/mrust/llvm/lib/libLLVMAArch64Info.a
+lib/mrust/llvm/lib/libLLVMAArch64Utils.a
+lib/mrust/llvm/lib/libLLVMARMAsmParser.a
+lib/mrust/llvm/lib/libLLVMARMCodeGen.a
+lib/mrust/llvm/lib/libLLVMARMDesc.a
+lib/mrust/llvm/lib/libLLVMARMDisassembler.a
+lib/mrust/llvm/lib/libLLVMARMInfo.a
+lib/mrust/llvm/lib/libLLVMARMUtils.a
+lib/mrust/llvm/lib/libLLVMAggressiveInstCombine.a
+lib/mrust/llvm/lib/libLLVMAnalysis.a
+lib/mrust/llvm/lib/libLLVMAsmParser.a
+lib/mrust/llvm/lib/libLLVMAsmPrinter.a
+lib/mrust/llvm/lib/libLLVMBinaryFormat.a
+lib/mrust/llvm/lib/libLLVMBitReader.a
+lib/mrust/llvm/lib/libLLVMBitWriter.a
+lib/mrust/llvm/lib/libLLVMBitstreamReader.a
+lib/mrust/llvm/lib/libLLVMCodeGen.a
+lib/mrust/llvm/lib/libLLVMCore.a
+lib/mrust/llvm/lib/libLLVMDebugInfoCodeView.a
+lib/mrust/llvm/lib/libLLVMDebugInfoDWARF.a
+lib/mrust/llvm/lib/libLLVMDebugInfoMSF.a
+lib/mrust/llvm/lib/libLLVMDemangle.a
+lib/mrust/llvm/lib/libLLVMGlobalISel.a
+lib/mrust/llvm/lib/libLLVMIRReader.a
+lib/mrust/llvm/lib/libLLVMInstCombine.a
+lib/mrust/llvm/lib/libLLVMInstrumentation.a
+lib/mrust/llvm/lib/libLLVMLTO.a
+lib/mrust/llvm/lib/libLLVMLinker.a
+lib/mrust/llvm/lib/libLLVMMC.a
+lib/mrust/llvm/lib/libLLVMMCDisassembler.a
+lib/mrust/llvm/lib/libLLVMMCParser.a
+lib/mrust/llvm/lib/libLLVMObjCARCOpts.a
+lib/mrust/llvm/lib/libLLVMObject.a
+lib/mrust/llvm/lib/libLLVMPasses.a
+lib/mrust/llvm/lib/libLLVMProfileData.a
+lib/mrust/llvm/lib/libLLVMRemarks.a
+lib/mrust/llvm/lib/libLLVMScalarOpts.a
+lib/mrust/llvm/lib/libLLVMSelectionDAG.a
+lib/mrust/llvm/lib/libLLVMSupport.a
+lib/mrust/llvm/lib/libLLVMTarget.a
+lib/mrust/llvm/lib/libLLVMTransformUtils.a
+lib/mrust/llvm/lib/libLLVMVectorize.a
+lib/mrust/llvm/lib/libLLVMX86AsmParser.a
+lib/mrust/llvm/lib/libLLVMX86CodeGen.a
+lib/mrust/llvm/lib/libLLVMX86Desc.a
+lib/mrust/llvm/lib/libLLVMX86Disassembler.a
+lib/mrust/llvm/lib/libLLVMX86Info.a
+lib/mrust/llvm/lib/libLLVMX86Utils.a
+lib/mrust/llvm/lib/libLLVMipo.a
diff --git a/mrust-llvm/distinfo b/mrust-llvm/distinfo
new file mode 100644
index 0000000000..c31d0c7644
--- /dev/null
+++ b/mrust-llvm/distinfo
@@ -0,0 +1,12 @@
+$NetBSD$
+
+SHA1 (mrustc/0e5ffbf19d4331ec96c2231866a81429b90b2dbe-0e5ffbf19d4331ec96c2231866a81429b90b2dbe.zip) = 3c2e1bff891239cc0431b3e6928112ebb7b36793
+RMD160 (mrustc/0e5ffbf19d4331ec96c2231866a81429b90b2dbe-0e5ffbf19d4331ec96c2231866a81429b90b2dbe.zip) = c99362354c652e037622c84b8076ea3bfc4e1ec8
+SHA512 (mrustc/0e5ffbf19d4331ec96c2231866a81429b90b2dbe-0e5ffbf19d4331ec96c2231866a81429b90b2dbe.zip) = 8af5c92102f9964c8f68ff469f0d1197e9b84fcf07d9efa8805011766ce256ddef794c2d08a3a85c7cd0234c9235ca5fe0b18372a71fa984d36e2e765d379037
+Size (mrustc/0e5ffbf19d4331ec96c2231866a81429b90b2dbe-0e5ffbf19d4331ec96c2231866a81429b90b2dbe.zip) = 1354302 bytes
+SHA1 (mrustc/rustc-1.39.0-src.tar.gz) = 82ef6f3b88b8d5e3bfa2fab67bbacf5d6f6ba6bb
+RMD160 (mrustc/rustc-1.39.0-src.tar.gz) = d5b04b87fc336e3be7d592f70de0363aa66622aa
+SHA512 (mrustc/rustc-1.39.0-src.tar.gz) = 77be74410b9f7a2e9f78f7a9860964e122ab9518553acc2cc80d5abeecf3302e9b3ed1fd29e022cccff1f9ff4a568b4015c0d3ac0a524f06e38e9cb360a3341e
+Size (mrustc/rustc-1.39.0-src.tar.gz) = 152803201 bytes
+SHA1 (patch-Makefile) = 4cec2c6cc36210bf5ca77f2ae6bbfa23396769e7
+SHA1 (patch-minicargo.mk) = a13fa4b05e443871b8d25aa7f008069f5dd2f91d
diff --git a/mrust-llvm/patches/patch-Makefile b/mrust-llvm/patches/patch-Makefile
new file mode 100644
index 0000000000..68a07ca3a3
--- /dev/null
+++ b/mrust-llvm/patches/patch-Makefile
@@ -0,0 +1,19 @@
+$NetBSD$
+
+--- Makefile.orig	2021-09-12 00:15:52.000000000 +0000
++++ Makefile
+@@ -213,9 +213,12 @@ $(RUSTC_SRC_TARBALL): $(RUSTC_SRC_DES)
+ 	@echo [CURL] $@
+ 	@rm -f $@
+ 	@curl -sS https://static.rust-lang.org/dist/$@ -o $@
+-$(RUSTC_SRC_DL): $(RUSTC_SRC_TARBALL) rustc-$(RUSTC_VERSION)-src.patch
+-	tar -xf $(RUSTC_SRC_TARBALL)
++##$(RUSTC_SRC_DL): $(RUSTC_SRC_TARBALL) rustc-$(RUSTC_VERSION)-src.patch
++$(RUSTC_SRC_DL): rustc-$(RUSTC_VERSION)-src.patch
++	@###tar -xf $(RUSTC_SRC_TARBALL)
++	@mv ../$(RUSTCSRC) ./
+ 	cd $(RUSTCSRC) && patch -p0 < ../rustc-$(RUSTC_VERSION)-src.patch;
++	find $(RUSTCSRC) -name '*.[oa]' -print0 | xargs -0 rm
+ 	cat $(RUSTC_SRC_DES) > $(RUSTC_SRC_DL)
+ endif
+ 
diff --git a/mrust-llvm/patches/patch-minicargo.mk b/mrust-llvm/patches/patch-minicargo.mk
new file mode 100644
index 0000000000..51856ffe46
--- /dev/null
+++ b/mrust-llvm/patches/patch-minicargo.mk
@@ -0,0 +1,12 @@
+$NetBSD$
+
+--- minicargo.mk.orig	2021-09-12 00:15:52.000000000 +0000
++++ minicargo.mk
+@@ -56,7 +56,6 @@ RUSTC_TARGET ?= x86_64-unknown-linux-gnu
+ LLVM_TARGETS ?= X86;ARM;AArch64#;Mips;PowerPC;SystemZ;JSBackend;MSP430;Sparc;NVPTX
+ OVERRIDE_DIR := script-overrides/$(RUSTC_CHANNEL)-$(RUSTC_VERSION)$(OVERRIDE_SUFFIX)/
+ 
+-.PHONY: bin/mrustc bin/minicargo
+ .PHONY: $(OUTDIR)libstd.rlib $(OUTDIR)libtest.rlib $(OUTDIR)libpanic_unwind.rlib $(OUTDIR)libproc_macro.rlib
+ .PHONY: $(OUTDIR)rustc $(OUTDIR)cargo
+ 


Home | Main Index | Thread Index | Old Index