Index: Mk/Uses/cargo.mk =================================================================== --- Mk/Uses/cargo.mk +++ Mk/Uses/cargo.mk @@ -74,7 +74,8 @@ RUSTFLAGS+= ${CFLAGS:M-mcpu=*:S/-mcpu=/-C target-cpu=/} .endif -.if ${ARCH} == powerpc64 +# XXX OSVERSION +.if ${ARCH} == powerpc64 && ${OSVERSION} < 1300036 USE_GCC?= yes .endif Index: lang/rust/Makefile =================================================================== --- lang/rust/Makefile +++ lang/rust/Makefile @@ -87,11 +87,15 @@ .include -.if ${ARCH} == powerpc64 +.if ${ARCH} == powerpc64 && ${OSVERSION} < 1300036 # The bootstrap is hardcoded to use gcc8 # but we can build with a newer or older compiler as provided by USE_GCC=yes BUILD_DEPENDS+= gcc8:lang/gcc8 USE_GCC= yes +EXTRA_PATCHES= ${PATCHDIR}/extra-patch-ppc64-gcc +RUSTC_BOOTSTRAP= ${BOOTSTRAPS_DATE_${ARCH}:U${BOOTSTRAPS_DATE}}/rustc-${RUST_BOOTSTRAP_VERSION_${ARCH}:U${RUST_BOOTSTRAP_VERSION}}-${RUST_TARGET}-elfv1.tar.gz +RUST_STD_BOOTSTRAP= ${BOOTSTRAPS_DATE_${ARCH}:U${BOOTSTRAPS_DATE}}/rust-std-${RUST_BOOTSTRAP_VERSION_${ARCH}:U${RUST_BOOTSTRAP_VERSION}}-${RUST_TARGET}-elfv1.tar.gz +CARGO_BOOTSTRAP= ${BOOTSTRAPS_DATE_${ARCH}:U${BOOTSTRAPS_DATE}}/cargo-${CARGO_BOOTSTRAP_VERSION_${ARCH}:U${CARGO_BOOTSTRAP_VERSION}}-${RUST_TARGET}-elfv1.tar.gz .endif .if ${OPSYS} == FreeBSD && ${ARCH} == aarch64 && \ @@ -142,6 +146,15 @@ @${REINPLACE_CMD} -e \ 's/"files":{[^}]*}/"files":{}/' \ ${CARGO_VENDOR_DIR}/*/.cargo-checksum.json +# XXX OSVERSION +.if ${OSVERSION} >= 1300036 + @${REINPLACE_CMD} -e \ + 's|Endian::Big => ELFv1|Endian::Big => ELFv2|' \ + ${WRKSRC}/src/librustc_target/abi/call/powerpc64.rs + @${REINPLACE_CMD} -e \ + 's|powerpc64-unknown-freebsd|powerpc64-unknown-freebsd13.0|' \ + ${WRKSRC}/src/librustc_target/spec/powerpc64_unknown_freebsd.rs +.endif post-patch-SOURCES-off: # Mimic tools in config.toml with just src excluded Index: lang/rust/distinfo =================================================================== --- lang/rust/distinfo +++ lang/rust/distinfo @@ -37,3 +37,9 @@ SIZE (rust/2019-05-14/rust-std-1.34.0-powerpc64-unknown-freebsd.tar.gz) = 72555046 SHA256 (rust/2019-05-14/cargo-0.35.0-powerpc64-unknown-freebsd.tar.gz) = fd547c834fd8fba61513e5e4741428dac85b129ae49939fe774b45d3e38a9863 SIZE (rust/2019-05-14/cargo-0.35.0-powerpc64-unknown-freebsd.tar.gz) = 6676349 +SHA256 (rust/2019-05-14/rustc-1.34.0-powerpc64-unknown-freebsd-elfv1.tar.gz) = 3ad25cf511292383d8abf7268330f5d8d0b1d3019bd88c532c67e7898acd754c +SIZE (rust/2019-05-14/rustc-1.34.0-powerpc64-unknown-freebsd-elfv1.tar.gz) = 69066288 +SHA256 (rust/2019-05-14/rust-std-1.34.0-powerpc64-unknown-freebsd-elfv1.tar.gz) = d14847c3aeb3bc85727b5178bb5b3bbedddec15020c19174d2f08fa97fbe9720 +SIZE (rust/2019-05-14/rust-std-1.34.0-powerpc64-unknown-freebsd-elfv1.tar.gz) = 72555046 +SHA256 (rust/2019-05-14/cargo-0.35.0-powerpc64-unknown-freebsd-elfv1.tar.gz) = fd547c834fd8fba61513e5e4741428dac85b129ae49939fe774b45d3e38a9863 +SIZE (rust/2019-05-14/cargo-0.35.0-powerpc64-unknown-freebsd-elfv1.tar.gz) = 6676349 Index: lang/rust/files/extra-patch-ppc64-gcc =================================================================== --- lang/rust/files/extra-patch-ppc64-gcc +++ lang/rust/files/extra-patch-ppc64-gcc @@ -12,3 +12,16 @@ if let Some(s) = llvm_static_stdcpp { assert!(!cxxflags.contains("stdlib=libc++")); let path = PathBuf::from(s); +--- src/bootstrap/native.rs.orig 2019-05-22 05:39:52 UTC ++++ src/bootstrap/native.rs +@@ -218,6 +210,10 @@ impl Step for Llvm { + } + } + ++ if target == "powerpc64-unknown-freebsd" { ++ cfg.define("CMAKE_EXE_LINKER_FLAGS", "-Wl,-rpath=/usr/local/lib/%CC% -L/usr/local/lib/%CC%"); ++ } ++ + // http://llvm.org/docs/HowToCrossCompileLLVM.html + if target != builder.config.build && !emscripten { ++ builder.ensure(Llvm { Index: lang/rust/files/patch-llvm =================================================================== --- lang/rust/files/patch-llvm +++ lang/rust/files/patch-llvm @@ -0,0 +1,34 @@ +--- src/llvm-project/clang/lib/Basic/Targets/PPC.h 2019-04-02 21:19:15.000000000 +0200 ++++ src/llvm-project/clang/lib/Basic/Targets/PPC.h 2019-06-28 09:25:10.796440000 +0200 +@@ -374,6 +374,8 @@ class LLVM_LIBRARY_VISIBILITY PPC64TargetInfo : public + case llvm::Triple::FreeBSD: + LongDoubleWidth = LongDoubleAlign = 64; + LongDoubleFormat = &llvm::APFloat::IEEEdouble(); ++ if (Triple.getOSMajorVersion() >= 13) ++ ABI = "elfv2"; + break; + default: + break; +--- src/llvm-project/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp 2019-04-02 21:19:15.000000000 +0200 ++++ src/llvm-project/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp 2019-06-28 09:24:21.660383000 +0200 +@@ -195,6 +195,20 @@ static PPCTargetMachine::PPCABI computeTargetABI(const + if (TT.isMacOSX()) + return PPCTargetMachine::PPC_ABI_UNKNOWN; + ++ if (TT.isOSFreeBSD()) { ++ switch (TT.getArch()) { ++ case Triple::ppc64le: ++ case Triple::ppc64: ++ if (TT.getOSMajorVersion() >= 13) ++ return PPCTargetMachine::PPC_ABI_ELFv2; ++ else ++ return PPCTargetMachine::PPC_ABI_ELFv1; ++ case Triple::ppc: ++ default: ++ return PPCTargetMachine::PPC_ABI_UNKNOWN; ++ } ++ } ++ + switch (TT.getArch()) { + case Triple::ppc64le: + return PPCTargetMachine::PPC_ABI_ELFv2; Index: lang/rust/files/patch-src_bootstrap_native.rs =================================================================== --- lang/rust/files/patch-src_bootstrap_native.rs +++ lang/rust/files/patch-src_bootstrap_native.rs @@ -24,17 +24,6 @@ let _folder = builder.fold_output(|| "llvm"); let descriptor = if emscripten { "Emscripten " } else { "" }; -@@ -218,6 +210,10 @@ impl Step for Llvm { - } - } - -+ if target == "powerpc64-unknown-freebsd" { -+ cfg.define("CMAKE_EXE_LINKER_FLAGS", "-Wl,-rpath=/usr/local/lib/%CC% -L/usr/local/lib/%CC%"); -+ } -+ - // http://llvm.org/docs/HowToCrossCompileLLVM.html - if target != builder.config.build && !emscripten { - builder.ensure(Llvm { @@ -283,9 +279,7 @@ impl Step for Llvm { cfg.build(); Index: lang/rust/files/patch-src_librustc__llvm_build.rs =================================================================== --- lang/rust/files/patch-src_librustc__llvm_build.rs +++ lang/rust/files/patch-src_librustc__llvm_build.rs @@ -1,14 +0,0 @@ ---- src/librustc_llvm/build.rs.orig 2019-04-08 12:42:31 UTC -+++ src/librustc_llvm/build.rs -@@ -254,7 +254,10 @@ fn main() { - }; - - // C++ runtime library -- if !target.contains("msvc") { -+ if target == "powerpc64-unknown-freebsd" { -+ println!("cargo:rustc-link-search=native=/usr/local/lib/%CC%"); -+ println!("cargo:rustc-link-lib=static=stdc++"); -+ } else if !target.contains("msvc") { - if let Some(s) = llvm_static_stdcpp { - assert!(!cxxflags.contains("stdlib=libc++")); - let path = PathBuf::from(s);