Skip to content

Commit 3c55e21

Browse files
committed
Auto merge of #34055 - brson:cmake, r=brson
Convert makefiles to build LLVM/compiler-rt with CMake This is certainly buggy, but I have successfully built on x86_64-unknown-linux-gnu and x86_64-pc-windows-gnu. I haven't built successfully on mac yet, and I've seen mysterious test failures on Linux, but I'm interested in throwing this at the bots to see what they think.
2 parents 763f923 + aebdccf commit 3c55e21

File tree

4 files changed

+226
-226
lines changed

4 files changed

+226
-226
lines changed

configure

+153-173
Original file line numberDiff line numberDiff line change
@@ -775,6 +775,9 @@ probe CFG_BISON bison
775775
probe CFG_GDB gdb
776776
probe 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

Comments
 (0)