Skip to content

Commit dfe47c8

Browse files
Port Rust to PNaCl.
1 parent febdc3b commit dfe47c8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+2549
-1282
lines changed

configure

Lines changed: 180 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,7 @@ opt rpath 0 "build rpaths into rustc itself"
582582
opt dist-host-only 0 "only install bins for the host architecture"
583583
opt inject-std-version 1 "inject the current compiler version of libstd into programs"
584584
opt llvm-version-check 1 "check if the LLVM version is supported, build anyway"
585+
valopt nacl-cross-path "" "NaCl SDK path (must be Pepper 43 or higher). Must be absolute!"
585586

586587
# Optimization and debugging options. These may be overridden by the release channel, etc.
587588
opt_nosave optimize 1 "build optimized rust code"
@@ -1131,7 +1132,12 @@ do
11311132
fi
11321133
done
11331134
;;
1134-
1135+
*-unknown-nacl)
1136+
if [ -z "$CFG_NACL_CROSS_PATH" ]
1137+
then
1138+
err "I need the NaCl SDK path! (use --nacl-cross-path)"
1139+
fi
1140+
;;
11351141
arm-apple-darwin)
11361142
if [ $CFG_OSTYPE != apple-darwin ]
11371143
then
@@ -1390,12 +1396,158 @@ for t in $CFG_HOST
13901396
do
13911397
do_reconfigure=1
13921398
is_msvc=0
1399+
1400+
# LLVM's configure doesn't recognize the new Windows triples yet
1401+
gnu_t=$(to_gnu_triple $t)
1402+
if [ "$t" != "$CFG_BUILD" ]
1403+
then
1404+
LLVM_PREFIX="$gnu_t-"
1405+
else
1406+
LLVM_PREFIX=""
1407+
fi
1408+
1409+
LLVM_AR="ar"
1410+
LLVM_RANLIB="ranlib"
1411+
1412+
case "$CFG_CC" in
1413+
("ccache clang")
1414+
LLVM_CXX_32="ccache ${LLVM_PREFIX}clang++ -Qunused-arguments"
1415+
LLVM_CC_32="ccache ${LLVM_PREFIX}clang -Qunused-arguments"
1416+
1417+
LLVM_CXX_64="ccache ${LLVM_PREFIX}clang++ -Qunused-arguments"
1418+
LLVM_CC_64="ccache ${LLVM_PREFIX}clang -Qunused-arguments"
1419+
;;
1420+
("clang")
1421+
LLVM_CXX_32="${LLVM_PREFIX}clang++ -Qunused-arguments"
1422+
LLVM_CC_32="${LLVM_PREFIX}clang -Qunused-arguments"
1423+
1424+
LLVM_CXX_64="${LLVM_PREFIX}clang++ -Qunused-arguments"
1425+
LLVM_CC_64="${LLVM_PREFIX}clang -Qunused-arguments"
1426+
;;
1427+
("ccache gcc")
1428+
LLVM_CXX_32="ccache ${LLVM_PREFIX}g++"
1429+
LLVM_CC_32="ccache ${LLVM_PREFIX}gcc"
1430+
1431+
LLVM_CXX_64="ccache ${LLVM_PREFIX}g++"
1432+
LLVM_CC_64="ccache ${LLVM_PREFIX}gcc"
1433+
;;
1434+
("gcc")
1435+
LLVM_CXX_32="${LLVM_PREFIX}g++"
1436+
LLVM_CC_32="${LLVM_PREFIX}gcc"
1437+
1438+
LLVM_CXX_64="${LLVM_PREFIX}g++"
1439+
LLVM_CC_64="${LLVM_PREFIX}gcc"
1440+
;;
1441+
1442+
(*)
1443+
msg "inferring LLVM_CXX/CC from CXX/CC = $CXX/$CC"
1444+
if [ -n "$CFG_ENABLE_CCACHE" ]
1445+
then
1446+
if [ -z "$CFG_CCACHE" ]
1447+
then
1448+
err "ccache requested but not found"
1449+
fi
1450+
1451+
LLVM_CXX_32="ccache $CXX"
1452+
LLVM_CC_32="ccache $CC"
1453+
1454+
LLVM_CXX_64="ccache $CXX"
1455+
LLVM_CC_64="ccache $CC"
1456+
else
1457+
LLVM_CXX_32="$CXX"
1458+
LLVM_CC_32="$CC"
1459+
1460+
LLVM_CXX_64="$CXX"
1461+
LLVM_CC_64="$CC"
1462+
fi
1463+
1464+
;;
1465+
esac
1466+
1467+
case "$CFG_CPUTYPE" in
1468+
(x86*)
1469+
LLVM_CFLAGS_32="-m32"
1470+
LLVM_CXXFLAGS_32="-m32"
1471+
LLVM_LDFLAGS_32="-m32"
1472+
1473+
LLVM_CFLAGS_64=""
1474+
LLVM_CXXFLAGS_64=""
1475+
LLVM_LDFLAGS_64=""
1476+
;;
1477+
1478+
(*)
1479+
LLVM_CFLAGS_32=""
1480+
LLVM_CXXFLAGS_32=""
1481+
LLVM_LDFLAGS_32=""
1482+
1483+
LLVM_CFLAGS_64=""
1484+
LLVM_CXXFLAGS_64=""
1485+
LLVM_LDFLAGS_64=""
1486+
;;
1487+
esac
1488+
1489+
if echo $t | grep -q x86_64
1490+
then
1491+
LLVM_CXX=$LLVM_CXX_64
1492+
LLVM_CC=$LLVM_CC_64
1493+
LLVM_CFLAGS=$LLVM_CFLAGS_64
1494+
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
1495+
LLVM_LDFLAGS=$LLVM_LDFLAGS_64
1496+
else
1497+
LLVM_CXX=$LLVM_CXX_32
1498+
LLVM_CC=$LLVM_CC_32
1499+
LLVM_CFLAGS=$LLVM_CFLAGS_32
1500+
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
1501+
LLVM_LDFLAGS=$LLVM_LDFLAGS_32
1502+
fi
1503+
1504+
# Toolchain overrides for specific hosts
13931505
case "$t" in
13941506
(*-msvc)
1395-
is_msvc=1
1507+
is_msvc=1
1508+
;;
1509+
(le32-unknown-nacl)
1510+
BUILD_CXX=clang++
1511+
BUILD_CC=clang
1512+
BUILD_CXXFLAGS=$LLVM_CXXFLAGS
1513+
BUILD_CFLAGS=$LLVM_CFLAGS
1514+
1515+
export BUILD_CXX
1516+
export BUILD_CC
1517+
export BUILD_CXXFLAGS
1518+
export BUILD_CFLAGS
1519+
1520+
LLVM_CXX="`$CFG_NACL_CROSS_PATH/tools/nacl_config.py -t pnacl --tool=c++`"
1521+
LLVM_CC="`$CFG_NACL_CROSS_PATH/tools/nacl_config.py -t pnacl --tool=cc`"
1522+
LLVM_RANLIB="`$CFG_NACL_CROSS_PATH/tools/nacl_config.py -t pnacl --tool=ranlib`"
1523+
LLVM_CFLAGS="-I$NACL_SDK_ROOT/toolchain/$($NACL_SDK_ROOT/tools/getos.py)_pnacl/le32-nacl/usr/include/glibc-compat"
1524+
LLVM_CXXFLAGS=$LLVM_CFLAGS
1525+
LLVM_AR="`$CFG_NACL_CROSS_PATH/tools/nacl_config.py -t pnacl --tool=ar`"
1526+
;;
1527+
(*)
1528+
unset BUILD_CXX
1529+
unset BUILD_CC
1530+
unset BUILD_CXXFLAGS
1531+
unset BUILD_CFLAGS
13961532
;;
13971533
esac
13981534

1535+
CXX=$LLVM_CXX
1536+
CC=$LLVM_CC
1537+
AR=$LLVM_AR
1538+
RANLIB=$LLVM_RANLIB
1539+
CFLAGS=$LLVM_CFLAGS
1540+
CXXFLAGS=$LLVM_CXXFLAGS
1541+
LDFLAGS=$LLVM_LDFLAGS
1542+
1543+
export CXX
1544+
export CC
1545+
export AR
1546+
export RANLIB
1547+
export CFLAGS
1548+
export CXXFLAGS
1549+
export LDFLAGS
1550+
13991551
if [ -z $CFG_LLVM_ROOT ]
14001552
then
14011553
LLVM_BUILD_DIR=${CFG_BUILD_DIR}$t/llvm
@@ -1404,10 +1556,10 @@ do
14041556
LLVM_DBG_OPTS="--enable-debug-symbols --disable-optimized"
14051557
# Just use LLVM straight from its build directory to
14061558
# avoid 'make install' time
1407-
LLVM_INST_DIR=$LLVM_BUILD_DIR/Debug
1559+
LLVM_BUILD_SUBDIR=Debug
14081560
else
14091561
LLVM_DBG_OPTS="--enable-optimized"
1410-
LLVM_INST_DIR=$LLVM_BUILD_DIR/Release
1562+
LLVM_BUILD_SUBDIR=Release
14111563
fi
14121564
if [ -z "$CFG_ENABLE_LLVM_ASSERTIONS" ]
14131565
then
@@ -1419,9 +1571,13 @@ do
14191571
# LLVM's CMake build system ignore this and outputs in `Release`
14201572
# anyway.
14211573
if [ ${is_msvc} -eq 0 ]; then
1422-
LLVM_INST_DIR=${LLVM_INST_DIR}+Asserts
1574+
LLVM_BUILD_SUBDIR=${LLVM_BUILD_SUBDIR}+Asserts
1575+
else
1576+
LLVM_BUILD_SUBDIR=${LLVM_BUILD_SUBDIR}
14231577
fi
14241578
fi
1579+
1580+
LLVM_INST_DIR=$LLVM_BUILD_DIR/$LLVM_BUILD_SUBDIR
14251581
else
14261582
msg "not reconfiguring LLVM, external LLVM root"
14271583
# The user is using their own LLVM
@@ -1498,18 +1654,27 @@ do
14981654

14991655
if [ ${do_reconfigure} -ne 0 ] && [ ${is_msvc} -eq 0 ]
15001656
then
1501-
# LLVM's configure doesn't recognize the new Windows triples yet
1502-
gnu_t=$(to_gnu_triple $t)
1503-
15041657
msg "configuring LLVM for $gnu_t"
15051658

1506-
LLVM_TARGETS="--enable-targets=x86,x86_64,arm,aarch64,mips,powerpc"
1507-
LLVM_BUILD="--build=$gnu_t"
1659+
LLVM_BUILD="--build=$(to_gnu_triple $CFG_BUILD)"
15081660
LLVM_HOST="--host=$gnu_t"
15091661
LLVM_TARGET="--target=$gnu_t"
15101662

15111663
# Disable unused LLVM features
15121664
LLVM_OPTS="$LLVM_DBG_OPTS $LLVM_ASSERTION_OPTS --disable-docs --enable-bindings=none"
1665+
1666+
case "$t" in
1667+
(le32-unknown-nacl)
1668+
# Enable only the arches that NaCl can sandbox.
1669+
LLVM_TARGETS="--enable-targets=x86,arm,mips"
1670+
# Use libc++ to match Rust.
1671+
LLVM_OPTS="$LLVM_OPTS --enable-libcpp"
1672+
;;
1673+
(*)
1674+
LLVM_TARGETS="--enable-targets=x86,x86_64,arm,aarch64,mips,powerpc"
1675+
;;
1676+
esac
1677+
15131678
# Disable term-info, linkage of which comes in multiple forms,
15141679
# making our snapshots incompatible (#9334)
15151680
LLVM_OPTS="$LLVM_OPTS --disable-terminfo"
@@ -1525,110 +1690,6 @@ do
15251690
;;
15261691
esac
15271692

1528-
case "$CFG_CC" in
1529-
("ccache clang")
1530-
LLVM_CXX_32="ccache clang++ -Qunused-arguments"
1531-
LLVM_CC_32="ccache clang -Qunused-arguments"
1532-
1533-
LLVM_CXX_64="ccache clang++ -Qunused-arguments"
1534-
LLVM_CC_64="ccache clang -Qunused-arguments"
1535-
;;
1536-
("clang")
1537-
LLVM_CXX_32="clang++ -Qunused-arguments"
1538-
LLVM_CC_32="clang -Qunused-arguments"
1539-
1540-
LLVM_CXX_64="clang++ -Qunused-arguments"
1541-
LLVM_CC_64="clang -Qunused-arguments"
1542-
;;
1543-
("ccache gcc")
1544-
LLVM_CXX_32="ccache g++"
1545-
LLVM_CC_32="ccache gcc"
1546-
1547-
LLVM_CXX_64="ccache g++"
1548-
LLVM_CC_64="ccache gcc"
1549-
;;
1550-
("gcc")
1551-
LLVM_CXX_32="g++"
1552-
LLVM_CC_32="gcc"
1553-
1554-
LLVM_CXX_64="g++"
1555-
LLVM_CC_64="gcc"
1556-
;;
1557-
1558-
(*)
1559-
msg "inferring LLVM_CXX/CC from CXX/CC = $CXX/$CC"
1560-
if [ -n "$CFG_ENABLE_CCACHE" ]
1561-
then
1562-
if [ -z "$CFG_CCACHE" ]
1563-
then
1564-
err "ccache requested but not found"
1565-
fi
1566-
1567-
LLVM_CXX_32="ccache $CXX"
1568-
LLVM_CC_32="ccache $CC"
1569-
1570-
LLVM_CXX_64="ccache $CXX"
1571-
LLVM_CC_64="ccache $CC"
1572-
else
1573-
LLVM_CXX_32="$CXX"
1574-
LLVM_CC_32="$CC"
1575-
1576-
LLVM_CXX_64="$CXX"
1577-
LLVM_CC_64="$CC"
1578-
fi
1579-
1580-
;;
1581-
esac
1582-
1583-
case "$CFG_CPUTYPE" in
1584-
(x86*)
1585-
LLVM_CXX_32="$LLVM_CXX_32 -m32"
1586-
LLVM_CC_32="$LLVM_CC_32 -m32"
1587-
1588-
LLVM_CFLAGS_32="-m32"
1589-
LLVM_CXXFLAGS_32="-m32"
1590-
LLVM_LDFLAGS_32="-m32"
1591-
1592-
LLVM_CFLAGS_64=""
1593-
LLVM_CXXFLAGS_64=""
1594-
LLVM_LDFLAGS_64=""
1595-
1596-
LLVM_CXX_32="$LLVM_CXX_32 -m32"
1597-
LLVM_CC_32="$LLVM_CC_32 -m32"
1598-
;;
1599-
1600-
(*)
1601-
LLVM_CFLAGS_32=""
1602-
LLVM_CXXFLAGS_32=""
1603-
LLVM_LDFLAGS_32=""
1604-
1605-
LLVM_CFLAGS_64=""
1606-
LLVM_CXXFLAGS_64=""
1607-
LLVM_LDFLAGS_64=""
1608-
;;
1609-
esac
1610-
1611-
if echo $t | grep -q x86_64
1612-
then
1613-
LLVM_CXX=$LLVM_CXX_64
1614-
LLVM_CC=$LLVM_CC_64
1615-
LLVM_CFLAGS=$LLVM_CFLAGS_64
1616-
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
1617-
LLVM_LDFLAGS=$LLVM_LDFLAGS_64
1618-
else
1619-
LLVM_CXX=$LLVM_CXX_32
1620-
LLVM_CC=$LLVM_CC_32
1621-
LLVM_CFLAGS=$LLVM_CFLAGS_32
1622-
LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
1623-
LLVM_LDFLAGS=$LLVM_LDFLAGS_32
1624-
fi
1625-
1626-
CXX=$LLVM_CXX
1627-
CC=$LLVM_CC
1628-
CFLAGS=$LLVM_CFLAGS
1629-
CXXFLAGS=$LLVM_CXXFLAGS
1630-
LDFLAGS=$LLVM_LDFLAGS
1631-
16321693
if [ -z "$CFG_DISABLE_LIBCPP" ] && [ -n "$CFG_USING_CLANG" ]; then
16331694
LLVM_OPTS="$LLVM_OPTS --enable-libcpp"
16341695
fi
@@ -1639,12 +1700,6 @@ do
16391700
msg "configuring LLVM with:"
16401701
msg "$LLVM_FLAGS"
16411702

1642-
export CXX
1643-
export CC
1644-
export CFLAGS
1645-
export CXXFLAGS
1646-
export LDFLAGS
1647-
16481703
cd $LLVM_BUILD_DIR
16491704
case $CFG_SRC_DIR in
16501705
/* | [a-z]:* | [A-Z]:*)
@@ -1667,8 +1722,10 @@ do
16671722
# variables can't contain hyphens. The makefile will then have to
16681723
# convert back.
16691724
CFG_LLVM_BUILD_DIR=$(echo CFG_LLVM_BUILD_DIR_${t} | tr - _)
1725+
CFG_LLVM_BUILD_SUBDIR=$(echo CFG_LLVM_BUILD_SUBDIR_${t} | tr - _)
16701726
CFG_LLVM_INST_DIR=$(echo CFG_LLVM_INST_DIR_${t} | tr - _)
16711727
eval ${CFG_LLVM_BUILD_DIR}="'$LLVM_BUILD_DIR'"
1728+
eval ${CFG_LLVM_BUILD_SUBDIR}="'$LLVM_BUILD_SUBDIR'"
16721729
eval ${CFG_LLVM_INST_DIR}="'$LLVM_INST_DIR'"
16731730
done
16741731

@@ -1688,6 +1745,7 @@ putvar CFG_LIBDIR_RELATIVE
16881745
putvar CFG_DISABLE_MANAGE_SUBMODULES
16891746
putvar CFG_AARCH64_LINUX_ANDROID_NDK
16901747
putvar CFG_ARM_LINUX_ANDROIDEABI_NDK
1748+
putvar CFG_NACL_CROSS_PATH
16911749
putvar CFG_MANDIR
16921750

16931751
# Avoid spurious warnings from clang by feeding it original source on
@@ -1716,8 +1774,10 @@ putvar CFG_LLVM_SRC_DIR
17161774
for t in $CFG_HOST
17171775
do
17181776
CFG_LLVM_BUILD_DIR=$(echo CFG_LLVM_BUILD_DIR_${t} | tr - _)
1777+
CFG_LLVM_BUILD_SUBDIR=$(echo CFG_LLVM_BUILD_SUBDIR_${t} | tr - _)
17191778
CFG_LLVM_INST_DIR=$(echo CFG_LLVM_INST_DIR_${t} | tr - _)
17201779
putvar $CFG_LLVM_BUILD_DIR
1780+
putvar $CFG_LLVM_BUILD_SUBDIR
17211781
putvar $CFG_LLVM_INST_DIR
17221782
done
17231783

0 commit comments

Comments
 (0)