@@ -582,6 +582,7 @@ opt rpath 0 "build rpaths into rustc itself"
582582opt dist-host-only 0 " only install bins for the host architecture"
583583opt inject-std-version 1 " inject the current compiler version of libstd into programs"
584584opt 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.
587588opt_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
13901396do
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 '"
16731730done
16741731
@@ -1688,6 +1745,7 @@ putvar CFG_LIBDIR_RELATIVE
16881745putvar CFG_DISABLE_MANAGE_SUBMODULES
16891746putvar CFG_AARCH64_LINUX_ANDROID_NDK
16901747putvar CFG_ARM_LINUX_ANDROIDEABI_NDK
1748+ putvar CFG_NACL_CROSS_PATH
16911749putvar CFG_MANDIR
16921750
16931751# Avoid spurious warnings from clang by feeding it original source on
@@ -1716,8 +1774,10 @@ putvar CFG_LLVM_SRC_DIR
17161774for t in $CFG_HOST
17171775do
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
17221782done
17231783
0 commit comments