mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
bab7b73b85
If there is any x86 binary in the chain of parent processes from the current one, then uname -m prints x86_64 and clang defaults to building x86_64 binaries. Detect arm64 using the kernel version and force building an arm64 toolchain instead of perpetuating x86. This is particularly important when the user shell is rc, which has been built for x86, because then rebuilding under rc continues to use x86.
207 lines
4.8 KiB
Text
Executable file
207 lines
4.8 KiB
Text
Executable file
#!/bin/sh
|
|
|
|
dobuild=true
|
|
doinstall=true
|
|
|
|
case "x$1" in
|
|
x)
|
|
;;
|
|
x-b)
|
|
dobuild=true
|
|
doinstall=false
|
|
;;
|
|
x-c)
|
|
dobuild=false
|
|
doinstall=true
|
|
;;
|
|
x-r)
|
|
shift
|
|
PLAN9_TARGET=$1 export PLAN9_TARGET
|
|
;;
|
|
*)
|
|
echo 'usage: INSTALL [-b | -c] [-r path]' 1>&2
|
|
exit 1
|
|
esac
|
|
|
|
echo "+ Mailing list: https://groups.google.com/group/plan9port-dev"
|
|
echo "+ Issue tracker: https://github.com/9fans/plan9port/issues/"
|
|
echo "+ Submitting changes: https://github.com/9fans/plan9port/pulls"
|
|
echo " "
|
|
echo "* Resetting $PLAN9/config"
|
|
rm -f config
|
|
|
|
PLAN9=`pwd` export PLAN9
|
|
PATH=/bin:/usr/bin:$PLAN9/bin:$PATH export PATH
|
|
case `uname` in
|
|
SunOS)
|
|
awk=nawk
|
|
;;
|
|
DragonFly|*BSD)
|
|
case `cc -v 2>&1` in
|
|
*clang*)
|
|
echo "CC9=clang" >> $PLAN9/config
|
|
;;
|
|
*gcc*)
|
|
echo "CC9=gcc" >> $PLAN9/config
|
|
;;
|
|
esac
|
|
echo "* Running on" `uname`", adjusting linker flags"
|
|
case `uname` in
|
|
OpenBSD)
|
|
echo "LDFLAGS='-L/usr/X11R6/lib -pthread'" >> $PLAN9/config
|
|
;;
|
|
NetBSD)
|
|
echo "LDFLAGS='-L/usr/X11R7/lib -pthread'" >> $PLAN9/config
|
|
;;
|
|
*)
|
|
echo "LDFLAGS='-L/usr/local/lib -pthread'" >> $PLAN9/config
|
|
;;
|
|
esac
|
|
echo "CFLAGS='-pthread'" >> $PLAN9/config
|
|
awk=awk
|
|
;;
|
|
*)
|
|
awk=awk
|
|
;;
|
|
esac
|
|
|
|
(
|
|
if [ `uname` = SunOS ]; then
|
|
# On Solaris x86, uname -p cannot be trusted.
|
|
echo "* Running on Solaris: checking architecture..."
|
|
case "$(isainfo -n)" in
|
|
*amd64*)
|
|
echo " x86-64 found; using gcc."
|
|
echo "CC9=gcc" >>$PLAN9/config # defaults to gcc on Solaris/amd64
|
|
;;
|
|
*i386*)
|
|
echo " i386 found; using gcc."
|
|
echo "CC9=gcc" >>$PLAN9/config # defaults to gcc on Solaris/i386
|
|
;;
|
|
*sparc*)
|
|
echo " Sparc found."
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if [ `uname` = Darwin ]; then
|
|
export NPROC=$(sysctl hw.ncpu | sed 's/hw.ncpu: //')
|
|
# On Darwin, uname -m -p cannot be trusted.
|
|
echo "* Running on Darwin..."
|
|
rm -f ./a.out
|
|
if ! xcrun --sdk macosx clang lib/darwin-main.c >/dev/null 2>&1; then
|
|
echo "Cannot find 'xcrun --sdk macosx clang'." >&2
|
|
echo "You may need to install the command-line tools using Xcode." >&2
|
|
echo "See http://swtch.com/go/xcodegcc for details." >&2
|
|
exit 1
|
|
fi
|
|
CC9="xcrun --sdk macosx clang"
|
|
case "$(uname -a)" in
|
|
*ARM64*)
|
|
CC9="$CC9 -arch arm64"
|
|
echo ' Forcing arm64 binaries with clang.'
|
|
;;
|
|
esac
|
|
|
|
echo "CC9='$CC9'" >>$PLAN9/config
|
|
rm -f ./a.out
|
|
fi
|
|
|
|
if [ `uname` != Darwin ]; then
|
|
# Determine whether fontsrv X11 files are available.
|
|
rm -f a.out
|
|
cc -o a.out -c -Iinclude -I/usr/include -I/usr/local/include -I/usr/include/freetype2 -I/usr/local/include/freetype2 \
|
|
-I/usr/X11R7/include -I/usr/X11R7/include/freetype2 \
|
|
-I/usr/X11R6/include -I/usr/X11R6/include/freetype2 src/cmd/fontsrv/x11.c >/dev/null 2>&1
|
|
if [ -f a.out ]; then
|
|
echo " fontsrv dependencies found."
|
|
echo "FONTSRV=fontsrv" >>$PLAN9/config
|
|
else
|
|
echo " fontsrv dependencies not found."
|
|
echo "FONTSRV=" >>$PLAN9/config
|
|
rm -f bin/fontsrv
|
|
fi
|
|
rm -f a.out
|
|
fi
|
|
|
|
if [ -f LOCAL.config ]; then
|
|
echo Using LOCAL.config options:
|
|
sed 's/^/ /' LOCAL.config
|
|
cat LOCAL.config >>config
|
|
fi
|
|
|
|
echo "* Compiler version:"
|
|
9c -v 2>&1 | grep -v 'Configured with:' | grep -i version | sed 's/^/ /'
|
|
|
|
cd src
|
|
if $dobuild; then
|
|
echo "* Building mk..."
|
|
../dist/buildmk 2>&1 | sed 's/^[+] //'
|
|
|
|
if [ ! -x ../bin/mk ]; then
|
|
echo "* Error: mk failed to build."
|
|
exit 1
|
|
fi
|
|
|
|
echo "* Building everything (be patient)..."
|
|
mk clean
|
|
mk libs-nuke
|
|
mk all || exit 1
|
|
if [ ! -x $PLAN9/src/cmd/o.cleanname -o ! -x $PLAN9/src/cmd/acme/o.acme ]; then
|
|
echo "* Warning: not all binaries built successfully."
|
|
fi
|
|
echo "* Installing everything in $PLAN9/bin..."
|
|
mk -k install || exit 1
|
|
if [ ! -x $PLAN9/bin/cleanname -o ! -x $PLAN9/bin/acme -o ! -x $PLAN9/bin/sam ]; then
|
|
echo " "
|
|
echo "* Warning: not all binaries built successfully."
|
|
fi
|
|
if [ -f $PLAN9/bin/quote1 ]; then
|
|
cp $PLAN9/bin/quote1 $PLAN9/bin/'"'
|
|
cp $PLAN9/bin/quote2 $PLAN9/bin/'""'
|
|
fi
|
|
echo "* Cleaning up..."
|
|
mk clean
|
|
fi
|
|
|
|
if $doinstall; then
|
|
if [ ! -x $PLAN9/bin/cleanname -o ! -x $PLAN9/bin/sam ]; then
|
|
# Cleanname and sam are needed for moveplan9.sh and the man updates.
|
|
if [ ! -x $PLAN9/bin/cleanname ]; then
|
|
echo " "
|
|
echo "* Installation failed: $PLAN9/bin/cleanname does not exist."
|
|
exit 1
|
|
fi
|
|
if [ ! -x $PLAN9/bin/sam ]; then
|
|
echo " "
|
|
echo "* Installation failed: $PLAN9/bin/sam does not exist."
|
|
exit 1
|
|
fi
|
|
echo "* NOT renaming hard-coded /usr/local/plan9 paths."
|
|
echo "* NOT building web manual."
|
|
else
|
|
echo "* Renaming hard-coded /usr/local/plan9 paths..."
|
|
cd $PLAN9
|
|
sh lib/moveplan9.sh
|
|
echo "* Building web manual..."
|
|
(
|
|
cd $PLAN9/dist
|
|
echo cd `pwd`';' mk man
|
|
mk man
|
|
)
|
|
fi
|
|
|
|
if [ -x LOCAL.INSTALL ]; then
|
|
echo "* Running local modifications..."
|
|
echo cd `pwd`';' ./LOCAL.INSTALL
|
|
./LOCAL.INSTALL
|
|
fi
|
|
|
|
echo "* Done. "
|
|
echo " "
|
|
echo "* Add these to your profile environment."
|
|
echo " PLAN9=$PLAN9 export PLAN9"
|
|
echo ' PATH=$PATH:$PLAN9/bin export PATH'
|
|
fi
|
|
) 2>&1 | tee install.log | $awk -f $PLAN9/dist/isum.awk -v 'copy='install.sum
|
|
|