@@ -775,6 +775,9 @@ probe CFG_BISON bison
775
775
probe CFG_GDB gdb
776
776
probe CFG_LLDB lldb
777
777
778
+ # For building LLVM
779
+ probe_need CFG_CMAKE cmake
780
+
778
781
# On MacOS X, invoking `javac` pops up a dialog if the JDK is not
779
782
# installed. Since `javac` is only used if `antlr4` is available,
780
783
# probe for it only in this case.
@@ -1233,9 +1236,6 @@ $ pacman -R python2 && pacman -S mingw-w64-x86_64-python2
1233
1236
"
1234
1237
fi
1235
1238
1236
- # MSVC requires cmake because that's how we're going to build LLVM
1237
- probe_need CFG_CMAKE cmake
1238
-
1239
1239
# There are three builds of cmake on windows: MSVC, MinGW and Cygwin
1240
1240
# The Cygwin build does not have generators for Visual Studio, so
1241
1241
# detect that here and error.
@@ -1508,27 +1508,16 @@ do
1508
1508
elif [ -z $CFG_LLVM_ROOT ]
1509
1509
then
1510
1510
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
1532
1521
fi
1533
1522
fi
1534
1523
else
@@ -1586,96 +1575,68 @@ do
1586
1575
err " can only build LLVM for x86 platforms"
1587
1576
;;
1588
1577
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"
1617
1580
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 "
1645
1608
;;
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"
1662
1619
;;
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"
1669
1630
;;
1670
- (" gcc" )
1631
+ (" gcc" )
1671
1632
LLVM_CXX_32=" g++"
1672
1633
LLVM_CC_32=" gcc"
1673
1634
1674
1635
LLVM_CXX_64=" g++"
1675
1636
LLVM_CC_64=" gcc"
1676
1637
;;
1677
1638
1678
- (* )
1639
+ (* )
1679
1640
msg " inferring LLVM_CXX/CC from CXX/CC = $CXX /$CC "
1680
1641
if [ -n " $CFG_ENABLE_CCACHE " ]
1681
1642
then
@@ -1684,11 +1645,15 @@ do
1684
1645
err " ccache requested but not found"
1685
1646
fi
1686
1647
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 "
1689
1652
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 "
1692
1657
else
1693
1658
LLVM_CXX_32=" $CXX "
1694
1659
LLVM_CC_32=" $CC "
@@ -1698,86 +1663,101 @@ do
1698
1663
fi
1699
1664
1700
1665
;;
1701
- esac
1666
+ esac
1702
1667
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
1707
1675
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
1711
1694
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
1715
1698
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"
1719
1707
1720
- (* )
1721
- LLVM_CFLAGS_32=" "
1722
- LLVM_CXXFLAGS_32=" "
1723
- LLVM_LDFLAGS_32=" "
1708
+ arch=" $( echo " $t " | cut -d - f 1) "
1724
1709
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
1730
1713
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 "
1744
1729
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
1745
1735
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
1751
1747
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'"
1755
1749
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"
1758
1753
1759
1754
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 "
1779
1756
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"
1781
1761
fi
1782
1762
1783
1763
# Construct variables for LLVM build and install directories for
0 commit comments