Skip to content

Port Rust to PNaCl. #26148

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 50 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
bda0a8d
Port libstd to PNaCl.
DiamondLovesYou Jun 9, 2015
a98088c
Add the NaCl OS && `le32` architecture enum values.
DiamondLovesYou Jun 9, 2015
2b11e78
Port libcore to PNaCl.
DiamondLovesYou Jun 9, 2015
6f554e0
Port liballoc to PNaCl.
DiamondLovesYou Jun 9, 2015
e85a636
Makefile changes for PNaCl.
DiamondLovesYou Jun 9, 2015
5b2e7a8
Don't allow some SIMD types which aren't rewriten by the PNaCl IR sim…
DiamondLovesYou Jun 9, 2015
b6141ae
Provide `rust_readdir_r` for Newlib.
DiamondLovesYou Jun 9, 2015
0fdbc6b
Define unwinding functions so we don't have to depend on `unwind.bc` …
DiamondLovesYou Jun 9, 2015
7c96f92
Wrap PNaCl specific parts of LLVM for Rust.
DiamondLovesYou Jun 9, 2015
64424ec
Add `main_link_name` attribute for use with `nacl-spawn`.
DiamondLovesYou Jun 9, 2015
b854999
`librustc` changes needed for PNaCl.
DiamondLovesYou Jun 9, 2015
a0c8bf7
Add an option for specifying the gold plugin to use.
DiamondLovesYou Jun 9, 2015
e28f458
`librustc_back` changes for PNaCl.
DiamondLovesYou Jun 9, 2015
aba1a3b
Add a forgotten file to `librustc`.
DiamondLovesYou Jun 9, 2015
a8f0b98
`librustc_driver` changes for PNaCl.
DiamondLovesYou Jun 9, 2015
5cab570
`librustc_llvm` changes for PNaCl.
DiamondLovesYou Jun 9, 2015
7804b55
`librustc_trans` changes for PNaCl.
DiamondLovesYou Jun 9, 2015
888a9a5
`librustdoc` changes for hosting on PNaCl.
DiamondLovesYou Jun 9, 2015
f1b3964
`configure` changes for PNaCl + changes for hosting Rust on PNaCl.
DiamondLovesYou Jun 10, 2015
4cff458
Add the `le32-unknown-nacl` target!
DiamondLovesYou Jun 10, 2015
e6a22bf
Add a forgotten part of mk/rt.mk.
DiamondLovesYou Jun 10, 2015
16661b5
`glibc-compat` can be found in the toolchain w/ use of `naclports`.
DiamondLovesYou Jun 10, 2015
c345211
Automatically set --llvm-root if targeting PNaCl.
DiamondLovesYou Jun 10, 2015
36a9117
`-rewrite-llvm-debugtrap-intrinsic` doesn't exist in `pnacl-llvm`
DiamondLovesYou Jun 10, 2015
b9d0e3c
Use globs.
DiamondLovesYou Jun 10, 2015
9596582
Move link deps to `rtdeps.rs`
DiamondLovesYou Jun 10, 2015
19e029a
Add a comment.
DiamondLovesYou Jun 10, 2015
d1a5ef4
Remove some stuff that shouldn't be.
DiamondLovesYou Jun 10, 2015
6ef772d
Refactor.
DiamondLovesYou Jun 10, 2015
2cc9544
Correct a couple of mistakes in mk/main.mk
DiamondLovesYou Jun 10, 2015
a9b258b
Remove an extra ')'.
DiamondLovesYou Jun 10, 2015
7b3df44
Add a new flag to TargetOptions, de-pnacl-ify the check for asm.
DiamondLovesYou Jun 10, 2015
9036369
Remove some dead code.
DiamondLovesYou Jun 10, 2015
3e6ae80
Remove two unused functions.
DiamondLovesYou Jun 10, 2015
654dfa8
Move a function to a more local location.
DiamondLovesYou Jun 10, 2015
ea03016
Fix some compile errors.
DiamondLovesYou Jun 18, 2015
b74278c
Allow the Rust tools to run on PNaCl.
DiamondLovesYou Jun 18, 2015
57453b0
Don't forget to add a target spec key for `no_asm`.
DiamondLovesYou Jun 18, 2015
7952e55
Don't forget to load the PNaCl target.
DiamondLovesYou Jun 18, 2015
5fc7743
Remove unused imports.
DiamondLovesYou Jun 18, 2015
bead590
Add code to allow `compiletest` to run PNaCl tests.
DiamondLovesYou Jun 18, 2015
96bb8ea
s/TODO/FIXME/
DiamondLovesYou Jun 18, 2015
e50d108
Add a new `is_like_pnacl` target option field.
DiamondLovesYou Jun 20, 2015
8266f1c
Move two functions to a location closer to their use.
DiamondLovesYou Jun 20, 2015
9aee917
Mips has NaCl support.
DiamondLovesYou Jun 20, 2015
2bfa689
Remove pound sign.
DiamondLovesYou Jun 20, 2015
9592500
Fix tidy.
DiamondLovesYou Jun 20, 2015
06a4b76
Refactor.
DiamondLovesYou Jun 20, 2015
fe3e338
Rust will use the NaCl SDK LLVM, so the debug versions will always ma…
DiamondLovesYou Jun 20, 2015
bc0b435
Bump clang to 3.7.0
DiamondLovesYou Jun 20, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
275 changes: 171 additions & 104 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -566,6 +566,7 @@ opt rpath 0 "build rpaths into rustc itself"
opt dist-host-only 0 "only install bins for the host architecture"
opt inject-std-version 1 "inject the current compiler version of libstd into programs"
opt llvm-version-check 1 "check if the LLVM version is supported, build anyway"
valopt nacl-cross-path "" "NaCl SDK path (must be Pepper 43 or higher). Must be absolute!"

# Optimization and debugging options. These may be overridden by the release channel, etc.
opt_nosave optimize 1 "build optimized rust code"
Expand Down Expand Up @@ -1078,6 +1079,18 @@ do
fi
;;

*-unknown-nacl)
if [ -z "$CFG_NACL_CROSS_PATH" ]
then
err "I need the NaCl SDK path! (use --nacl-cross-path)"
fi
if [ ! -z "$CFG_LLVM_ROOT" ]
then
CFG_LLVM_ROOT="${CFG_NACL_CROSS_PATH}/toolchain/`${CFG_NACL_CROSS_PATH}/tools/getos.py`_pnacl"
putvar CFG_LLVM_ROOT
fi
;;

arm-apple-darwin)
if [ $CFG_OSTYPE != apple-darwin ]
then
Expand Down Expand Up @@ -1308,12 +1321,143 @@ for t in $CFG_HOST
do
do_reconfigure=1
is_msvc=0

# LLVM's configure doesn't recognize the new Windows triples yet
gnu_t=$(to_gnu_triple $t)
if [ "$t" != "$CFG_BUILD" ]
then
LLVM_PREFIX="$gnu_t-"
else
LLVM_PREFIX=""
fi

LLVM_AR="ar"
LLVM_RANLIB="ranlib"

case "$CFG_CC" in
("ccache clang")
LLVM_CXX_32="ccache ${LLVM_PREFIX}clang++ -Qunused-arguments"
LLVM_CC_32="ccache ${LLVM_PREFIX}clang -Qunused-arguments"

LLVM_CXX_64="ccache ${LLVM_PREFIX}clang++ -Qunused-arguments"
LLVM_CC_64="ccache ${LLVM_PREFIX}clang -Qunused-arguments"
;;
("clang")
LLVM_CXX_32="${LLVM_PREFIX}clang++ -Qunused-arguments"
LLVM_CC_32="${LLVM_PREFIX}clang -Qunused-arguments"

LLVM_CXX_64="${LLVM_PREFIX}clang++ -Qunused-arguments"
LLVM_CC_64="${LLVM_PREFIX}clang -Qunused-arguments"
;;
("ccache gcc")
LLVM_CXX_32="ccache ${LLVM_PREFIX}g++"
LLVM_CC_32="ccache ${LLVM_PREFIX}gcc"

LLVM_CXX_64="ccache ${LLVM_PREFIX}g++"
LLVM_CC_64="ccache ${LLVM_PREFIX}gcc"
;;
("gcc")
LLVM_CXX_32="${LLVM_PREFIX}g++"
LLVM_CC_32="${LLVM_PREFIX}gcc"

LLVM_CXX_64="${LLVM_PREFIX}g++"
LLVM_CC_64="${LLVM_PREFIX}gcc"
;;

(*)
msg "inferring CXX/CC = $CXX/$CC"
LLVM_CXX_32="$CXX"
LLVM_CC_32="$CC"

LLVM_CXX_64="$CXX"
LLVM_CC_64="$CC"
;;
esac

case "$CFG_CPUTYPE" in
(x86*)
LLVM_CFLAGS_32="-m32"
LLVM_CXXFLAGS_32="-m32"
LLVM_LDFLAGS_32="-m32"

LLVM_CFLAGS_64=""
LLVM_CXXFLAGS_64=""
LLVM_LDFLAGS_64=""
;;

(*)
LLVM_CFLAGS_32=""
LLVM_CXXFLAGS_32=""
LLVM_LDFLAGS_32=""

LLVM_CFLAGS_64=""
LLVM_CXXFLAGS_64=""
LLVM_LDFLAGS_64=""
;;
esac

if echo $t | grep -q x86_64
then
LLVM_CXX=$LLVM_CXX_64
LLVM_CC=$LLVM_CC_64
LLVM_CFLAGS=$LLVM_CFLAGS_64
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
LLVM_LDFLAGS=$LLVM_LDFLAGS_64
else
LLVM_CXX=$LLVM_CXX_32
LLVM_CC=$LLVM_CC_32
LLVM_CFLAGS=$LLVM_CFLAGS_32
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
LLVM_LDFLAGS=$LLVM_LDFLAGS_32
fi

# Toolchain overrides for specific hosts
case "$t" in
(*-msvc)
is_msvc=1
is_msvc=1
;;
(le32-unknown-nacl)
BUILD_CXX=clang++
BUILD_CC=clang
BUILD_CXXFLAGS=$LLVM_CXXFLAGS
BUILD_CFLAGS=$LLVM_CFLAGS

export BUILD_CXX
export BUILD_CC
export BUILD_CXXFLAGS
export BUILD_CFLAGS

LLVM_CXX="`$CFG_NACL_CROSS_PATH/tools/nacl_config.py -t pnacl --tool=c++`"
LLVM_CC="`$CFG_NACL_CROSS_PATH/tools/nacl_config.py -t pnacl --tool=cc`"
LLVM_RANLIB="`$CFG_NACL_CROSS_PATH/tools/nacl_config.py -t pnacl --tool=ranlib`"
LLVM_CFLAGS="-I$NACL_SDK_ROOT/toolchain/$($NACL_SDK_ROOT/tools/getos.py)_pnacl/le32-nacl/usr/include/glibc-compat"
LLVM_CXXFLAGS=$LLVM_CFLAGS
LLVM_AR="`$CFG_NACL_CROSS_PATH/tools/nacl_config.py -t pnacl --tool=ar`"
;;
(*)
unset BUILD_CXX
unset BUILD_CC
unset BUILD_CXXFLAGS
unset BUILD_CFLAGS
;;
esac

CXX=$LLVM_CXX
CC=$LLVM_CC
AR=$LLVM_AR
RANLIB=$LLVM_RANLIB
CFLAGS=$LLVM_CFLAGS
CXXFLAGS=$LLVM_CXXFLAGS
LDFLAGS=$LLVM_LDFLAGS

export CXX
export CC
export AR
export RANLIB
export CFLAGS
export CXXFLAGS
export LDFLAGS

if [ -z $CFG_LLVM_ROOT ]
then
LLVM_BUILD_DIR=${CFG_BUILD_DIR}$t/llvm
Expand All @@ -1322,10 +1466,10 @@ do
LLVM_DBG_OPTS="--enable-debug-symbols --disable-optimized"
# Just use LLVM straight from its build directory to
# avoid 'make install' time
LLVM_INST_DIR=$LLVM_BUILD_DIR/Debug
LLVM_BUILD_SUBDIR=Debug
else
LLVM_DBG_OPTS="--enable-optimized"
LLVM_INST_DIR=$LLVM_BUILD_DIR/Release
LLVM_BUILD_SUBDIR=Release
fi
if [ -z "$CFG_ENABLE_LLVM_ASSERTIONS" ]
then
Expand All @@ -1337,9 +1481,13 @@ do
# LLVM's CMake build system ignore this and outputs in `Release`
# anyway.
if [ ${is_msvc} -eq 0 ]; then
LLVM_INST_DIR=${LLVM_INST_DIR}+Asserts
LLVM_BUILD_SUBDIR=${LLVM_BUILD_SUBDIR}+Asserts
else
LLVM_BUILD_SUBDIR=${LLVM_BUILD_SUBDIR}
fi
fi

LLVM_INST_DIR=$LLVM_BUILD_DIR/$LLVM_BUILD_SUBDIR
else
msg "not reconfiguring LLVM, external LLVM root"
# The user is using their own LLVM
Expand Down Expand Up @@ -1395,18 +1543,27 @@ do

if [ ${do_reconfigure} -ne 0 ] && [ ${is_msvc} -eq 0 ]
then
# LLVM's configure doesn't recognize the new Windows triples yet
gnu_t=$(to_gnu_triple $t)

msg "configuring LLVM for $gnu_t"

LLVM_TARGETS="--enable-targets=x86,x86_64,arm,aarch64,mips,powerpc"
LLVM_BUILD="--build=$gnu_t"
LLVM_BUILD="--build=$(to_gnu_triple $CFG_BUILD)"
LLVM_HOST="--host=$gnu_t"
LLVM_TARGET="--target=$gnu_t"

# Disable unused LLVM features
LLVM_OPTS="$LLVM_DBG_OPTS $LLVM_ASSERTION_OPTS --disable-docs --enable-bindings=none"

case "$t" in
(le32-unknown-nacl)
# Enable only the arches that NaCl can sandbox.
LLVM_TARGETS="--enable-targets=x86,arm,mips"
# Use libc++ to match Rust.
LLVM_OPTS="$LLVM_OPTS --enable-libcpp"
;;
(*)
LLVM_TARGETS="--enable-targets=x86,x86_64,arm,aarch64,mips,powerpc"
;;
esac

# Disable term-info, linkage of which comes in multiple forms,
# making our snapshots incompatible (#9334)
LLVM_OPTS="$LLVM_OPTS --disable-terminfo"
Expand All @@ -1422,95 +1579,6 @@ do
;;
esac

case "$CFG_CC" in
("ccache clang")
LLVM_CXX_32="ccache clang++ -Qunused-arguments"
LLVM_CC_32="ccache clang -Qunused-arguments"

LLVM_CXX_64="ccache clang++ -Qunused-arguments"
LLVM_CC_64="ccache clang -Qunused-arguments"
;;
("clang")
LLVM_CXX_32="clang++ -Qunused-arguments"
LLVM_CC_32="clang -Qunused-arguments"

LLVM_CXX_64="clang++ -Qunused-arguments"
LLVM_CC_64="clang -Qunused-arguments"
;;
("ccache gcc")
LLVM_CXX_32="ccache g++"
LLVM_CC_32="ccache gcc"

LLVM_CXX_64="ccache g++"
LLVM_CC_64="ccache gcc"
;;
("gcc")
LLVM_CXX_32="g++"
LLVM_CC_32="gcc"

LLVM_CXX_64="g++"
LLVM_CC_64="gcc"
;;

(*)
msg "inferring LLVM_CXX/CC from CXX/CC = $CXX/$CC"
LLVM_CXX_32="$CXX"
LLVM_CC_32="$CC"

LLVM_CXX_64="$CXX"
LLVM_CC_64="$CC"
;;
esac

case "$CFG_CPUTYPE" in
(x86*)
LLVM_CXX_32="$LLVM_CXX_32 -m32"
LLVM_CC_32="$LLVM_CC_32 -m32"

LLVM_CFLAGS_32="-m32"
LLVM_CXXFLAGS_32="-m32"
LLVM_LDFLAGS_32="-m32"

LLVM_CFLAGS_64=""
LLVM_CXXFLAGS_64=""
LLVM_LDFLAGS_64=""

LLVM_CXX_32="$LLVM_CXX_32 -m32"
LLVM_CC_32="$LLVM_CC_32 -m32"
;;

(*)
LLVM_CFLAGS_32=""
LLVM_CXXFLAGS_32=""
LLVM_LDFLAGS_32=""

LLVM_CFLAGS_64=""
LLVM_CXXFLAGS_64=""
LLVM_LDFLAGS_64=""
;;
esac

if echo $t | grep -q x86_64
then
LLVM_CXX=$LLVM_CXX_64
LLVM_CC=$LLVM_CC_64
LLVM_CFLAGS=$LLVM_CFLAGS_64
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
LLVM_LDFLAGS=$LLVM_LDFLAGS_64
else
LLVM_CXX=$LLVM_CXX_32
LLVM_CC=$LLVM_CC_32
LLVM_CFLAGS=$LLVM_CFLAGS_32
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
LLVM_LDFLAGS=$LLVM_LDFLAGS_32
fi

CXX=$LLVM_CXX
CC=$LLVM_CC
CFLAGS=$LLVM_CFLAGS
CXXFLAGS=$LLVM_CXXFLAGS
LDFLAGS=$LLVM_LDFLAGS

if [ -z "$CFG_DISABLE_LIBCPP" ] && [ -n "$CFG_USING_CLANG" ]; then
LLVM_OPTS="$LLVM_OPTS --enable-libcpp"
fi
Expand All @@ -1521,12 +1589,6 @@ do
msg "configuring LLVM with:"
msg "$LLVM_FLAGS"

export CXX
export CC
export CFLAGS
export CXXFLAGS
export LDFLAGS

cd $LLVM_BUILD_DIR
case $CFG_SRC_DIR in
/* | [a-z]:* | [A-Z]:*)
Expand All @@ -1549,8 +1611,10 @@ do
# variables can't contain hyphens. The makefile will then have to
# convert back.
CFG_LLVM_BUILD_DIR=$(echo CFG_LLVM_BUILD_DIR_${t} | tr - _)
CFG_LLVM_BUILD_SUBDIR=$(echo CFG_LLVM_BUILD_SUBDIR_${t} | tr - _)
CFG_LLVM_INST_DIR=$(echo CFG_LLVM_INST_DIR_${t} | tr - _)
eval ${CFG_LLVM_BUILD_DIR}="'$LLVM_BUILD_DIR'"
eval ${CFG_LLVM_BUILD_SUBDIR}="'$LLVM_BUILD_SUBDIR'"
eval ${CFG_LLVM_INST_DIR}="'$LLVM_INST_DIR'"
done

Expand All @@ -1568,6 +1632,7 @@ putvar CFG_TARGET
putvar CFG_LIBDIR_RELATIVE
putvar CFG_DISABLE_MANAGE_SUBMODULES
putvar CFG_ANDROID_CROSS_PATH
putvar CFG_NACL_CROSS_PATH
putvar CFG_MANDIR

# Avoid spurious warnings from clang by feeding it original source on
Expand Down Expand Up @@ -1596,8 +1661,10 @@ putvar CFG_LLVM_SRC_DIR
for t in $CFG_HOST
do
CFG_LLVM_BUILD_DIR=$(echo CFG_LLVM_BUILD_DIR_${t} | tr - _)
CFG_LLVM_BUILD_SUBDIR=$(echo CFG_LLVM_BUILD_SUBDIR_${t} | tr - _)
CFG_LLVM_INST_DIR=$(echo CFG_LLVM_INST_DIR_${t} | tr - _)
putvar $CFG_LLVM_BUILD_DIR
putvar $CFG_LLVM_BUILD_SUBDIR
putvar $CFG_LLVM_INST_DIR
done

Expand Down
Loading