<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/38cf78bcc7849f98300f030e9af8942c3189c21b">https://github.com/macports/macports-ports/commit/38cf78bcc7849f98300f030e9af8942c3189c21b</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 38cf78bcc7849f98300f030e9af8942c3189c21b
</span>Author: Kirill A. Korinsky <kirill@korins.ky>
AuthorDate: Sat Feb 19 18:49:07 2022 +0100

<span style='display:block; white-space:pre;color:#404040;'>    mrustc: update to 1.54-20220806
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    It also:
</span><span style='display:block; white-space:pre;color:#404040;'>     - incorporated patches from rust-legacy-bootstrap.
</span><span style='display:block; white-space:pre;color:#404040;'>     - switched to use legacysupport PG.
</span><span style='display:block; white-space:pre;color:#404040;'>     - fixed an issue then mrustc might not build anything with thread local.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    See: https://trac.macports.org/ticket/64146
</span>---
 lang/mrustc/Portfile                               | 164 ++++----
 ...duced-support-of-MACPORTS_LEGACY_SUPPORT_.patch |  46 +++
 ...url-sys-never-try-to-link-with-lib-darwin.patch |  30 ++
 ...-use-src-instead-.git-as-vendored-indicat.patch |  36 ++
 ...-use-src-instead-.git-as-vendored-indicat.patch |  30 ++
 ...-sys-recovered-LIBGIT2_SYS_USE_PKG_CONFIG.patch |  25 ++
 ...-10.6-enforce-emulated-TLS-via-LLVM-Clang.patch | 439 +++++++++++++++++++++
 .../0007-macOS-10.6-Fix-pthread_cond_destroy.patch |  34 ++
 .../files/0008-macOS-10.6-Switch-to-OpenSSL.patch  |  77 ++++
 9 files changed, 815 insertions(+), 66 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/mrustc/Portfile b/lang/mrustc/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index a331bd0b95b..502b5dfec48 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/mrustc/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/mrustc/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2,12 +2,20 @@
</span> 
 PortSystem          1.0
 PortGroup           github 1.0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           legacysupport 1.1
</span> PortGroup           compiler_blacklist_versions 1.0
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup        thepowersgang mrustc 15a5cb1f066bd148bd2959c63adb649e7a06e5ce
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup        thepowersgang mrustc 42b54861f26253a2ab2c71bcfbe74ee2418db293
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version             20220210
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set rust_version    1.54.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set rust_version_major [join [lrange [split ${rust_version} .-] 0 1] .]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set rust_version_major_underscore [join [lrange [split ${rust_version} .-] 0 1] _]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# subport mrustc-rust has its own versioning
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version             ${rust_version_major}-20220806
</span> revision            0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+epoch               1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> categories          lang devel
 license             MIT
 maintainers         {@catap korins.ky:kirill} openmaintainer
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -19,16 +27,12 @@ long_description    In-progress alternative rust compiler. Capable of building a
</span> 
 master_sites-append https://static.rust-lang.org/dist/:rust
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set rust_version    1.54.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set rust_version_major [join [lrange [split ${rust_version} .-] 0 1] .]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set rust_version_major_underscore [join [lrange [split ${rust_version} .-] 0 1] _]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> distfiles-append    rustc-${rust_version}-src.tar.gz:rust
 
 checksums           mrustc-${github.version}.tar.gz \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rmd160  f54d1fd8e9b2493e9a81f31d53da0236cefbd786 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  ef0f9f9fefe7e2e1b6798af9077cb01936131a0d493ccf6919d8b4d6fd6f9c63 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    1180689  \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160  0e49471627ce4b8dfc62d724c11fd40fc2919f70 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  8aa3a8b0bd0fab02a7567a74c844c5b64687a858fd75356a75f0cdda386cb74e \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    1189563 \
</span>                     rustc-${rust_version}-src.tar.gz \
                     rmd160  be2de16e2deaf91aee723e631a36f6de52636ddd \
                     sha256  ac8511633e9b5a65ad030a1a2e5bdaa841fdfe3132f2baaa52cc04e71c6c6976 \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -47,7 +51,8 @@ compiler.thread_local_storage yes
</span> # https://github.com/thepowersgang/mrustc/issues/214
 compiler.blacklist *gcc*
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.blacklist-append {clang < 900} {macports-clang-3.[0-9]} macports-clang-4.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# See https://github.com/thepowersgang/mrustc/issues/255
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.blacklist-append {clang < 1300} {macports-clang-3.[0-9]} macports-clang-4.0
</span> 
 # A C compiler is needed at run-time; it doesn't have to be the same version as
 # the C++ compiler used to compile mrustc, but we'll use that one as the
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -63,88 +68,104 @@ if { [string match macports-clang-* ${configure.compiler}] } {
</span> #                    port:[string map {"macports-gcc-" "gcc"} ${configure.compiler}]
 # }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-depends_build-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    port:rust-legacy-bootstrap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+post-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # prevent it from re-download sources
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ln -sf ${distpath}/rustc-${rust_version}-src.tar.gz ${worksrcpath}/rustc-${rust_version}-src.tar.gz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ln -sf ${workpath}/rustc-${rust_version}-src ${worksrcpath}/rustc-${rust_version}-src
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    touch ${workpath}/rustc-${rust_version}-src/dl-version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-post-patch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+pre-patch {
</span>     # Patch the Rust source code with the patch included with mrustc
     system -W ${workpath}/rustc-${rust_version}-src "patch -p0 < ${worksrcpath}/rustc-${rust_version}-src.patch"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Patch the Rust with legacy bootsrap patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    system -W ${workpath}/rustc-${rust_version}-src "patch -p1 < ${prefix}/share/rust-legacy-bootstrap/rustc-${rust_version}-src.patch"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    file rename ${workpath}/rustc-${rust_version}-src ${worksrcpath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patch.dir           ${workpath}/rustc-${rust_version}-src
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patch.pre_args      -p1
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    # prevent it from re-download src
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    touch ${worksrcpath}/rustc-${rust_version}-src/dl-version
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# patches as git tree: https://github.com/catap/rust-legacy-bootstrap/tree/1.54.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          0001-Introduced-support-of-MACPORTS_LEGACY_SUPPORT_.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    0002-curl-sys-never-try-to-link-with-lib-darwin.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    0003-libgit2-sys-use-src-instead-.git-as-vendored-indicat.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    0004-libssh2-sys-use-src-instead-.git-as-vendored-indicat.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    0005-libgit2-sys-recovered-LIBGIT2_SYS_USE_PKG_CONFIG.patch
</span> 
 if {${os.platform} eq "darwin" && ${os.major} < 11} {
     PortGroup       active_variants 1.1
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    # __cxa_thread_atexit is part of libc++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    depends_lib-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    port:libcxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    0006-macOS-10.6-enforce-emulated-TLS-via-LLVM-Clang.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    0007-macOS-10.6-Fix-pthread_cond_destroy.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    0008-macOS-10.6-Switch-to-OpenSSL.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set libemutls ${workpath}/libemutls
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set libemutls_a ${libemutls}/libemutls.a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set emutls_c ${workpath}/rustc-${rust_version}-src/src/llvm-project/compiler-rt/lib/builtins/emutls.c
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    require_active_variants \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    port:libcxx emulated_tls
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.env-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    MRUSTC_LIBDIR=${libemutls}
</span> 
     post-patch {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # when script-overrides is used it never calls build.rs => help it to setup desire feature
</span>         set script [open "${worksrcpath}/script-overrides/stable-${rust_version}-macos/build_std.txt" a]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${script} "cargo:rustc-cfg=feature=\"macos_before_10_7\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts ${script} "cargo:rustc-cfg=target_enforce_emulated_tls"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts ${script} "cargo:rustc-link-lib=static=emutls"
</span>         close ${script}
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-build.env-append    CC=${configure.cc} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    CXX=${configure.cxx} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    CFG_DEFAULT_LINKER=${configure.cxx} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    "CXXFLAGS_EXTRA=${configure.cxxflags} ${configure.universal_cxxflags}" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    "LINKFLAGS_EXTRA=${configure.ldflags} ${configure.universal_ldflags}" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    RUSTC_VERSION=${rust_version} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    MRUSTC_TARGET_VER=${rust_version_major}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    pre-build {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        file mkdir ${libemutls}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        system "${configure.cc} ${configure.cflags} [get_canonical_archflags cc] -c -o ${libemutls_a} ${emutls_c}"
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# legacysupport PG adds a lot of ENV like CPLUS_INCLUDE_PATH that brokes LLVM build
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# integrate it by hand because I need it only for linkat before macOS 10.10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {${os.platform} eq "darwin" && ${os.major} < 14} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    depends_lib-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    path:lib/libMacportsLegacySupport.a:legacy-support
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set libemutls_s ${worksrcpath}/run_rustc/output-${rust_version}/prefix-s/lib/rustlib/${build_arch}-apple-darwin/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        file mkdir ${libemutls_s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        file copy -force {*}[glob ${libemutls}/*] ${libemutls_s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set legacy_lib_name MacportsLegacySupport
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set legacy_lib_path ${prefix}/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+legacysupport.use_static    yes
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    build.env-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    RUST_LEGACY_LIBRARY_NAME=${legacy_lib_name} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    RUST_LEGACY_LIBRARY_PATH=${legacy_lib_path}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set cxxflags        "${configure.cxxflags} ${configure.universal_cxxflags}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set ldflags         "${configure.ldflags} ${configure.universal_ldflags}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if { ${os.platform} eq "darwin" && ${os.major} <= [option legacysupport.newest_darwin_requires_legacy] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set cxxflags    "${cxxflags} [legacysupport::get_cpp_flags]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set ldflags     "${ldflags} [legacysupport::get_library_link_flags]"
</span> 
     post-patch {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # when script-overrides is used it never calls build.rs => help it to setup desire feature
</span>         set script [open "${worksrcpath}/script-overrides/stable-${rust_version}-macos/build_std.txt" a]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${script} "cargo:rustc-link-lib=${legacy_lib_name}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${script} "cargo:rustc-link-search=${legacy_lib_path}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts ${script} "cargo:rustc-link-lib=static=MacportsLegacySupport"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts ${script} "cargo:rustc-link-search=native=${prefix}/lib"
</span>         close ${script}
     }
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# mrustc produces huge C file with size near of 1Gb
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# and run a few clang to compile it in parallel requires significant amount of RAM.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# build.env-append    PARLEVEL=${build.jobs}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.env-append    CC=${configure.cc} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    CXX=${configure.cxx} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    CFG_DEFAULT_LINKER=${configure.cxx} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    "CXXFLAGS_EXTRA=${cxxflags}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    "LINKFLAGS_EXTRA=${ldflags}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    RUSTC_VERSION=${rust_version} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    MRUSTC_TARGET_VER=${rust_version_major}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Step 1: building mrustc, its libs and minicargo
 if {${subport} eq ${name}} {
     depends_lib-append \
                     port:zlib
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    build.env-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    PARLEVEL=${build.jobs}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     # Parallel building of libs may cause random failure
     # See: https://github.com/thepowersgang/mrustc/issues/225
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    build.target    -f minicargo.mk bin/mrustc bin/minicargo && \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ${build.cmd} -C tools/dump_hirfile && \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.target    -f minicargo.mk -j${build.jobs} bin/mrustc bin/minicargo && \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${build.cmd} -j${build.jobs} -C tools/dump_hirfile && \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${build.cmd} -j${build.jobs} -C tools/standalone_miri && \
</span>                     ${build.cmd} -j1 -f minicargo.mk LIBS
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     destroot {
         xinstall -d ${destroot}${prefix}/libexec/mrustc/bin
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        xinstall -m 0755 -W ${worksrcpath}/bin mrustc minicargo dump_hirfile \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -m 0755 -W ${worksrcpath}/bin mrustc minicargo dump_hirfile standalone_miri \
</span>             ${destroot}${prefix}/libexec/mrustc/bin
 
         # install all .rlib, .rlib.hir and .rlib.o to lib/
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -153,6 +174,12 @@ if {${subport} eq ${name}} {
</span>             xinstall -m 0644 $f ${destroot}${prefix}/libexec/mrustc/lib
         }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${os.platform} eq "darwin" && ${os.major} < 11} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach f [glob -directory ${libemutls}/ lib*] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                xinstall -m 0644 $f ${destroot}${prefix}/libexec/mrustc/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>         # create a wrapper to run mrustc without setup any ENV
         set mrustc [open "${destroot}${prefix}/bin/mrustc" w 0755]
         puts ${mrustc} "#!/bin/sh"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -161,7 +188,6 @@ if {${subport} eq ${name}} {
</span>         puts ${mrustc} "export MRUSTC_LIBDIR=\"\$\{MRUSTC_LIBDIR:-${prefix}/libexec/mrustc/lib\}\""
         puts ${mrustc} "${prefix}/libexec/mrustc/bin/mrustc \$@"
         close ${mrustc}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -169,17 +195,16 @@ if {${subport} eq ${name}} {
</span> subport mrustc-rust {
     PortGroup       openssl 1.0
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    version         ${rust_version}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    revision        0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    epoch           1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     description     Rust and cargo which was compiled by mrustc.
     long_description {*}${description}
 
     # cargo is too old to be used with 3.0
     openssl.branch  1.1
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    # mrustc produces huge C file with size near of 1Gb
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # and run a few clang to compile it in parallel requires significant amount of RAM.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # build.env-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #                 PARLEVEL=${build.jobs}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     depends_build-append \
                     bin:git:git \
                     path:bin/cmake:cmake \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -213,6 +238,15 @@ subport mrustc-rust {
</span>         depends_build-append port:python27
     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { ${os.platform} eq "darwin" && ${os.major} <= [option legacysupport.newest_darwin_requires_legacy] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # include flags is provided via C_INCLUDE_PATH and CX_INCLUDE_PATH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # never link LLVM's .a againt MacPorts' LegacySupport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach kind {EXE MODULE SHARED} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set cmake_opts  "${cmake_opts} CMAKE_${kind}_LINKER_FLAGS=[legacysupport::get_library_link_flags]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     build.env-append \
                     OPENSSL_DIR=[openssl::install_area] \
                     OPENSSL_INCLUDE_DIR=[openssl::include_dir] \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -227,18 +261,16 @@ subport mrustc-rust {
</span>     # So, it is:
     #  - Builds LLVM in parallel mode
     #  - Bootstrap everything in single mode
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    build.target    -f minicargo.mk rustc-${rust_version}-src/build/bin/llvm-config && \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.target    -f minicargo.mk PARLEVEL=${build.jobs} rustc-${rust_version}-src/build/bin/llvm-config && \
</span>                     ${build.cmd} -j1 -C run_rustc all
 
     destroot {
         xinstall -d ${destroot}${prefix}/libexec/${subport}/bin
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        xinstall -m 0755 ${worksrcpath}/output-${rust_version}/cargo \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -m 0755 -W ${worksrcpath}/run_rustc/output-${rust_version}/prefix/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cargo rustc_binary \
</span>             ${destroot}${prefix}/libexec/${subport}/bin
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        xinstall -m 0755 ${worksrcpath}/run_rustc/output-${rust_version}/prefix/bin/rustc_binary \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${destroot}${prefix}/libexec/${subport}/bin/rustc_binary
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>         set rustc [open "${destroot}${prefix}/libexec/${subport}/bin/rustc" w 0755]
         puts ${rustc} "#!/bin/sh"
         puts ${rustc} "# macOS never uses LD_LIBRARY_PATH, but rust uses it to find the path to its driver"
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/mrustc/files/0001-Introduced-support-of-MACPORTS_LEGACY_SUPPORT_.patch b/lang/mrustc/files/0001-Introduced-support-of-MACPORTS_LEGACY_SUPPORT_.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..cfd2fc4e7fe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/mrustc/files/0001-Introduced-support-of-MACPORTS_LEGACY_SUPPORT_.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,46 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 59461f577c356f685ff398bb9d8b5128dbb9fedd Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: "Kirill A. Korinsky" <kirill@korins.ky>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 8 Feb 2022 04:07:30 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 1/8] Introduced support of `MACPORTS_LEGACY_SUPPORT_*`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+MacPorts defines `MACPORTS_LEGACY_SUPPORT_ENABLED` with value `1` when
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+port should link against LegacySupport.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Rust doesn't care about include path, but
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+`MACPORTS_LEGACY_SUPPORT_LDFLAGS` is a good source path and name for a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+library to link.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ library/std/build.rs | 17 +++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 17 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/library/std/build.rs b/library/std/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a14ac63c7a..f481ffd176 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/library/std/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/library/std/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,6 +1,23 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use std::env;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fn main() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if env::var_os("MACPORTS_LEGACY_SUPPORT_ENABLED").map(|s| s.to_string_lossy() == "1").unwrap_or(false) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        let str = env::var_os("MACPORTS_LEGACY_SUPPORT_LDFLAGS")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            .map(|s| s.to_string_lossy().to_string())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            .expect("MACPORTS_LEGACY_SUPPORT_LDFLAGS shouldn't be empty");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        let (path, mut name) = str.strip_suffix(".a")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            .expect("MACPORTS_LEGACY_SUPPORT_LDFLAGS should be static library")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            .split_at(str.rfind("/").unwrap_or(0));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        name = name.strip_prefix("/lib").unwrap_or(name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if path.len() > 0 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            println!("cargo:rustc-link-search=native={}", path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if name.len() == 0 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            panic!("MACPORTS_LEGACY_SUPPORT_LDFLAGS should contains library name")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        println!("cargo:rustc-link-lib=static={}", name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     println!("cargo:rerun-if-changed=build.rs");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     let target = env::var("TARGET").expect("TARGET was not set");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if target.contains("freebsd") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.37.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/mrustc/files/0002-curl-sys-never-try-to-link-with-lib-darwin.patch b/lang/mrustc/files/0002-curl-sys-never-try-to-link-with-lib-darwin.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..4f8bccbe1df
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/mrustc/files/0002-curl-sys-never-try-to-link-with-lib-darwin.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,30 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 21bedbb14739809ba4ec247f22632ee3cca64c55 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: "Kirill A. Korinsky" <kirill@korins.ky>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Wed, 9 Feb 2022 05:47:47 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 2/8] `curl-sys`: never try to link with `/lib/darwin`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+`clang --print-search-dirs` may return `libraries: =` that leads to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+`/lib/darwin` which may leads to attempt to find `clang_rt.osx` inside
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+this wired path and which fails the build.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/curl-sys/build.rs | 4 +++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 3 insertions(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/curl-sys/build.rs b/vendor/curl-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 64df41e995..3213c66b33 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/curl-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/curl-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -532,7 +532,9 @@ fn macos_link_search_path() -> Option<String> {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for line in stdout.lines() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if line.contains("libraries: =") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             let path = line.split('=').skip(1).next()?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            return Some(format!("{}/lib/darwin", path));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if !path.is_empty() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return Some(format!("{}/lib/darwin", path));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.37.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/mrustc/files/0003-libgit2-sys-use-src-instead-.git-as-vendored-indicat.patch b/lang/mrustc/files/0003-libgit2-sys-use-src-instead-.git-as-vendored-indicat.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..dc047c7d3e5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/mrustc/files/0003-libgit2-sys-use-src-instead-.git-as-vendored-indicat.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,36 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 1e6d35d907ead0504a634082d5971b41dae67b7c Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: "Kirill A. Korinsky" <kirill@korins.ky>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 7 Feb 2022 01:37:13 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 3/8] `libgit2-sys`: use `src` instead `.git` as vendored
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ indicator
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+When someone vendored `libgit2-sys` he may exclude `.git` folder.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+When such things happened an attempt to build it may lead to error like:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+`fatal: not a git repository (or any of the parent directories): .git`.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The only way to fix it is using system's `libgit2` which may lead to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+`invalid version 0 on git_proxy_options; class=Invalid (3)` at some
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cases.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Backported as: https://github.com/rust-lang/git2-rs/pull/801
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/libgit2-sys/build.rs | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 1 insertion(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/libgit2-sys/build.rs b/vendor/libgit2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 76aa687cf6..9ea69e171c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/libgit2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/libgit2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -20,7 +20,7 @@ fn main() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if !Path::new("libgit2/.git").exists() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if !Path::new("libgit2/src").exists() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         let _ = Command::new("git")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             .args(&["submodule", "update", "--init", "libgit2"])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             .status();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.37.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/mrustc/files/0004-libssh2-sys-use-src-instead-.git-as-vendored-indicat.patch b/lang/mrustc/files/0004-libssh2-sys-use-src-instead-.git-as-vendored-indicat.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..995057715d7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/mrustc/files/0004-libssh2-sys-use-src-instead-.git-as-vendored-indicat.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,30 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From d06c3e59c01b9c15d35464f02d163d1ef07abe8f Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: "Kirill A. Korinsky" <kirill@korins.ky>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Thu, 10 Feb 2022 00:53:41 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 4/8] `libssh2-sys`: use `src` instead `.git` as vendored
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ indicator
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+When someone vendored `libssh-sys` he may exclude `.git` folder.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+When such things happened an attempt to build it may lead to error like:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+`fatal: not a git repository (or any of the parent directories): .git`.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/libssh2-sys/build.rs | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 1 insertion(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/libssh2-sys/build.rs b/vendor/libssh2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 215014864b..235bc16cd7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/libssh2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/libssh2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -32,7 +32,7 @@ fn main() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if !Path::new("libssh2/.git").exists() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if !Path::new("libssh2/src").exists() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         let _ = Command::new("git")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             .args(&["submodule", "update", "--init"])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             .status();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.37.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/mrustc/files/0005-libgit2-sys-recovered-LIBGIT2_SYS_USE_PKG_CONFIG.patch b/lang/mrustc/files/0005-libgit2-sys-recovered-LIBGIT2_SYS_USE_PKG_CONFIG.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..eca3a75b4c8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/mrustc/files/0005-libgit2-sys-recovered-LIBGIT2_SYS_USE_PKG_CONFIG.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,25 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From e16148f9bab7a71032bbf245c8fc1dcafa2efd62 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: "Kirill A. Korinsky" <kirill@korins.ky>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Thu, 10 Feb 2022 02:07:33 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 5/8] `libgit2-sys`: recovered `LIBGIT2_SYS_USE_PKG_CONFIG`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/libgit2-sys/build.rs | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 1 insertion(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/libgit2-sys/build.rs b/vendor/libgit2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 9ea69e171c..e30a09b44a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/libgit2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/libgit2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -10,7 +10,7 @@ fn main() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     let zlib_ng_compat = env::var("CARGO_FEATURE_ZLIB_NG_COMPAT").is_ok();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // To use zlib-ng in zlib-compat mode, we have to build libgit2 ourselves.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if !zlib_ng_compat {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if !zlib_ng_compat && env::var("LIBGIT2_SYS_USE_PKG_CONFIG").is_ok() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         let mut cfg = pkg_config::Config::new();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if let Ok(lib) = cfg.atleast_version("1.1.0").probe("libgit2") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             for include in &lib.include_paths {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.37.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/mrustc/files/0006-macOS-10.6-enforce-emulated-TLS-via-LLVM-Clang.patch b/lang/mrustc/files/0006-macOS-10.6-enforce-emulated-TLS-via-LLVM-Clang.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..6fe9f65edf3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/mrustc/files/0006-macOS-10.6-enforce-emulated-TLS-via-LLVM-Clang.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,439 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 9dc1c672f413a45c2db040afd2a875e4edf83872 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: "Kirill A. Korinsky" <kirill@korins.ky>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sat, 23 Jul 2022 14:09:34 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 6/8] macOS 10.6: enforce emulated TLS via LLVM/Clang
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Cargo.lock                                    |  1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ compiler/rustc_codegen_llvm/src/back/write.rs |  3 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ compiler/rustc_codegen_llvm/src/llvm/ffi.rs   |  1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ compiler/rustc_codegen_ssa/src/back/linker.rs |  4 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../src/back/symbol_export.rs                 | 47 +++++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../rustc_llvm/llvm-wrapper/PassWrapper.cpp   |  6 +++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ compiler/rustc_session/src/config.rs          |  3 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ compiler/rustc_span/src/symbol.rs             |  1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ compiler/rustc_target/src/spec/apple_base.rs  |  3 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ compiler/rustc_target/src/spec/mod.rs         |  6 +++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ library/std/Cargo.toml                        |  3 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ library/std/build.rs                          |  7 +++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ library/std/src/sys/unix/thread_local_dtor.rs |  9 ++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/object-0.22.0/src/write/macho.rs       |  2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/object-0.24.0/src/write/macho.rs       |  2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/object/src/write/macho.rs              |  2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/rustc-ap-rustc_session/src/config.rs   |  3 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/rustc-ap-rustc_span/src/symbol.rs      |  1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../src/spec/apple_base.rs                    |  3 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/rustc-ap-rustc_target/src/spec/mod.rs  |  6 +++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 20 files changed, 106 insertions(+), 7 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/Cargo.lock b/Cargo.lock
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index de110c55a4..5b2a7ec49f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/Cargo.lock
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Cargo.lock
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4915,6 +4915,7 @@ version = "0.0.0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dependencies = [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  "addr2line",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  "alloc",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "cc",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  "cfg-if 0.1.10",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  "compiler_builtins",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  "core",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/compiler/rustc_codegen_llvm/src/back/write.rs b/compiler/rustc_codegen_llvm/src/back/write.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5b4a187a1d..4b6959d8cb 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/compiler/rustc_codegen_llvm/src/back/write.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/compiler/rustc_codegen_llvm/src/back/write.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -188,6 +188,8 @@ pub fn target_machine_factory(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     let use_init_array =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         !sess.opts.debugging_opts.use_ctors_section.unwrap_or(sess.target.use_ctors_section);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    let enforce_emulated_tls = sess.target.enforce_emulated_tls;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     Arc::new(move |config: TargetMachineFactoryConfig| {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         let split_dwarf_file = config.split_dwarf_file.unwrap_or_default();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         let split_dwarf_file = CString::new(split_dwarf_file.to_str().unwrap()).unwrap();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -208,6 +210,7 @@ pub fn target_machine_factory(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 singlethread,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 asm_comments,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 emit_stack_size_section,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                enforce_emulated_tls,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 relax_elf_relocations,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 use_init_array,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 split_dwarf_file.as_ptr(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 9192325101..dc82e245ac 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2144,6 +2144,7 @@ extern "C" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         Singlethread: bool,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         AsmComments: bool,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         EmitStackSizeSection: bool,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        EnforceEmulatedTLS: bool,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         RelaxELFRelocations: bool,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         UseInitArray: bool,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         SplitDwarfFile: *const c_char,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/compiler/rustc_codegen_ssa/src/back/linker.rs b/compiler/rustc_codegen_ssa/src/back/linker.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 43ff664c3e..28454d5069 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/compiler/rustc_codegen_ssa/src/back/linker.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/compiler/rustc_codegen_ssa/src/back/linker.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1297,7 +1297,7 @@ fn exported_symbols(tcx: TyCtxt<'_>, crate_type: CrateType) -> Vec<String> {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     let export_threshold = symbol_export::crates_export_threshold(&[crate_type]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for &(symbol, level) in tcx.exported_symbols(LOCAL_CRATE).iter() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if level.is_below_threshold(export_threshold) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            symbols.push(symbol_export::symbol_name_for_instance_in_crate(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            symbols.push(symbol_export::symbol_name_for_instance_in_crate_maybe_emutls(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 tcx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 symbol,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 LOCAL_CRATE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1318,7 +1318,7 @@ fn exported_symbols(tcx: TyCtxt<'_>, crate_type: CrateType) -> Vec<String> {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                symbols.push(symbol_export::symbol_name_for_instance_in_crate(tcx, symbol, cnum));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                symbols.push(symbol_export::symbol_name_for_instance_in_crate_maybe_emutls(tcx, symbol, cnum));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/compiler/rustc_codegen_ssa/src/back/symbol_export.rs b/compiler/rustc_codegen_ssa/src/back/symbol_export.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b2ecc3b0f3..1110eb1b08 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/compiler/rustc_codegen_ssa/src/back/symbol_export.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/compiler/rustc_codegen_ssa/src/back/symbol_export.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -400,6 +400,53 @@ fn symbol_export_level(tcx: TyCtxt<'_>, sym_def_id: DefId) -> SymbolExportLevel
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++fn maybe_emutls<'tcx>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    tcx: TyCtxt<'tcx>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    def_id: DefId,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    name: String,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++) -> String {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if tcx.codegen_fn_attrs(def_id).flags.contains(CodegenFnAttrFlags::THREAD_LOCAL) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ["__emutls_v", &name].join(".").to_string()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/// This is the symbol name of the given instance instantiated in a specific crate.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/// with may starts from `__emutls_v.` prefix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++pub fn symbol_name_for_instance_in_crate_maybe_emutls<'tcx>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    tcx: TyCtxt<'tcx>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    symbol: ExportedSymbol<'tcx>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    instantiating_crate: CrateNum,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++) -> String {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if !tcx.sess.target.enforce_emulated_tls {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return symbol_name_for_instance_in_crate(tcx, symbol, instantiating_crate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    match symbol {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ExportedSymbol::NonGeneric(def_id) => {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            maybe_emutls(tcx, def_id, rustc_symbol_mangling::symbol_name_for_instance_in_crate(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                tcx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                Instance::mono(tcx, def_id),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                instantiating_crate,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ExportedSymbol::Generic(def_id, substs) => {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            maybe_emutls(tcx, def_id, rustc_symbol_mangling::symbol_name_for_instance_in_crate(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                tcx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                Instance::new(def_id, substs),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                instantiating_crate,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ExportedSymbol::DropGlue(ty) => rustc_symbol_mangling::symbol_name_for_instance_in_crate(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            tcx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            Instance::resolve_drop_in_place(tcx, ty),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            instantiating_crate,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ExportedSymbol::NoDefId(symbol_name) => symbol_name.to_string(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /// This is the symbol name of the given instance instantiated in a specific crate.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pub fn symbol_name_for_instance_in_crate<'tcx>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     tcx: TyCtxt<'tcx>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 3595e37cf9..87f44c04db 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -452,6 +452,7 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     bool Singlethread,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     bool AsmComments,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     bool EmitStackSizeSection,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    bool EnforceEmulatedTLS,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     bool RelaxELFRelocations,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     bool UseInitArray,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const char *SplitDwarfFile) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -500,6 +501,11 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Options.EmitStackSizeSection = EmitStackSizeSection;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (EnforceEmulatedTLS) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    Options.EmulatedTLS = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    Options.ExplicitEmulatedTLS = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   TargetMachine *TM = TheTarget->createTargetMachine(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       Trip.getTriple(), CPU, Feature, Options, RM, CM, OptLevel);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return wrap(TM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 2b547f8be9..1cce84320e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/compiler/rustc_session/src/config.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/compiler/rustc_session/src/config.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -833,6 +833,9 @@ fn default_configuration(sess: &Session) -> CrateConfig {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if sess.target.has_elf_tls {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         ret.insert((sym::target_thread_local, None));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if sess.target.enforce_emulated_tls {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ret.insert((sym::target_enforce_emulated_tls, None));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for &(i, align) in &[
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         (8, layout.i8_align.abi),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         (16, layout.i16_align.abi),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/compiler/rustc_span/src/symbol.rs b/compiler/rustc_span/src/symbol.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a31ab5b350..8de677c39c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/compiler/rustc_span/src/symbol.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/compiler/rustc_span/src/symbol.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1196,6 +1196,7 @@ symbols! {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         t32,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_arch,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_endian,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        target_enforce_emulated_tls,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_env,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_family,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_feature,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/compiler/rustc_target/src/spec/apple_base.rs b/compiler/rustc_target/src/spec/apple_base.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 8530db179d..f586c82953 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/compiler/rustc_target/src/spec/apple_base.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/compiler/rustc_target/src/spec/apple_base.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -31,7 +31,8 @@ pub fn opts(os: &str) -> TargetOptions {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         has_rpath: true,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         dll_suffix: ".dylib".to_string(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         archive_format: "darwin".to_string(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        has_elf_tls: version >= (10, 7),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        has_elf_tls: true,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        enforce_emulated_tls: version < (10, 7),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         abi_return_struct_as_int: true,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         emit_debug_gdb_scripts: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         eh_frame_header: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0f2aaeb533..206c8de174 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/compiler/rustc_target/src/spec/mod.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/compiler/rustc_target/src/spec/mod.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1136,6 +1136,9 @@ pub struct TargetOptions {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /// Flag indicating whether ELF TLS (e.g., #[thread_local]) is available for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /// this target.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pub has_elf_tls: bool,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /// Flag indicating whether emulated TLS should be enforced.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    pub enforce_emulated_tls: bool,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // This is mainly for easy compatibility with emscripten.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // If we give emcc .o files that are actually .bc files it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // will 'just work'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1336,6 +1339,7 @@ impl Default for TargetOptions {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             main_needs_argc_argv: true,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             allow_asm: true,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             has_elf_tls: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            enforce_emulated_tls: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             obj_is_bitcode: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             forces_embed_bitcode: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             bitcode_llvm_cmdline: String::new(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1837,6 +1841,7 @@ impl Target {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(allow_asm, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(main_needs_argc_argv, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(has_elf_tls, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        key!(enforce_emulated_tls, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(obj_is_bitcode, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(forces_embed_bitcode, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(bitcode_llvm_cmdline);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2091,6 +2096,7 @@ impl ToJson for Target {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(allow_asm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(main_needs_argc_argv);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(has_elf_tls);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        target_option_val!(enforce_emulated_tls);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(obj_is_bitcode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(forces_embed_bitcode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(bitcode_llvm_cmdline);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/library/std/Cargo.toml b/library/std/Cargo.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 415d874c7f..2699f818f3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/library/std/Cargo.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/library/std/Cargo.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -36,6 +36,9 @@ features = ['read_core', 'elf', 'macho', 'pe', 'unaligned', 'archive']
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ [dev-dependencies]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rand = "0.7"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++[build-dependencies]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++cc = "1.0.68"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ [target.'cfg(any(all(target_arch = "wasm32", not(target_os = "emscripten")), all(target_vendor = "fortanix", target_env = "sgx")))'.dependencies]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dlmalloc = { version = "0.2.1", features = ['rustc-dep-of-std'] }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/library/std/build.rs b/library/std/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f481ffd176..c74758b752 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/library/std/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/library/std/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -18,6 +18,13 @@ fn main() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         println!("cargo:rustc-link-lib=static={}", name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if cfg!(target_os = "macos") && cfg!(target_enforce_emulated_tls) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        let mut emutls_cfg = cc::Build::new();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        emutls_cfg.warnings(false);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        emutls_cfg.file("../../src/llvm-project/compiler-rt/lib/builtins/emutls.c")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           .compile("emutls");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     println!("cargo:rerun-if-changed=build.rs");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     let target = env::var("TARGET").expect("TARGET was not set");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if target.contains("freebsd") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/library/std/src/sys/unix/thread_local_dtor.rs b/library/std/src/sys/unix/thread_local_dtor.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index c3f410353b..602e6ff325 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/library/std/src/sys/unix/thread_local_dtor.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/library/std/src/sys/unix/thread_local_dtor.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -57,11 +57,19 @@ pub unsafe fn register_dtor(t: *mut u8, dtor: unsafe extern "C" fn(*mut u8)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pub unsafe fn register_dtor(t: *mut u8, dtor: unsafe extern "C" fn(*mut u8)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     use crate::cell::Cell;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     use crate::ptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    use crate::sys_common::thread_local_key::StaticKey;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    #[thread_local]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    #[cfg(target_enforce_emulated_tls)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    static STATIC_DTORS: StaticKey = StaticKey::new(Some(run_dtors));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     #[thread_local]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     static REGISTERED: Cell<bool> = Cell::new(false);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if !REGISTERED.get() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        #[cfg(not(target_enforce_emulated_tls))]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         _tlv_atexit(run_dtors, ptr::null_mut());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        #[cfg(target_enforce_emulated_tls)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        DTORS.set(ptr::null_mut());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         REGISTERED.set(true);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -75,6 +83,7 @@ pub unsafe fn register_dtor(t: *mut u8, dtor: unsafe extern "C" fn(*mut u8)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     extern "C" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        #[cfg(not(target_enforce_emulated_tls))]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         fn _tlv_atexit(dtor: unsafe extern "C" fn(*mut u8), arg: *mut u8);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/object-0.22.0/src/write/macho.rs b/vendor/object-0.22.0/src/write/macho.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index abecc93818..892d955612 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/object-0.22.0/src/write/macho.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/object-0.22.0/src/write/macho.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -110,7 +110,7 @@ impl Object {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /// If `symbol_id` is not for a TLS variable, then it is returned unchanged.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pub(crate) fn macho_add_thread_var(&mut self, symbol_id: SymbolId) -> SymbolId {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         let symbol = self.symbol_mut(symbol_id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if symbol.kind != SymbolKind::Tls {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if symbol.kind != SymbolKind::Tls || cfg!(target_enforce_emulated_tls) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             return symbol_id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/object-0.24.0/src/write/macho.rs b/vendor/object-0.24.0/src/write/macho.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 24336130b5..c3310fde40 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/object-0.24.0/src/write/macho.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/object-0.24.0/src/write/macho.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -110,7 +110,7 @@ impl Object {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /// If `symbol_id` is not for a TLS variable, then it is returned unchanged.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pub(crate) fn macho_add_thread_var(&mut self, symbol_id: SymbolId) -> SymbolId {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         let symbol = self.symbol_mut(symbol_id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if symbol.kind != SymbolKind::Tls {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if symbol.kind != SymbolKind::Tls || cfg!(target_enforce_emulated_tls) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             return symbol_id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/object/src/write/macho.rs b/vendor/object/src/write/macho.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d102da3dea..7b36e49533 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/object/src/write/macho.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/object/src/write/macho.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -110,7 +110,7 @@ impl Object {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /// If `symbol_id` is not for a TLS variable, then it is returned unchanged.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pub(crate) fn macho_add_thread_var(&mut self, symbol_id: SymbolId) -> SymbolId {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         let symbol = self.symbol_mut(symbol_id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if symbol.kind != SymbolKind::Tls {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if symbol.kind != SymbolKind::Tls || cfg!(target_enforce_emulated_tls) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             return symbol_id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/rustc-ap-rustc_session/src/config.rs b/vendor/rustc-ap-rustc_session/src/config.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 52f8b536f4..678d05ed90 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/rustc-ap-rustc_session/src/config.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/rustc-ap-rustc_session/src/config.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -832,6 +832,9 @@ fn default_configuration(sess: &Session) -> CrateConfig {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if sess.target.has_elf_tls {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         ret.insert((sym::target_thread_local, None));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if sess.target.enforce_emulated_tls {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ret.insert((sym::target_enforce_emulated_tls, None));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for &(i, align) in &[
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         (8, layout.i8_align.abi),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         (16, layout.i16_align.abi),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/rustc-ap-rustc_span/src/symbol.rs b/vendor/rustc-ap-rustc_span/src/symbol.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 46ef308cbf..6fbfa4292e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/rustc-ap-rustc_span/src/symbol.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/rustc-ap-rustc_span/src/symbol.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1195,6 +1195,7 @@ symbols! {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         t32,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_arch,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_endian,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        target_enforce_emulated_tls,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_env,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_family,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_feature,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/rustc-ap-rustc_target/src/spec/apple_base.rs b/vendor/rustc-ap-rustc_target/src/spec/apple_base.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 45c5c1a16e..b94c04987d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/rustc-ap-rustc_target/src/spec/apple_base.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/rustc-ap-rustc_target/src/spec/apple_base.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -30,7 +30,8 @@ pub fn opts(os: &str) -> TargetOptions {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         has_rpath: true,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         dll_suffix: ".dylib".to_string(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         archive_format: "darwin".to_string(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        has_elf_tls: version >= (10, 7),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        has_elf_tls: true,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        enforce_emulated_tls: version < (10, 7),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         abi_return_struct_as_int: true,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         emit_debug_gdb_scripts: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         eh_frame_header: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/rustc-ap-rustc_target/src/spec/mod.rs b/vendor/rustc-ap-rustc_target/src/spec/mod.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f1bd8ff237..137da31496 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/rustc-ap-rustc_target/src/spec/mod.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/rustc-ap-rustc_target/src/spec/mod.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1129,6 +1129,9 @@ pub struct TargetOptions {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /// Flag indicating whether ELF TLS (e.g., #[thread_local]) is available for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /// this target.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pub has_elf_tls: bool,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /// Flag indicating whether emulated TLS should be enforced.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    pub enforce_emulated_tls: bool,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // This is mainly for easy compatibility with emscripten.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // If we give emcc .o files that are actually .bc files it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // will 'just work'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1329,6 +1332,7 @@ impl Default for TargetOptions {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             main_needs_argc_argv: true,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             allow_asm: true,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             has_elf_tls: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            enforce_emulated_tls: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             obj_is_bitcode: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             forces_embed_bitcode: false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             bitcode_llvm_cmdline: String::new(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1830,6 +1834,7 @@ impl Target {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(allow_asm, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(main_needs_argc_argv, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(has_elf_tls, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        key!(enforce_emulated_tls, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(obj_is_bitcode, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(forces_embed_bitcode, bool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         key!(bitcode_llvm_cmdline);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2084,6 +2089,7 @@ impl ToJson for Target {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(allow_asm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(main_needs_argc_argv);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(has_elf_tls);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        target_option_val!(enforce_emulated_tls);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(obj_is_bitcode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(forces_embed_bitcode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         target_option_val!(bitcode_llvm_cmdline);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.37.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/mrustc/files/0007-macOS-10.6-Fix-pthread_cond_destroy.patch b/lang/mrustc/files/0007-macOS-10.6-Fix-pthread_cond_destroy.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..4c1929f50bd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/mrustc/files/0007-macOS-10.6-Fix-pthread_cond_destroy.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,34 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From f201284935125d2e12666b56530fbc8be5010de4 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: "Kirill A. Korinsky" <kirill@korins.ky>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Thu, 17 Feb 2022 15:12:11 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 7/8] macOS 10.6: Fix `pthread_cond_destroy`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+macOS 10.7 returns `EINVAL` for `pthread_cond_destroy()`.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ library/std/src/sys/unix/condvar.rs | 4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 2 insertions(+), 2 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/library/std/src/sys/unix/condvar.rs b/library/std/src/sys/unix/condvar.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e38f91af9f..c03c22b2cf 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/library/std/src/sys/unix/condvar.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/library/std/src/sys/unix/condvar.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -157,14 +157,14 @@ impl Condvar {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     #[inline]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    #[cfg(not(target_os = "dragonfly"))]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    #[cfg(all(not(target_os = "dragonfly"), not(target_os = "macos")))]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pub unsafe fn destroy(&self) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         let r = libc::pthread_cond_destroy(self.inner.get());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         debug_assert_eq!(r, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     #[inline]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    #[cfg(target_os = "dragonfly")]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    #[cfg(any(target_os = "dragonfly", target_os = "macos"))]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pub unsafe fn destroy(&self) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         let r = libc::pthread_cond_destroy(self.inner.get());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         // On DragonFly pthread_cond_destroy() returns EINVAL if called on
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.37.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/mrustc/files/0008-macOS-10.6-Switch-to-OpenSSL.patch b/lang/mrustc/files/0008-macOS-10.6-Switch-to-OpenSSL.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..fefb478050d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/mrustc/files/0008-macOS-10.6-Switch-to-OpenSSL.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,77 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 1713faf9ef2750e690e134f0cb51796b87f7b50f Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: "Kirill A. Korinsky" <kirill@korins.ky>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sat, 5 Feb 2022 23:21:39 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 8/8] macOS 10.6: Switch to OpenSSL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+macOS before 10.7 requires to use OpenSSL because a lot of things is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+simple missed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/crypto-hash/Cargo.toml | 4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/crypto-hash/src/lib.rs | 8 ++++----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vendor/libgit2-sys/build.rs   | 2 --
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 3 files changed, 6 insertions(+), 8 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/crypto-hash/Cargo.toml b/vendor/crypto-hash/Cargo.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 2ae218e617..37cd476d80 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/crypto-hash/Cargo.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/crypto-hash/Cargo.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -23,9 +23,9 @@ license = "MIT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ repository = "https://github.com/malept/crypto-hash"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ [dependencies.hex]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ version = "0.3"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[target."cfg(any(target_os = \"macos\", target_os = \"ios\"))".dependencies.commoncrypto]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++[target."cfg(any(target_os = \"ios\"))".dependencies.commoncrypto]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ version = "0.2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[target."cfg(not(any(target_os = \"windows\", target_os = \"macos\", target_os = \"ios\")))".dependencies.openssl]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++[target."cfg(not(any(target_os = \"windows\", target_os = \"ios\")))".dependencies.openssl]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ version = "0.10"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ [target."cfg(target_os = \"windows\")".dependencies.winapi]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ version = "0.3"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/crypto-hash/src/lib.rs b/vendor/crypto-hash/src/lib.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index fd553ba528..957756c21c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/crypto-hash/src/lib.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/crypto-hash/src/lib.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -43,23 +43,23 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #![warn(missing_docs)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#[cfg(any(target_os = "macos", target_os = "ios"))]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#[cfg(target_os = "ios")]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern crate commoncrypto;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern crate hex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#[cfg(not(any(target_os = "macos", target_os = "ios", target_os = "windows")))]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#[cfg(not(any(target_os = "ios", target_os = "windows")))]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern crate openssl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #[cfg(target_os = "windows")]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern crate winapi;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use std::io::Write;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#[cfg(any(target_os = "macos", target_os = "ios"))]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#[cfg(target_os = "ios")]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #[path = "imp/commoncrypto.rs"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mod imp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #[cfg(target_os = "windows")]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #[path = "imp/cryptoapi.rs"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mod imp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#[cfg(not(any(target_os = "macos", target_os = "ios", target_os = "windows")))]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#[cfg(not(any(target_os = "ios", target_os = "windows")))]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #[path = "imp/openssl.rs"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mod imp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/vendor/libgit2-sys/build.rs b/vendor/libgit2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e30a09b44a..a5af5eec64 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/vendor/libgit2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/vendor/libgit2-sys/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -136,8 +136,6 @@ fn main() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if windows {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             features.push_str("#define GIT_WINHTTP 1\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        } else if target.contains("apple") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            features.push_str("#define GIT_SECURE_TRANSPORT 1\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             features.push_str("#define GIT_OPENSSL 1\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if let Some(path) = env::var_os("DEP_OPENSSL_INCLUDE") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.37.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span></pre><pre style='margin:0'>

</pre>