@@ -775,6 +775,9 @@ probe CFG_BISON bison
775775probe CFG_GDB gdb
776776probe CFG_LLDB lldb
777777
778+ # For building LLVM
779+ probe_need CFG_CMAKE cmake
780+
778781# On MacOS X, invoking `javac` pops up a dialog if the JDK is not
779782# installed. Since `javac` is only used if `antlr4` is available,
780783# probe for it only in this case.
@@ -1233,9 +1236,6 @@ $ pacman -R python2 && pacman -S mingw-w64-x86_64-python2
12331236"
12341237 fi
12351238
1236- # MSVC requires cmake because that's how we're going to build LLVM
1237- probe_need CFG_CMAKE cmake
1238-
12391239 # There are three builds of cmake on windows: MSVC, MinGW and Cygwin
12401240 # The Cygwin build does not have generators for Visual Studio, so
12411241 # detect that here and error.
@@ -1508,27 +1508,16 @@ do
15081508 elif [ -z $CFG_LLVM_ROOT ]
15091509 then
15101510 LLVM_BUILD_DIR=${CFG_BUILD_DIR} $t /llvm
1511- if [ -n " $CFG_DISABLE_OPTIMIZE_LLVM " ]
1512- then
1513- LLVM_DBG_OPTS=" --enable-debug-symbols --disable-optimized"
1514- # Just use LLVM straight from its build directory to
1515- # avoid 'make install' time
1516- LLVM_INST_DIR=$LLVM_BUILD_DIR /Debug
1517- else
1518- LLVM_DBG_OPTS=" --enable-optimized"
1519- LLVM_INST_DIR=$LLVM_BUILD_DIR /Release
1520- fi
1521- if [ -z " $CFG_ENABLE_LLVM_ASSERTIONS " ]
1522- then
1523- LLVM_ASSERTION_OPTS=" --disable-assertions"
1524- else
1525- LLVM_ASSERTION_OPTS=" --enable-assertions"
1526-
1527- # Apparently even if we request assertions be enabled for MSVC,
1528- # LLVM's CMake build system ignore this and outputs in `Release`
1529- # anyway.
1530- if [ ${is_msvc} -eq 0 ]; then
1531- LLVM_INST_DIR=${LLVM_INST_DIR} +Asserts
1511+ LLVM_INST_DIR=$LLVM_BUILD_DIR
1512+ # For some crazy reason the MSVC output dir is different than Unix
1513+ if [ ${is_msvc} -ne 0 ]; then
1514+ if [ -n " $CFG_DISABLE_OPTIMIZE_LLVM " ]
1515+ then
1516+ # Just use LLVM straight from its build directory to
1517+ # avoid 'make install' time
1518+ LLVM_INST_DIR=$LLVM_BUILD_DIR /Debug
1519+ else
1520+ LLVM_INST_DIR=$LLVM_BUILD_DIR /Release
15321521 fi
15331522 fi
15341523 else
@@ -1586,96 +1575,68 @@ do
15861575 err " can only build LLVM for x86 platforms"
15871576 ;;
15881577 esac
1589- CFG_CMAKE_GENERATOR=$generator
1590- putvar CFG_CMAKE_GENERATOR
1591- fi
1592-
1593- if [ ${do_reconfigure} -ne 0 ] && [ ${is_msvc} -ne 0 ]
1594- then
1595- msg " configuring LLVM for $t with cmake"
1596-
1597- CMAKE_ARGS=" -DLLVM_INCLUDE_TESTS=OFF"
1598- if [ -n " $CFG_DISABLE_OPTIMIZE_LLVM " ]; then
1599- CMAKE_ARGS=" $CMAKE_ARGS -DCMAKE_BUILD_TYPE=Debug"
1600- else
1601- CMAKE_ARGS=" $CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release"
1602- fi
1603- if [ -z " $CFG_ENABLE_LLVM_ASSERTIONS " ]
1604- then
1605- CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_ENABLE_ASSERTIONS=OFF"
1606- else
1607- CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_ENABLE_ASSERTIONS=ON"
1608- fi
1609-
1610- msg " configuring LLVM with:"
1611- msg " $CMAKE_ARGS "
1612-
1613- (cd $LLVM_BUILD_DIR && " $CFG_CMAKE " $CFG_LLVM_SRC_DIR \
1614- -G " $CFG_CMAKE_GENERATOR " \
1615- $CMAKE_ARGS )
1616- need_ok " LLVM cmake configure failed"
1578+ else
1579+ generator=" Unix Makefiles"
16171580 fi
1618-
1619- if [ ${do_reconfigure} -ne 0 ] && [ ${is_msvc} -eq 0 ]
1620- then
1621- # LLVM's configure doesn't recognize the new Windows triples yet
1622- gnu_t= $( to_gnu_triple $t )
1623-
1624- msg " configuring LLVM for $gnu_t "
1625-
1626- LLVM_TARGETS= " --enable-targets=x86,x86_64,arm,aarch64,mips,powerpc "
1627- LLVM_BUILD= " --build= $gnu_t "
1628- LLVM_HOST= " --host= $gnu_t "
1629- LLVM_TARGET= " --target= $gnu_t "
1630-
1631- # Disable unused LLVM features
1632- LLVM_OPTS= " $LLVM_DBG_OPTS $LLVM_ASSERTION_OPTS --disable-docs --enable-bindings=none "
1633- # Disable term-info, linkage of which comes in multiple forms,
1634- # making our snapshots incompatible (#9334)
1635- LLVM_OPTS= " $LLVM_OPTS --disable-terminfo "
1636- # Try to have LLVM pull in as few dependencies as possible (#9397)
1637- LLVM_OPTS= " $LLVM_OPTS --disable-zlib --disable-libffi "
1638-
1639- # Use win32 native thread/lock apis instead of pthread wrapper.
1640- # (llvm's configure tries to find pthread first, so we have to disable it explicitly.)
1641- # Also note that pthreads works badly on mingw-w64 systems: #8996
1642- case " $CFG_BUILD " in
1643- ( * -windows-gnu)
1644- LLVM_OPTS= " $LLVM_OPTS --disable-pthreads "
1581+ CFG_CMAKE_GENERATOR= $generator
1582+ putvar CFG_CMAKE_GENERATOR
1583+
1584+ msg " configuring LLVM for $t "
1585+
1586+ LLVM_CFLAGS_32= " "
1587+ LLVM_CXXFLAGS_32= " "
1588+ LLVM_LDFLAGS_32= " "
1589+ LLVM_CFLAGS_64= " "
1590+ LLVM_CXXFLAGS_64= " "
1591+ LLVM_LDFLAGS_64= " "
1592+
1593+ case " $CFG_CC " in
1594+ ( " ccache clang " )
1595+ LLVM_CXX_32= " ccache "
1596+ LLVM_CC_32= " ccache "
1597+ LLVM_CXX_32_ARG1= " clang++ "
1598+ LLVM_CC_32_ARG1= " clang "
1599+ LLVM_CFLAGS_32= " -Qunused-arguments "
1600+ LLVM_CXXFLAGS_32= " -Qunused-arguments "
1601+
1602+ LLVM_CXX_64= " ccache "
1603+ LLVM_CC_64= " ccache "
1604+ LLVM_CXX_64_ARG1= " clang++ "
1605+ LLVM_CC_64_ARG1= " clang "
1606+ LLVM_CFLAGS_64= " -Qunused-arguments "
1607+ LLVM_CXXFLAGS_64= " -Qunused-arguments "
16451608 ;;
1646- esac
1647-
1648- case " $CFG_CC " in
1649- (" ccache clang" )
1650- LLVM_CXX_32=" ccache clang++ -Qunused-arguments"
1651- LLVM_CC_32=" ccache clang -Qunused-arguments"
1652-
1653- LLVM_CXX_64=" ccache clang++ -Qunused-arguments"
1654- LLVM_CC_64=" ccache clang -Qunused-arguments"
1655- ;;
1656- (" clang" )
1657- LLVM_CXX_32=" clang++ -Qunused-arguments"
1658- LLVM_CC_32=" clang -Qunused-arguments"
1659-
1660- LLVM_CXX_64=" clang++ -Qunused-arguments"
1661- LLVM_CC_64=" clang -Qunused-arguments"
1609+ (" clang" )
1610+ LLVM_CXX_32=" clang++"
1611+ LLVM_CC_32=" clang"
1612+ LLVM_CFLAGS_32=" -Qunused-arguments"
1613+ LLVM_CXXFLAGS_32=" -Qunused-arguments"
1614+
1615+ LLVM_CXX_64=" clang++"
1616+ LLVM_CC_64=" clang"
1617+ LLVM_CFLAGS_64=" -Qunused-arguments"
1618+ LLVM_CXXFLAGS_64=" -Qunused-arguments"
16621619 ;;
1663- (" ccache gcc" )
1664- LLVM_CXX_32=" ccache g++"
1665- LLVM_CC_32=" ccache gcc"
1666-
1667- LLVM_CXX_64=" ccache g++"
1668- LLVM_CC_64=" ccache gcc"
1620+ (" ccache gcc" )
1621+ LLVM_CXX_32=" ccache"
1622+ LLVM_CC_32=" ccache"
1623+ LLVM_CXX_32_ARG1=" clang++"
1624+ LLVM_CC_32_ARG1=" clang"
1625+
1626+ LLVM_CXX_64=" ccache"
1627+ LLVM_CC_64=" ccache"
1628+ LLVM_CXX_64_ARG1=" g++"
1629+ LLVM_CC_64_ARG1=" gcc"
16691630 ;;
1670- (" gcc" )
1631+ (" gcc" )
16711632 LLVM_CXX_32=" g++"
16721633 LLVM_CC_32=" gcc"
16731634
16741635 LLVM_CXX_64=" g++"
16751636 LLVM_CC_64=" gcc"
16761637 ;;
16771638
1678- (* )
1639+ (* )
16791640 msg " inferring LLVM_CXX/CC from CXX/CC = $CXX /$CC "
16801641 if [ -n " $CFG_ENABLE_CCACHE " ]
16811642 then
@@ -1684,11 +1645,15 @@ do
16841645 err " ccache requested but not found"
16851646 fi
16861647
1687- LLVM_CXX_32=" ccache $CXX "
1688- LLVM_CC_32=" ccache $CC "
1648+ LLVM_CXX_32=" ccache"
1649+ LLVM_CC_32=" ccache"
1650+ LLVM_CXX_32_ARG1=" $CXX "
1651+ LLVM_CC_32_ARG1=" $CC "
16891652
1690- LLVM_CXX_64=" ccache $CXX "
1691- LLVM_CC_64=" ccache $CC "
1653+ LLVM_CXX_64=" ccache"
1654+ LLVM_CC_64=" ccache"
1655+ LLVM_CXX_64_ARG1=" $CXX "
1656+ LLVM_CC_64_ARG1=" $CC "
16921657 else
16931658 LLVM_CXX_32=" $CXX "
16941659 LLVM_CC_32=" $CC "
@@ -1698,86 +1663,101 @@ do
16981663 fi
16991664
17001665 ;;
1701- esac
1666+ esac
17021667
1703- case " $CFG_CPUTYPE " in
1704- (x86* )
1705- LLVM_CXX_32=" $LLVM_CXX_32 -m32"
1706- LLVM_CC_32=" $LLVM_CC_32 -m32"
1668+ case " $CFG_CPUTYPE " in
1669+ (x86* )
1670+ LLVM_CFLAGS_32=" $LLVM_CFLAGS_32 -m32"
1671+ LLVM_CXXFLAGS_32=" $LLVM_CFLAGS_32 -m32"
1672+ LLVM_LDFLAGS_32=" $LLVM_CFLAGS_32 -m32"
1673+ ;;
1674+ esac
17071675
1708- LLVM_CFLAGS_32=" -m32"
1709- LLVM_CXXFLAGS_32=" -m32"
1710- LLVM_LDFLAGS_32=" -m32"
1676+ if echo $t | grep -q x86_64
1677+ then
1678+ LLVM_CXX=$LLVM_CXX_64
1679+ LLVM_CC=$LLVM_CC_64
1680+ LLVM_CXX_ARG1=$LLVM_CXX_ARG1_64
1681+ LLVM_CC_ARG1=$LLVM_CC_ARG1_64
1682+ LLVM_CFLAGS=$LLVM_CFLAGS_64
1683+ LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
1684+ LLVM_LDFLAGS=$LLVM_LDFLAGS_64
1685+ else
1686+ LLVM_CXX=$LLVM_CXX_32
1687+ LLVM_CC=$LLVM_CC_32
1688+ LLVM_CXX_ARG1=$LLVM_CXX_ARG1_32
1689+ LLVM_CC_ARG1=$LLVM_CC_ARG1_32
1690+ LLVM_CFLAGS=$LLVM_CFLAGS_32
1691+ LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
1692+ LLVM_LDFLAGS=$LLVM_LDFLAGS_32
1693+ fi
17111694
1712- LLVM_CFLAGS_64= " "
1713- LLVM_CXXFLAGS_64= " "
1714- LLVM_LDFLAGS_64= " "
1695+ if [ " $CFG_USING_LIBCPP " != " 0 " ] ; then
1696+ CMAKE_ARGS= " $CMAKE_ARGS -DLLVM_ENABLE_LIBCXX=ON "
1697+ fi
17151698
1716- LLVM_CXX_32=" $LLVM_CXX_32 -m32"
1717- LLVM_CC_32=" $LLVM_CC_32 -m32"
1718- ;;
1699+ # Turn off things we don't need
1700+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_INCLUDE_TESTS=OFF"
1701+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_INCLUDE_EXAMPLES=OFF"
1702+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_INCLUDE_DOCS=OFF"
1703+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_ENABLE_ZLIB=OFF"
1704+ CMAKE_ARGS=" $CMAKE_ARGS -DWITH_POLY=OFF"
1705+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_ENABLE_TERMINFO=OFF"
1706+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_ENABLE_LIBEDIT=OFF"
17191707
1720- (* )
1721- LLVM_CFLAGS_32=" "
1722- LLVM_CXXFLAGS_32=" "
1723- LLVM_LDFLAGS_32=" "
1708+ arch=" $( echo " $t " | cut -d - f 1) "
17241709
1725- LLVM_CFLAGS_64=" "
1726- LLVM_CXXFLAGS_64=" "
1727- LLVM_LDFLAGS_64=" "
1728- ;;
1729- esac
1710+ if [ " $arch " = i686 ]; then
1711+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_BUILD_32_BITS=ON"
1712+ fi
17301713
1731- if echo $t | grep -q x86_64
1732- then
1733- LLVM_CXX=$LLVM_CXX_64
1734- LLVM_CC=$LLVM_CC_64
1735- LLVM_CFLAGS=$LLVM_CFLAGS_64
1736- LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
1737- LLVM_LDFLAGS=$LLVM_LDFLAGS_64
1738- else
1739- LLVM_CXX=$LLVM_CXX_32
1740- LLVM_CC=$LLVM_CC_32
1741- LLVM_CFLAGS=$LLVM_CFLAGS_32
1742- LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
1743- LLVM_LDFLAGS=$LLVM_LDFLAGS_32
1714+ if [ " $t " != " $CFG_BUILD " ]; then
1715+ CMAKE_ARGS=" $CMAKE_ARGS -DCMAKE_CROSSCOMPILING=True"
1716+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_TARGET_ARCH=$arch "
1717+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_TABLEGEN=$LLVM_INST_DIR /bin/llvm-tablegen"
1718+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_DEFAULT_TARGET_TRIPLE=$t "
1719+ fi
1720+
1721+ # MSVC handles compiler business itself
1722+ if [ ${is_msvc} -eq 0 ]; then
1723+ CMAKE_ARGS=" $CMAKE_ARGS -DCMAKE_C_COMPILER=$LLVM_CC "
1724+ CMAKE_ARGS=" $CMAKE_ARGS -DCMAKE_CXX_COMPILER=$LLVM_CXX "
1725+ CMAKE_ARGS=" $CMAKE_ARGS -DCMAKE_C_FLAGS='$LLVM_CFLAGS '"
1726+ CMAKE_ARGS=" $CMAKE_ARGS -DCMAKE_CXX_FLAGS='$LLVM_CXXFLAGS '"
1727+ if [ -n " $LLVM_CC_ARG1 " ]; then
1728+ CMAKE_ARGS=" $CMAKE_ARGS -DCMAKE_C_COMPILER_ARG1=$LLVM_CC_ARG1 "
17441729 fi
1730+ if [ -n " $LLVM_CXX_ARG1 " ]; then
1731+ CMAKE_ARGS=" $CMAKE_ARGS -DCMAKE_CXX_COMPILER_ARG1=$LLVM_CXX_ARG1 "
1732+ fi
1733+ # FIXME: What about LDFLAGS?
1734+ fi
17451735
1746- CXX=$LLVM_CXX
1747- CC=$LLVM_CC
1748- CFLAGS=" $CFLAGS $LLVM_CFLAGS "
1749- CXXFLAGS=" $CXXFLAGS $LLVM_CXXFLAGS "
1750- LDFLAGS=" $LDFLAGS $LLVM_LDFLAGS "
1736+ if [ -n " $CFG_DISABLE_OPTIMIZE_LLVM " ]; then
1737+ CMAKE_ARGS=" $CMAKE_ARGS -DCMAKE_BUILD_TYPE=Debug"
1738+ else
1739+ CMAKE_ARGS=" $CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release"
1740+ fi
1741+ if [ -z " $CFG_ENABLE_LLVM_ASSERTIONS " ]
1742+ then
1743+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_ENABLE_ASSERTIONS=OFF"
1744+ else
1745+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_ENABLE_ASSERTIONS=ON"
1746+ fi
17511747
1752- if [ " $CFG_USING_LIBCPP " != " 0" ]; then
1753- LLVM_OPTS=" $LLVM_OPTS --enable-libcpp"
1754- fi
1748+ CMAKE_ARGS=" $CMAKE_ARGS -DLLVM_TARGETS_TO_BUILD='X86;ARM;AArch64;Mips;PowerPC'"
17551749
1756- LLVM_FLAGS=" $LLVM_TARGETS $LLVM_OPTS $LLVM_BUILD \
1757- $LLVM_HOST $LLVM_TARGET --with-python=$CFG_PYTHON "
1750+ if [ ${do_reconfigure} -ne 0 ]
1751+ then
1752+ msg " configuring LLVM for $t with cmake"
17581753
17591754 msg " configuring LLVM with:"
1760- msg " $LLVM_FLAGS "
1761-
1762- export CXX
1763- export CC
1764- export CFLAGS
1765- export CXXFLAGS
1766- export LDFLAGS
1767-
1768- cd $LLVM_BUILD_DIR
1769- case $CFG_SRC_DIR in
1770- /* | [a-z]:* | [A-Z]:* )
1771- ${CFG_LLVM_SRC_DIR} configure $LLVM_FLAGS
1772- ;;
1773- * )
1774- ${CFG_BUILD_DIR}${CFG_LLVM_SRC_DIR} configure \
1775- $LLVM_FLAGS
1776- ;;
1777- esac
1778- need_ok " LLVM configure failed"
1755+ msg " $CMAKE_ARGS "
17791756
1780- cd $CFG_BUILD_DIR
1757+ (cd $LLVM_BUILD_DIR && " $CFG_CMAKE " $CFG_LLVM_SRC_DIR \
1758+ -G " $CFG_CMAKE_GENERATOR " \
1759+ $CMAKE_ARGS )
1760+ need_ok " LLVM cmake configure failed"
17811761 fi
17821762
17831763 # Construct variables for LLVM build and install directories for
0 commit comments