<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div>I am sure everyone who cares about Rust is already familiar with the issues involved, but just for the sake of documentation, I will try to provide an overview.</div><div>The main issue is that a Rust compiler is required to build a Rust compiler.</div><div><br></div>On an Apple silicon machine running macOS 13, the Rust Portfile version 1.66 downloads<div>    rustc-1.65.0-aarch64-apple-darwin.tar.gz,</div><div>    rust-std-1.65.0-aarch64-apple-darwin.tar.gz, and<div><div>    cargo-1.65.0-aarch64-apple-darwin.tar.gz.</div><div>These are prebuilt binaries of the previous version (1.65) of the Rust compiler, Rust standard library, and Rust package manager respectively.</div><div>Upstream provides these prebuilt binaries for many different architectures [1].</div><div>This “stage0 compiler” is then used to build a local copy of Rust [2].</div><div><br></div><div>The problem is that the upstream binaries will only run on macOS 10.9+.</div><div>Upstream says 10.7+, but that is just the language [3].</div><div>The combination of the language, standard library, and package manager make the minimum higher [4][5].</div><div>Also, there is a proposal to set the minimum supported version to 10.12 [6].</div><div><br></div><div>So the question is how to get a working stage0 Rust compiler on older systems?</div><div>*) The alternative Rust compilers gccrs is still “in a very early stage” [7].</div><div>*) Mutabah's Rust Compiler (mrustc) is a Rust compiler written in C++ [8], so it may be a viable choice.</div><div>    However mrustc can build Rust up to 1.55, so, as pointed out by Kirill in another thread [10], the dependency chain could get quite long.</div><div>    If possible, it would be nice to avoid a similar issue with Clang [11].</div><div>*) There does not seem to be much enthusiasm upstream for re-adding support for older systems [6][12].</div><div>*) Previous versions of the Rust Portfile tried to modify the upstream binaries to work on older systems [13].</div><div>    This strategy certainly worked but could only go so far.</div><div><br></div><div>The current strategy is to build our own stag0 compiler in the port rust-bootstrap.</div><div>A 10.9+ machine builds the stage0 compiler.</div><div>The stage0 compiler is uploaded somewhere (currently my personal GitHub repository).</div><div>10.5-10.8 machines then download the stage0 compiler from us instead of upstream.</div><div>Our stage0 compiler makes extensive use of the MacPorts ecosystem, so that is another reason upstream would unlikely be interested.</div><div><br></div><div>Sorry if this is clear to everyone, but it took me a while to wrap my head around, and I am sure there are subtleties I am missing.</div><div><br></div><div>-Marcus</div><div><br></div><div>[1] <a href="https://github.com/rust-lang/rust/blob/1.66.0/src/stage0.json">https://github.com/rust-lang/rust/blob/1.66.0/src/stage0.json</a></div><div>[2] <a href="https://rustc-dev-guide.rust-lang.org/building/bootstrapping.html#stages-of-bootstrapping">https://rustc-dev-guide.rust-lang.org/building/bootstrapping.html#stages-of-bootstrapping</a></div><div>[3] <a href="https://doc.rust-lang.org/nightly/rustc/platform-support.html">https://doc.rust-lang.org/nightly/rustc/platform-support.html</a></div><div>[4] <a href="https://trac.macports.org/ticket/62639">https://trac.macports.org/ticket/62639</a></div><div>[5] <a href="https://github.com/rust-lang/rust/issues/40481">https://github.com/rust-lang/rust/issues/40481</a></div><div>[6] <a href="https://github.com/rust-lang/rust/pull/104385">https://github.com/rust-lang/rust/pull/104385</a></div><div>[7] <a href="https://github.com/Rust-GCC/gccrs">https://github.com/Rust-GCC/gccrs</a></div><div>[8] <a href="https://github.com/thepowersgang/mrustc">https://github.com/thepowersgang/mrustc</a></div><div>[9] <a href="https://github.com/thepowersgang/mrustc#progress">https://github.com/thepowersgang/mrustc#progress</a></div><div>[10] <a href="https://lists.macports.org/pipermail/macports-dev/2022-December/044862.html">https://lists.macports.org/pipermail/macports-dev/2022-December/044862.html</a></div><div>[11] <a href="https://trac.macports.org/ticket/66226">https://trac.macports.org/ticket/66226</a></div><div>[12] <a href="https://github.com/rust-lang/rfcs/pull/2837">https://github.com/rust-lang/rfcs/pull/2837</a></div><div>[13] <a href="https://github.com/macports/macports-ports/blob/a9e1c26f4967b89ba6d0e546d2507ccc91adc295/lang/rust/Portfile#L66">https://github.com/macports/macports-ports/blob/a9e1c26f4967b89ba6d0e546d2507ccc91adc295/lang/rust/Portfile#L66</a></div></div></div><div><br><blockquote type="cite"><div>On Dec 21, 2022, at 9:02 PM, mcalhoun@macports.org wrote:</div><br class="Apple-interchange-newline"><div><meta http-equiv="content-type" content="text/html; charset=us-ascii"><div style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div>As many of you know, the <span style="orphans: 2; white-space: pre-wrap; widows: 2;">Rust compiler is self-hosting, so Rust is required to build Rust.</span></div><div>The problem is that the Rust binaries provided by upstream only work on macOS 10.9 and above.</div><div><br></div><div>To get around this, there is a rust-bootstrap port that build Rust binaries on 10.9+ intended to build Rust on previous macOS version.</div><div>Currently, these binaries are stored on using my personal GitHub account.</div><div><br></div><div>So the entire upgrade process is essentially:</div><div>1) Update the version in rust-bootstrap.</div><div>2) Build Rust binaries on a 10.9 VM.</div><div>3) Upload Rust binaries to GitHub account.</div><div>4) On older machines, use MacPorts Rust binaries to build Rust.</div><div>    On newer machines, us the upstream provides binaries to build Rust.</div><div><br></div><div>This is far from ideal, but it has allowed us to get Rust working back to 10.5 (both i386 and x86_64).</div><div><br></div><div>This entire procedure may be modified, and there are a few suggestions on the mailing list</div><div>(<a href="https://lists.macports.org/pipermail/macports-dev/2022-December/thread.html#44855">https://lists.macports.org/pipermail/macports-dev/2022-December/thread.html#44855</a>).</div><div><br></div><div>However, until consensus is reached about major changes, it would be nice to make some incremental improvements.</div><div><br></div><div>The easiest change: does anyone know of a better place to store the MacPorts generated binaries?</div><div><br></div><div>More challenging: can anyone think of a way to automate the process of building the MacPorts Rust binaries after rust-bootstrap is update?</div><div><br></div><div>-Marcus</div></div></div></blockquote></div><br></body></html>