aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/llvm
diff options
context:
space:
mode:
authorGravatar Patrick Nguyen <drpng@google.com>2018-08-09 10:43:18 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-08-09 10:52:10 -0700
commitfe6b586e862bf7288e138d73f2e66cf8cef7eb26 (patch)
tree7e3176e27fab4aa5dbcbf43b55ed85e7dcb44649 /third_party/llvm
parent1b5edbf1e3e68459b6a06076f6ef4eb6aff2f8e9 (diff)
PR #18293: [XLA/AOT] Build LLVM with Bazel on Windows
I previously use hacky BUILD file to import prebuilt LLVM binaries from CMake to Bazel so that I can build `tfcompile` with Bazel on Windows, but since Tensorflow updates the LLVM revision used very frequently, this method is too troublesome. I am trying to make XLA/AOT to work out-of-the-box on Windows with Bazel, then convince Tensorflow team to create a presubmit so that no one can break XLA/AOT on Windows anymore. Summary: - Remove unused `llvm_host_triple`. - Rename `cmake_vars` to `posix_cmake_vars` and create a new `win32_cmake_vars` as Windows is sufficiently different from other platforms. - Create `LLVM_DEFINES`, `LLVM_COPTS` and `LLVM_LINKOPTS` in `llvm.bzl` to set global compile/link flags for LLVM. - Create macro `llvm_cc_library` that wrap around `cc_library` to ensure that all targets receive `LLVM_COPTS` consistently. Replace all `cc_library` with `llvm_cc_library`. - For `support` library, include `lib/Support/Windows/*` for Windows and `lib/Support/Unix/*` for others. If `llvm.BUILD` is not to be edited manually no matter what, can the script used to generate `llvm.BUILD` be open-sourced? #15213 /cc @tatatodd Imported from GitHub PR #18293 Copybara import of the project: - a5e7b841d79878b12e0d0103e5b1813384a80aa8 [XLA/AOT] Build LLVM with Bazel on Windows by Loo Rong Jie <loorongjie@gmail.com> - b3a20c7bbff95fd8ad9f44c653a3ecffc54de3b3 Add back LLVM_ENABLE_STATS by Loo Rong Jie <loorongjie@gmail.com> - 787d451b495180f5c882d09d76222c157102f0fc Merge b3a20c7bbff95fd8ad9f44c653a3ecffc54de3b3 into 6a1ff... by Loo Rong Jie <loorongjie@gmail.com> COPYBARA_INTEGRATE_REVIEW=https://github.com/tensorflow/tensorflow/pull/18293 from rongjiecomputer:llvm b3a20c7bbff95fd8ad9f44c653a3ecffc54de3b3 PiperOrigin-RevId: 208073601
Diffstat (limited to 'third_party/llvm')
-rw-r--r--third_party/llvm/llvm.bzl169
1 files changed, 141 insertions, 28 deletions
diff --git a/third_party/llvm/llvm.bzl b/third_party/llvm/llvm.bzl
index d493a3c476..dd09fea92f 100644
--- a/third_party/llvm/llvm.bzl
+++ b/third_party/llvm/llvm.bzl
@@ -150,6 +150,35 @@ def expand_cmake_vars(name, src, dst, cmake_vars):
# The set of CMake variables common to all targets.
cmake_vars = {
+ # LLVM features
+ "ENABLE_BACKTRACES": 1,
+ "LLVM_BINDIR": "/dev/null",
+ "LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING": 0,
+ "LLVM_ENABLE_ABI_BREAKING_CHECKS": 0,
+ "LLVM_ENABLE_THREADS": 1,
+ "LLVM_ENABLE_ZLIB": 1,
+ "LLVM_HAS_ATOMICS": 1,
+ "LLVM_INCLUDEDIR": "/dev/null",
+ "LLVM_INFODIR": "/dev/null",
+ "LLVM_MANDIR": "/dev/null",
+ "LLVM_NATIVE_TARGET": 1,
+ "LLVM_NATIVE_TARGETINFO": 1,
+ "LLVM_NATIVE_TARGETMC": 1,
+ "LLVM_NATIVE_ASMPRINTER": 1,
+ "LLVM_NATIVE_ASMPARSER": 1,
+ "LLVM_NATIVE_DISASSEMBLER": 1,
+ "LLVM_PREFIX": "/dev/null",
+ "LLVM_VERSION_MAJOR": 0,
+ "LLVM_VERSION_MINOR": 0,
+ "LLVM_VERSION_PATCH": 0,
+ "PACKAGE_NAME": "llvm",
+ "PACKAGE_STRING": "llvm tensorflow-trunk",
+ "PACKAGE_VERSION": "tensorflow-trunk",
+ "RETSIGTYPE": "void",
+}
+
+# The set of CMake variables common to POSIX targets.
+posix_cmake_vars = {
# Headers
"HAVE_DIRENT_H": 1,
"HAVE_DLFCN_H": 1,
@@ -206,32 +235,8 @@ cmake_vars = {
"HAVE__UNWIND_BACKTRACE": 1,
# LLVM features
- "ENABLE_BACKTRACES": 1,
- "LLVM_BINDIR": "/dev/null",
- "LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING": 0,
- "LLVM_ENABLE_ABI_BREAKING_CHECKS": 0,
- "LLVM_ENABLE_THREADS": 1,
- "LLVM_ENABLE_ZLIB": 1,
- "LLVM_HAS_ATOMICS": 1,
- "LLVM_INCLUDEDIR": "/dev/null",
- "LLVM_INFODIR": "/dev/null",
- "LLVM_MANDIR": "/dev/null",
- "LLVM_NATIVE_TARGET": 1,
- "LLVM_NATIVE_TARGETINFO": 1,
- "LLVM_NATIVE_TARGETMC": 1,
- "LLVM_NATIVE_ASMPRINTER": 1,
- "LLVM_NATIVE_ASMPARSER": 1,
- "LLVM_NATIVE_DISASSEMBLER": 1,
"LLVM_ON_UNIX": 1,
- "LLVM_PREFIX": "/dev/null",
- "LLVM_VERSION_MAJOR": 0,
- "LLVM_VERSION_MINOR": 0,
- "LLVM_VERSION_PATCH": 0,
"LTDL_SHLIB_EXT": ".so",
- "PACKAGE_NAME": "llvm",
- "PACKAGE_STRING": "llvm tensorflow-trunk",
- "PACKAGE_VERSION": "tensorflow-trunk",
- "RETSIGTYPE": "void",
}
# CMake variables specific to the Linux platform
@@ -247,6 +252,40 @@ darwin_cmake_vars = {
"HAVE_MALLOC_MALLOC_H": 1,
}
+# CMake variables specific to the Windows platform.
+win32_cmake_vars = {
+ # Headers
+ "HAVE_ERRNO_H": 1,
+ "HAVE_EXECINFO_H": 1,
+ "HAVE_FCNTL_H": 1,
+ "HAVE_FENV_H": 1,
+ "HAVE_INTTYPES_H": 1,
+ "HAVE_MALLOC_H": 1,
+ "HAVE_SIGNAL_H": 1,
+ "HAVE_STDINT_H": 1,
+ "HAVE_SYS_STAT_H": 1,
+ "HAVE_SYS_TYPES_H": 1,
+ "HAVE_ZLIB_H": 1,
+
+ # Features
+ "BACKTRACE_HEADER": "execinfo.h",
+ "HAVE_GETCWD": 1,
+ "HAVE_INT64_T": 1,
+ "HAVE_STRERROR": 1,
+ "HAVE_STRTOLL": 1,
+ "HAVE_SYSCONF": 1,
+ "HAVE_UINT64_T": 1,
+ "HAVE__CHSIZE_S": 1,
+ "HAVE___CHKSTK": 1,
+
+ # MSVC specific
+ "stricmp": "_stricmp",
+ "strdup": "_strdup",
+
+ # LLVM features
+ "LTDL_SHLIB_EXT": ".dll",
+}
+
# Select a set of CMake variables based on the platform.
# TODO(phawkins): use a better method to select the right host triple, rather
# than hardcoding x86_64.
@@ -265,6 +304,13 @@ llvm_all_cmake_vars = select({
linux_cmake_vars,
),
),
+ "@org_tensorflow//tensorflow:windows": cmake_var_string(
+ _dict_add(
+ cmake_vars,
+ llvm_target_cmake_vars("X86", "x86_64-pc-win32"),
+ win32_cmake_vars,
+ ),
+ ),
"//conditions:default": cmake_var_string(
_dict_add(
cmake_vars,
@@ -274,23 +320,90 @@ llvm_all_cmake_vars = select({
),
})
-llvm_linkopts = ["-ldl", "-lm", "-lpthread"]
+llvm_linkopts = select({
+ "@org_tensorflow//tensorflow:windows": [],
+ "//conditions:default": ["-ldl", "-lm", "-lpthread"],
+})
-llvm_defines = [
+llvm_defines = select({
+ "@org_tensorflow//tensorflow:windows": [
+ "_CRT_SECURE_NO_DEPRECATE",
+ "_CRT_SECURE_NO_WARNINGS",
+ "_CRT_NONSTDC_NO_DEPRECATE",
+ "_CRT_NONSTDC_NO_WARNINGS",
+ "_SCL_SECURE_NO_DEPRECATE",
+ "_SCL_SECURE_NO_WARNINGS",
+ "UNICODE",
+ "_UNICODE",
+ ],
+ "//conditions:default": ["_DEBUG"],
+}) + [
"LLVM_ENABLE_STATS",
"__STDC_LIMIT_MACROS",
"__STDC_CONSTANT_MACROS",
"__STDC_FORMAT_MACROS",
- "_DEBUG",
"LLVM_BUILD_GLOBAL_ISEL",
]
-llvm_copts = []
+llvm_copts = select({
+ "@org_tensorflow//tensorflow:windows": [
+ "-Zc:inline",
+ "-Zc:strictStrings",
+ "-Zc:rvalueCast",
+ "-Oi",
+ "-wd4141",
+ "-wd4146",
+ "-wd4180",
+ "-wd4244",
+ "-wd4258",
+ "-wd4267",
+ "-wd4291",
+ "-wd4345",
+ "-wd4351",
+ "-wd4355",
+ "-wd4456",
+ "-wd4457",
+ "-wd4458",
+ "-wd4459",
+ "-wd4503",
+ "-wd4624",
+ "-wd4722",
+ "-wd4800",
+ "-wd4100",
+ "-wd4127",
+ "-wd4512",
+ "-wd4505",
+ "-wd4610",
+ "-wd4510",
+ "-wd4702",
+ "-wd4245",
+ "-wd4706",
+ "-wd4310",
+ "-wd4701",
+ "-wd4703",
+ "-wd4389",
+ "-wd4611",
+ "-wd4805",
+ "-wd4204",
+ "-wd4577",
+ "-wd4091",
+ "-wd4592",
+ "-wd4319",
+ "-wd4324",
+ "-w14062",
+ "-we4238",
+ ],
+ "//conditions:default": [],
+})
# Platform specific sources for libSupport.
def llvm_support_platform_specific_srcs_glob():
return select({
+ "@org_tensorflow//tensorflow:windows": native.glob([
+ "lib/Support/Windows/*.inc",
+ "lib/Support/Windows/*.h",
+ ]),
"//conditions:default": native.glob([
"lib/Support/Unix/*.inc",
"lib/Support/Unix/*.h",