Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit aebdccf

Browse files
committedJun 7, 2016
Convert makefiles to build LLVM/compiler-rt with CMake
1 parent 763f923 commit aebdccf

File tree

4 files changed

+226
-226
lines changed

4 files changed

+226
-226
lines changed
 

‎configure

Lines changed: 153 additions & 173 deletions
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

‎mk/llvm.mk

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ ifeq ($(CFG_LLVM_ROOT),)
3232

3333
LLVM_STAMP_$(1) = $$(CFG_LLVM_BUILD_DIR_$(1))/llvm-auto-clean-stamp
3434

35-
ifeq ($$(findstring msvc,$(1)),msvc)
36-
3735
$$(LLVM_CONFIG_$(1)): $$(LLVM_DEPS) $$(LLVM_STAMP_$(1))
3836
@$$(call E, cmake: llvm)
3937
$$(Q)$$(CFG_CMAKE) --build $$(CFG_LLVM_BUILD_DIR_$(1)) \
@@ -42,18 +40,6 @@ $$(LLVM_CONFIG_$(1)): $$(LLVM_DEPS) $$(LLVM_STAMP_$(1))
4240

4341
clean-llvm$(1):
4442

45-
else
46-
47-
$$(LLVM_CONFIG_$(1)): $$(LLVM_DEPS) $$(LLVM_STAMP_$(1))
48-
@$$(call E, make: llvm)
49-
$$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) $$(CFG_LLVM_BUILD_ENV_$(1)) ONLY_TOOLS="$$(LLVM_TOOLS)"
50-
$$(Q)touch $$(LLVM_CONFIG_$(1))
51-
52-
clean-llvm$(1):
53-
$$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) clean
54-
55-
endif
56-
5743
else
5844
clean-llvm$(1):
5945
endif

‎mk/rt.mk

Lines changed: 72 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -233,35 +233,66 @@ COMPRT_DEPS := $(wildcard \
233233
$(S)src/compiler-rt/*/*/*/*)
234234
endif
235235

236+
# compiler-rt's build system is a godawful mess. Here we figure out
237+
# the ridiculous platform-specific values and paths necessary to get
238+
# useful artifacts out of it.
239+
236240
COMPRT_NAME_$(1) := $$(call CFG_STATIC_LIB_NAME_$(1),compiler-rt)
237241
COMPRT_LIB_$(1) := $$(RT_OUTPUT_DIR_$(1))/$$(COMPRT_NAME_$(1))
238242
COMPRT_BUILD_DIR_$(1) := $$(RT_OUTPUT_DIR_$(1))/compiler-rt
239243

240-
ifeq ($$(findstring msvc,$(1)),msvc)
241-
$$(COMPRT_LIB_$(1)): $$(COMPRT_DEPS) $$(MKFILE_DEPS) $$(LLVM_CONFIG_$$(CFG_BUILD))
242-
@$$(call E, cmake: compiler-rt)
243-
$$(Q)cd "$$(COMPRT_BUILD_DIR_$(1))"; $$(CFG_CMAKE) "$(S)src/compiler-rt" \
244-
-DCMAKE_BUILD_TYPE=$$(LLVM_BUILD_CONFIG_MODE) \
245-
-DLLVM_CONFIG_PATH=$$(LLVM_CONFIG_$$(CFG_BUILD)) \
246-
-G"$$(CFG_CMAKE_GENERATOR)"
247-
$$(Q)$$(CFG_CMAKE) --build "$$(COMPRT_BUILD_DIR_$(1))" \
248-
--target lib/builtins/builtins \
249-
--config $$(LLVM_BUILD_CONFIG_MODE) \
250-
-- //v:m //nologo
251-
$$(Q)cp $$(COMPRT_BUILD_DIR_$(1))/lib/windows/$$(LLVM_BUILD_CONFIG_MODE)/clang_rt.builtins-$$(HOST_$(1)).lib $$@
244+
COMPRT_ARCH_$(1) := "$$(word 1,$$(subst -, ,$(1)))"
245+
246+
# All this is to figure out the path to the compiler-rt bin
247+
ifeq ($$(findstring windows-msvc,$(1)),windows-msvc)
248+
COMPRT_DIR_$(1) := "windows/$$(LLVM_BUILD_CONFIG_MODE)"
249+
COMPRT_LIB_NAME_$(1) := "clang_rt.builtins-$$(patsubst i686,i386,$$(COMPRT_ARCH_$(1)))"
252250
else
253-
COMPRT_CC_$(1) := $$(CC_$(1))
254-
COMPRT_AR_$(1) := $$(AR_$(1))
255-
# We chomp -Werror here because GCC warns about the type signature of
256-
# builtins not matching its own and the build fails. It's a bit hacky,
257-
# but what can we do, we're building libclang-rt using GCC ......
258-
COMPRT_CFLAGS_$(1) := $$(CFG_GCCISH_CFLAGS_$(1)) -Wno-error -std=c99
259-
260-
# FreeBSD Clang's packaging is problematic; it doesn't copy unwind.h to
261-
# the standard include directory. This should really be in our changes to
262-
# compiler-rt, but we override the CFLAGS here so there isn't much choice
263-
ifeq ($$(findstring freebsd,$(1)),freebsd)
264-
COMPRT_CFLAGS_$(1) += -I/usr/include/c++/v1
251+
ifeq ($$(findstring windows-gnu,$(1)),windows-gnu)
252+
COMPRT_DIR_$(1) := "windows"
253+
COMPRT_LIB_NAME_$(1) := "libclang_rt.builtins-$$(COMPRT_ARCH_$(1))"
254+
else
255+
ifeq ($$(findstring darwin,$(1)),darwin)
256+
COMPRT_DIR_$(1) := "builtins"
257+
COMPRT_LIB_NAME_$(1) := "clang_rt.builtins_$$(COMPRT_ARCH_$(1))_osx"
258+
else
259+
# NB: FreeBSD and NetBSD output to "linux"...
260+
COMPRT_DIR_$(1) := "linux"
261+
262+
ifeq ($$(findstring android,$(1)),android)
263+
COMPRT_LIB_NAME_$(1) := "clang_rt.builtins-$$(COMPRT_ARCH_$(1))-android"
264+
else
265+
ifeq ($$(findstring arm,$$(COMPRT_ARCH_$(1))),arm)
266+
267+
ifeq ($$(findstring eabihf,$$(COMPRT_ARCH_$(1)),eabihf))
268+
COMPRT_LIB_NAME_$(1) := "clang_rt.builtins-armhf"
269+
else
270+
COMPRT_LIB_NAME_$(1) := "clang_rt.builtins-arm"
271+
endif
272+
273+
else
274+
COMPRT_LIB_NAME_$(1) := "clang_rt.builtins-$$(COMPRT_ARCH_$(1))"
275+
endif
276+
endif
277+
278+
endif
279+
endif
280+
endif
281+
282+
ifeq ($$(findstring windows-gnu,$(1)),windows-gnu)
283+
COMPRT_LIB_FILE_$(1) := "$$(COMPRT_LIB_NAME_$(1)).a"
284+
else
285+
COMPRT_LIB_FILE_$(1) := "$$(call CFG_STATIC_LIB_NAME_$(1),$$(COMPRT_LIB_NAME_$(1)))"
286+
endif
287+
288+
COMPRT_OUTPUT_$(1) := "$$(COMPRT_BUILD_DIR_$(1))/lib/$$(COMPRT_DIR_$(1))/$$(COMPRT_LIB_FILE_$(1))"
289+
290+
ifeq ($$(findstring windows-msvc,$(1)),windows-msvc)
291+
COMPRT_BUILD_ARGS_$(1) := "//v:m //nologo"
292+
COMPRT_BUILD_TARGET_$(1) := "lib/builtins/builtins"
293+
else
294+
COMPRT_BUILD_ARGS_$(1) :=
295+
COMPRT_BUILD_TARGET_$(1) := $$(COMPRT_LIB_NAME_$(1))
265296
endif
266297

267298
ifeq ($$(findstring emscripten,$(1)),emscripten)
@@ -273,20 +304,23 @@ $$(COMPRT_LIB_$(1)):
273304

274305
else
275306

276-
$$(COMPRT_LIB_$(1)): $$(COMPRT_DEPS) $$(MKFILE_DEPS)
277-
@$$(call E, make: compiler-rt)
278-
$$(Q)$$(MAKE) -C "$(S)src/compiler-rt" \
279-
ProjSrcRoot="$(S)src/compiler-rt" \
280-
ProjObjRoot="$$(abspath $$(COMPRT_BUILD_DIR_$(1)))" \
281-
CC='$$(COMPRT_CC_$(1))' \
282-
AR='$$(COMPRT_AR_$(1))' \
283-
RANLIB='$$(COMPRT_AR_$(1)) s' \
284-
CFLAGS="$$(COMPRT_CFLAGS_$(1))" \
285-
TargetTriple=$(1) \
286-
triple-builtins
287-
$$(Q)cp $$(COMPRT_BUILD_DIR_$(1))/triple/builtins/libcompiler_rt.a $$@
288-
289-
endif # if emscripten
307+
$$(COMPRT_LIB_$(1)): $$(COMPRT_DEPS) $$(MKFILE_DEPS) $$(LLVM_CONFIG_$$(CFG_BUILD))
308+
@$$(call E, cmake: compiler-rt)
309+
$$(Q)cd "$$(COMPRT_BUILD_DIR_$(1))"; $$(CFG_CMAKE) "$(S)src/compiler-rt" \
310+
-DCMAKE_BUILD_TYPE=$$(LLVM_BUILD_CONFIG_MODE) \
311+
-DLLVM_CONFIG_PATH=$$(LLVM_CONFIG_$$(CFG_BUILD)) \
312+
-DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=$(1) \
313+
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
314+
-DCOMPILER_RT_BUILD_EMUTLS=OFF \
315+
-DCMAKE_C_COMPILER=$$(CC_$(1)) \
316+
-DCMAKE_CXX_COMPILER=$$(CXX_$(1)) \
317+
-G"$$(CFG_CMAKE_GENERATOR)"
318+
$$(Q)$$(CFG_CMAKE) --build "$$(COMPRT_BUILD_DIR_$(1))" \
319+
--target $$(COMPRT_BUILD_TARGET_$(1)) \
320+
--config $$(LLVM_BUILD_CONFIG_MODE) \
321+
$$(COMPRT_BUILD_ARGS_$(1))
322+
$$(Q)cp "$$(COMPRT_OUTPUT_$(1))" $$@
323+
290324
endif
291325

292326
################################################################################

‎src/etc/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ FROM ubuntu:xenial
1919
RUN apt-get update && apt-get -y install \
2020
curl g++ git make \
2121
libedit-dev zlib1g-dev \
22-
llvm-3.7-tools
22+
llvm-3.7-tools cmake
2323

2424
RUN mkdir /build
2525
WORKDIR /build

0 commit comments

Comments
 (0)
Please sign in to comment.