[BACK]Return to gcc-wrap CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / pkgsrc / lang / rust / files

File: [cvs.NetBSD.org] / pkgsrc / lang / rust / files / gcc-wrap (download)

Revision 1.4, Fri Dec 21 23:12:34 2018 UTC (2 years, 11 months ago) by he
Branch: MAIN
CVS Tags: pkgsrc-2021Q3-base, pkgsrc-2021Q3, pkgsrc-2021Q2-base, pkgsrc-2021Q2, pkgsrc-2021Q1-base, pkgsrc-2021Q1, pkgsrc-2020Q4-base, pkgsrc-2020Q4, pkgsrc-2020Q3-base, pkgsrc-2020Q3, pkgsrc-2020Q2-base, pkgsrc-2020Q2, pkgsrc-2020Q1-base, pkgsrc-2020Q1, pkgsrc-2019Q4-base, pkgsrc-2019Q4, pkgsrc-2019Q3-base, pkgsrc-2019Q3, pkgsrc-2019Q2-base, pkgsrc-2019Q2, pkgsrc-2019Q1-base, pkgsrc-2019Q1, pkgsrc-2018Q4-base, pkgsrc-2018Q4, HEAD
Changes since 1.3: +3 -0 lines

Upgrade rust to version 1.31.1.

Pkgsrc changes:
 * Sadly, I had to reinstate the "make tar files" rust code to make
   it possible to build cross-compiled bootstrap kits.
 * Add an adjustable "BUILD_TARGET", "dist" for cross-building
   a bootstrap kit, "build" for a normal native build.
 * New bootstrap kits built for NetBSD/powerpc, NetBSD/earmv7hf,
   and NetBSD/sparc64 version 1.31.1.
 * gcc-wrap script amended to also drop -Wl,--enable-new-dtags
   (so it could be used outside pkgsrc)
 * Worked around use of AtomicU64 in release build tool (ugly band-aid patch).
   Some platforms lack support for that type and associated operations.

Upstream changes:
 - [Fix Rust failing to build on `powerpc-unknown-netbsd`][56562]
 - [Fix broken go-to-definition in RLS][rls/1171]
 - [Fix infinite loop on hover in RLS][rls/1170]

[56562]: https://github.com/rust-lang/rust/pull/56562
[rls/1171]: https://github.com/rust-lang/rls/issues/1171
[rls/1170]: https://github.com/rust-lang/rls/pull/1170

#! /bin/sh

# Root of targets tools + dest directories
# or unset to default to a native build.

# This script assumes target tools in $root/tools 
# and target's destdir in $root/dest, the result of a NetBSD build.sh.
# ...or the native root, when we don't cross-compile
root=${CROSS_ROOT:-/}

native=false
if [ $root = "/" ]; then
	native=true
else
	# What's the tools/bin prefix (if we're cross-building)?
	gnuarch=${GNU_CROSS_TARGET:?}
fi

# Who are we a wrapper for? (Typically either gcc or c++)
who=$(basename $0 | sed -e 's/-wrap$//')

args=""

# May need to add $linkadd before first -l or fist -L
linkadd="-Wl,--sysroot=${root}/dest"
# (perhaps this is overly cautious, other adjustments we do
# below may be sufficient...)
# Lib directories to ensure we search and have in run-path
libs="/lib /usr/lib /usr/pkg/lib"

for d in $libs; do
	if ! $native; then
		linkadd="$linkadd -L=$d"
		linkadd="$linkadd -Wl,-rpath-link=${root}/dest/$d"
	fi
	# Run-path is for when we execute on the target,
	# so no $root prefix
	linkadd="$linkadd -Wl,-rpath,$d"
done

# ...and add a placeholder so we can tweak RPATH with chrpath,
# since chrpath can't extend the length of the run path
# (This may also not be needed, we use LD_LIBRARY_PATH instead)
placeholder="placeholder-$(date | openssl dgst -sha1 | \
	awk '{ print $2 }')"
linkadd="$linkadd -Wl,-rpath,/$placeholder"
# the / is a sneaky attempt to let it past cwrapper...

# More debugging
linkadd="$linkadd -Wl,--verbose"

linktweaked=false

# Step through args, tweak where required
set -- "$@"
while [ $# -gt 0 ]; do
	case "$1" in
# Insert = at the front of -isystem args.
# This is to get --sysroot prepended, so that
# we pick up the correct set of header files.
# (I thought this wasn't reqired, but apparently it is...)
		-isystem)
			shift
			args="$args -isystem =$1"
			;;
# Also doctor -I directives of known paths and
# redirect them to the --sysroot.
		-I/usr/include)
			args="$args -I=/usr/include"
			;;
		-I/usr/include/krb5)
			args="$args -I=/usr/include/krb5"
			;;
		-I/usr/pkg/include)
			args="$args -I=/usr/pkg/include"
			;;
		-I)
			if [ $2 = "/usr/include" ]; then
				args="$args -I=/usr/include"
				shift
			elif [ $2 = "/usr/include/krb5" ]; then
				args="$args -I=/usr/include/krb5"
				shift
			elif [ $2 = "/usr/pkg/include" ]; then
				args="$args -I=/usr/pkg/include"
				shift
			else
				args="$args -I"
			fi
			;;
		-l*)
			if ! $linktweaked; then
				args="$args $linkadd"
				linktweaked=true
			fi
			args="$args $1"
			;;
		-L)
			if ! $linktweaked; then
				args="$args $linkadd"
				linktweaked=true
			fi
			shift
			tweaked=false
			# redirect these to -Wl,--sysroot
			for d in /lib /usr/lib /usr/pkg/lib; do
				if [ $1 = $d ]; then
					args="$args -L =$d"
					tweaked=true
				fi
			done
			# Not redirected?  If so we need to add
			if ! $tweaked; then
				args="$args -L $1"
			fi
			;;
			
		-L/lib)
			if ! $linktweaked; then
				args="$args $linkadd"
				linktweaked=true
			fi
			args="$args -L=/lib"
			;;
		-L/usr/lib)
			if ! $linktweaked; then
				args="$args $linkadd"
				linktweaked=true
			fi
			args="$args -L=/usr/lib"
			;;
		-L/usr/pkg/lib)
			if ! $linktweaked; then
				args="$args $linkadd"
				linktweaked=true
			fi
			args="$args -L=/usr/pkg/lib"
			;;
		-Wl,--enable-new-dtags)
			# ignore
			;;
		*)
			args="$args $1"
			;;
	esac
	shift
done

if $native; then
	# Try to avoid cwrappers, which does "undocumented magic"
	# by invoking the compiler "directly".
	cmd="/usr/bin/${who} $args"
else
	cmd="${root}/tools/bin/${gnuarch}-${who} \
		--sysroot=${root}/dest \
		$args"
fi

# Cannot echo to stdout, messes up e.g. "gcc -print-prog-name=ld" output...
#echo $cmd >&2
exec $cmd