diff options
Diffstat (limited to 'third_party')
24 files changed, 1641 insertions, 278 deletions
diff --git a/third_party/clang_toolchain/download_clang.bzl b/third_party/clang_toolchain/download_clang.bzl index 5ef47cdd0d..e782739661 100644 --- a/third_party/clang_toolchain/download_clang.bzl +++ b/third_party/clang_toolchain/download_clang.bzl @@ -39,15 +39,15 @@ def download_clang(repo_ctx, out_folder): # Latest CLANG_REVISION and CLANG_SUB_REVISION of the Chromiums's release # can be found in https://chromium.googlesource.com/chromium/src/tools/clang/+/master/scripts/update.py - CLANG_REVISION = "338452" + CLANG_REVISION = "340427" CLANG_SUB_REVISION = 1 package_version = "%s-%s" % (CLANG_REVISION, CLANG_SUB_REVISION) checksums = { - "Linux_x64": "213ba23a0a9855ede5041f66661caa9c5c59a573ec60b82a31839f9a97f397bf", - "Mac": "4267774201f8cb50c25e081375e87038d58db80064a20a0d9d7fe57ea4357ece", - "Win": "a8a5d5b25443c099e2c20d1a0cdce2f1d17e2dba84de66a6dc6a239ce3e78c34", + "Linux_x64": "8a8f21fb624fc7be7e91e439a13114847185375bb932db51ba590174ecaf764b", + "Mac": "ba894536b7c8d37103a5ddba784f268d55e65bb2ea1200a2cf9f2ef1590eaacd", + "Win": "c3f5bd977266dfd011411c94a13e00974b643b70fb0225a5fb030f7f703fa474", } platform_folder = _get_platform_folder(repo_ctx.os.name) diff --git a/third_party/flatbuffers/BUILD.bazel b/third_party/flatbuffers/BUILD.bazel index 9d233a30d6..934c0d9650 100644 --- a/third_party/flatbuffers/BUILD.bazel +++ b/third_party/flatbuffers/BUILD.bazel @@ -142,6 +142,7 @@ filegroup( srcs = [ "include/flatbuffers/base.h", "include/flatbuffers/flatbuffers.h", + "include/flatbuffers/minireflect.h", "include/flatbuffers/stl_emulation.h", "include/flatbuffers/util.h", ], diff --git a/third_party/flatbuffers/build_defs.bzl b/third_party/flatbuffers/build_defs.bzl index 2f25156668..235b44f7cf 100644 --- a/third_party/flatbuffers/build_defs.bzl +++ b/third_party/flatbuffers/build_defs.bzl @@ -92,14 +92,17 @@ def flatbuffer_library_public( cmd = reflection_genrule_cmd, message = "Generating flatbuffer reflection binary for %s:" % (name), ) - native.Fileset( - name = reflection_name, - out = "%s_out" % reflection_name, - entries = [ - native.FilesetEntry(files = reflection_outs), - ], - visibility = reflection_visiblity, - ) + # TODO(b/114456773): Make bazel rules proper and supported by flatbuffer + # Have to comment this since FilesetEntry is not supported in bazel + # skylark. + # native.Fileset( + # name = reflection_name, + # out = "%s_out" % reflection_name, + # entries = [ + # native.FilesetEntry(files = reflection_outs), + # ], + # visibility = reflection_visiblity, + # ) def flatbuffer_cc_library( name, diff --git a/third_party/gpus/crosstool/CROSSTOOL.tpl b/third_party/gpus/crosstool/CROSSTOOL.tpl index 3972c96a2f..3189cf8e31 100644 --- a/third_party/gpus/crosstool/CROSSTOOL.tpl +++ b/third_party/gpus/crosstool/CROSSTOOL.tpl @@ -208,7 +208,7 @@ toolchain { action: "c++-link-dynamic-library" action: "c++-link-nodeps-dynamic-library" flag_group { - flag: "-B/usr/bin/" + %{linker_bin_path_flag} } } } @@ -446,7 +446,7 @@ toolchain { action: "c++-link-dynamic-library" action: "c++-link-nodeps-dynamic-library" flag_group { - flag: "-B/usr/bin/" + %{linker_bin_path_flag} } } } diff --git a/third_party/gpus/cuda/remote.BUILD.tpl b/third_party/gpus/cuda/remote.BUILD.tpl index f774def5e6..100c7bb7c4 100644 --- a/third_party/gpus/cuda/remote.BUILD.tpl +++ b/third_party/gpus/cuda/remote.BUILD.tpl @@ -75,6 +75,11 @@ alias( ) alias( + name = "cudnn_header", + actual = "%{remote_cuda_repo}/cuda:cudnn_header", +) + +alias( name = "cufft", actual = "%{remote_cuda_repo}/cuda:cufft", ) diff --git a/third_party/gpus/cuda_configure.bzl b/third_party/gpus/cuda_configure.bzl index f6a39aeaf1..5648b1525a 100644 --- a/third_party/gpus/cuda_configure.bzl +++ b/third_party/gpus/cuda_configure.bzl @@ -1303,6 +1303,19 @@ def _create_local_cuda_repository(repository_ctx): host_compiler_includes = _host_compiler_includes(repository_ctx, cc_fullpath) cuda_defines = {} + # Bazel sets '-B/usr/bin' flag to workaround build errors on RHEL (see + # https://github.com/bazelbuild/bazel/issues/760). + # However, this stops our custom clang toolchain from picking the provided + # LLD linker, so we're only adding '-B/usr/bin' when using non-downloaded + # toolchain. + # TODO: when bazel stops adding '-B/usr/bin' by default, remove this + # flag from the CROSSTOOL completely (see + # https://github.com/bazelbuild/bazel/issues/5634) + if should_download_clang: + cuda_defines["%{linker_bin_path_flag}"] = "" + else: + cuda_defines["%{linker_bin_path_flag}"] = 'flag: "-B/usr/bin"' + if is_cuda_clang: cuda_defines["%{host_compiler_path}"] = str(cc) cuda_defines["%{host_compiler_warnings}"] = """ diff --git a/third_party/jpeg/jpeg.BUILD b/third_party/jpeg/jpeg.BUILD index 96e7ac061c..1b9b9bf2f5 100644 --- a/third_party/jpeg/jpeg.BUILD +++ b/third_party/jpeg/jpeg.BUILD @@ -11,8 +11,8 @@ libjpegturbo_nocopts = "-[W]error" WIN_COPTS = [ "/Ox", - "/w14711", # function 'function' selected for inline expansion - "/w14710", # 'function' : function not inlined + "-DWITH_SIMD", + "-wd4996", ] libjpegturbo_copts = select({ @@ -127,6 +127,7 @@ cc_library( ":armeabi-v7a": [":simd_armv7a"], ":arm64-v8a": [":simd_armv8a"], ":linux_ppc64le": [":simd_altivec"], + ":windows": [":simd_win_x86_64"], "//conditions:default": [":simd_none"], }), ) @@ -144,27 +145,27 @@ cc_library( "jpeglib.h", "jsimd.h", "jsimddct.h", - "simd/jccolor-altivec.c", - "simd/jcgray-altivec.c", - "simd/jcsample.h", - "simd/jcsample-altivec.c", - "simd/jdcolor-altivec.c", - "simd/jdmerge-altivec.c", - "simd/jdsample-altivec.c", - "simd/jfdctfst-altivec.c", - "simd/jfdctint-altivec.c", - "simd/jidctfst-altivec.c", - "simd/jidctint-altivec.c", - "simd/jquanti-altivec.c", "simd/jsimd.h", - "simd/jsimd_altivec.h", - "simd/jsimd_powerpc.c", + "simd/powerpc/jccolor-altivec.c", + "simd/powerpc/jcgray-altivec.c", + "simd/powerpc/jcsample-altivec.c", + "simd/powerpc/jdcolor-altivec.c", + "simd/powerpc/jdmerge-altivec.c", + "simd/powerpc/jdsample-altivec.c", + "simd/powerpc/jfdctfst-altivec.c", + "simd/powerpc/jfdctint-altivec.c", + "simd/powerpc/jidctfst-altivec.c", + "simd/powerpc/jidctint-altivec.c", + "simd/powerpc/jquanti-altivec.c", + "simd/powerpc/jsimd.c", ], hdrs = [ - "simd/jccolext-altivec.c", # should have been named .inc - "simd/jcgryext-altivec.c", # should have been named .inc - "simd/jdcolext-altivec.c", # should have been named .inc - "simd/jdmrgext-altivec.c", # should have been named .inc + "simd/powerpc/jccolext-altivec.c", + "simd/powerpc/jcgryext-altivec.c", + "simd/powerpc/jdcolext-altivec.c", + "simd/powerpc/jdmrgext-altivec.c", + "simd/powerpc/jcsample.h", + "simd/powerpc/jsimd_altivec.h", ], copts = libjpegturbo_copts, nocopts = libjpegturbo_nocopts, @@ -175,6 +176,7 @@ cc_library( srcs = [ "jchuff.h", "jconfig.h", + "jconfigint.h", "jdct.h", "jerror.h", "jinclude.h", @@ -183,24 +185,35 @@ cc_library( "jpeglib.h", "jsimd.h", "jsimddct.h", - "simd/jccolor-sse2-64.o", - "simd/jcgray-sse2-64.o", - "simd/jchuff-sse2-64.o", - "simd/jcsample-sse2-64.o", - "simd/jdcolor-sse2-64.o", - "simd/jdmerge-sse2-64.o", - "simd/jdsample-sse2-64.o", - "simd/jfdctflt-sse-64.o", - "simd/jfdctfst-sse2-64.o", - "simd/jfdctint-sse2-64.o", - "simd/jidctflt-sse2-64.o", - "simd/jidctfst-sse2-64.o", - "simd/jidctint-sse2-64.o", - "simd/jidctred-sse2-64.o", - "simd/jquantf-sse2-64.o", - "simd/jquanti-sse2-64.o", "simd/jsimd.h", - "simd/jsimd_x86_64.c", + "simd/x86_64/jsimd.c", + "simd/x86_64/jccolor-avx2.o", + "simd/x86_64/jccolor-sse2.o", + "simd/x86_64/jcgray-avx2.o", + "simd/x86_64/jcgray-sse2.o", + "simd/x86_64/jchuff-sse2.o", + "simd/x86_64/jcphuff-sse2.o", + "simd/x86_64/jcsample-avx2.o", + "simd/x86_64/jcsample-sse2.o", + "simd/x86_64/jdcolor-avx2.o", + "simd/x86_64/jdcolor-sse2.o", + "simd/x86_64/jdmerge-avx2.o", + "simd/x86_64/jdmerge-sse2.o", + "simd/x86_64/jdsample-avx2.o", + "simd/x86_64/jdsample-sse2.o", + "simd/x86_64/jfdctflt-sse.o", + "simd/x86_64/jfdctfst-sse2.o", + "simd/x86_64/jfdctint-avx2.o", + "simd/x86_64/jfdctint-sse2.o", + "simd/x86_64/jidctflt-sse2.o", + "simd/x86_64/jidctfst-sse2.o", + "simd/x86_64/jidctint-avx2.o", + "simd/x86_64/jidctint-sse2.o", + "simd/x86_64/jidctred-sse2.o", + "simd/x86_64/jquantf-sse2.o", + "simd/x86_64/jquanti-avx2.o", + "simd/x86_64/jquanti-sse2.o", + "simd/x86_64/jsimdcpu.o", ], copts = libjpegturbo_copts, linkstatic = 1, @@ -210,57 +223,88 @@ cc_library( genrule( name = "simd_x86_64_assemblage23", srcs = [ - "simd/jccolext-sse2-64.asm", - "simd/jccolor-sse2-64.asm", - "simd/jcgray-sse2-64.asm", - "simd/jcgryext-sse2-64.asm", - "simd/jchuff-sse2-64.asm", - "simd/jcolsamp.inc", - "simd/jcsample-sse2-64.asm", - "simd/jdcolext-sse2-64.asm", - "simd/jdcolor-sse2-64.asm", - "simd/jdct.inc", - "simd/jdmerge-sse2-64.asm", - "simd/jdmrgext-sse2-64.asm", - "simd/jdsample-sse2-64.asm", - "simd/jfdctflt-sse-64.asm", - "simd/jfdctfst-sse2-64.asm", - "simd/jfdctint-sse2-64.asm", - "simd/jidctflt-sse2-64.asm", - "simd/jidctfst-sse2-64.asm", - "simd/jidctint-sse2-64.asm", - "simd/jidctred-sse2-64.asm", - "simd/jpeg_nbits_table.inc", - "simd/jquantf-sse2-64.asm", - "simd/jquanti-sse2-64.asm", - "simd/jsimdcfg.inc", - "simd/jsimdext.inc", + "jconfig.h", + "jconfigint.h", + "simd/x86_64/jccolext-avx2.asm", + "simd/x86_64/jccolext-sse2.asm", + "simd/x86_64/jccolor-avx2.asm", + "simd/x86_64/jccolor-sse2.asm", + "simd/x86_64/jcgray-avx2.asm", + "simd/x86_64/jcgray-sse2.asm", + "simd/x86_64/jcgryext-avx2.asm", + "simd/x86_64/jcgryext-sse2.asm", + "simd/x86_64/jchuff-sse2.asm", + "simd/x86_64/jcphuff-sse2.asm", + "simd/x86_64/jcsample-avx2.asm", + "simd/x86_64/jcsample-sse2.asm", + "simd/x86_64/jdcolext-avx2.asm", + "simd/x86_64/jdcolext-sse2.asm", + "simd/x86_64/jdcolor-avx2.asm", + "simd/x86_64/jdcolor-sse2.asm", + "simd/x86_64/jdmerge-avx2.asm", + "simd/x86_64/jdmerge-sse2.asm", + "simd/x86_64/jdmrgext-avx2.asm", + "simd/x86_64/jdmrgext-sse2.asm", + "simd/x86_64/jdsample-avx2.asm", + "simd/x86_64/jdsample-sse2.asm", + "simd/x86_64/jfdctflt-sse.asm", + "simd/x86_64/jfdctfst-sse2.asm", + "simd/x86_64/jfdctint-avx2.asm", + "simd/x86_64/jfdctint-sse2.asm", + "simd/x86_64/jidctflt-sse2.asm", + "simd/x86_64/jidctfst-sse2.asm", + "simd/x86_64/jidctint-avx2.asm", + "simd/x86_64/jidctint-sse2.asm", + "simd/x86_64/jidctred-sse2.asm", + "simd/x86_64/jquantf-sse2.asm", + "simd/x86_64/jquanti-avx2.asm", + "simd/x86_64/jquanti-sse2.asm", + "simd/x86_64/jsimdcpu.asm", + "simd/nasm/jcolsamp.inc", + "simd/nasm/jdct.inc", + "simd/nasm/jpeg_nbits_table.inc", + "simd/nasm/jsimdcfg.inc", + "simd/nasm/jsimdcfg.inc.h", + "simd/nasm/jsimdext.inc", ], outs = [ - "simd/jccolor-sse2-64.o", - "simd/jcgray-sse2-64.o", - "simd/jchuff-sse2-64.o", - "simd/jcsample-sse2-64.o", - "simd/jdcolor-sse2-64.o", - "simd/jdmerge-sse2-64.o", - "simd/jdsample-sse2-64.o", - "simd/jfdctflt-sse-64.o", - "simd/jfdctfst-sse2-64.o", - "simd/jfdctint-sse2-64.o", - "simd/jidctflt-sse2-64.o", - "simd/jidctfst-sse2-64.o", - "simd/jidctint-sse2-64.o", - "simd/jidctred-sse2-64.o", - "simd/jquantf-sse2-64.o", - "simd/jquanti-sse2-64.o", + "simd/x86_64/jccolor-avx2.o", + "simd/x86_64/jccolor-sse2.o", + "simd/x86_64/jcgray-avx2.o", + "simd/x86_64/jcgray-sse2.o", + "simd/x86_64/jchuff-sse2.o", + "simd/x86_64/jcphuff-sse2.o", + "simd/x86_64/jcsample-avx2.o", + "simd/x86_64/jcsample-sse2.o", + "simd/x86_64/jdcolor-avx2.o", + "simd/x86_64/jdcolor-sse2.o", + "simd/x86_64/jdmerge-avx2.o", + "simd/x86_64/jdmerge-sse2.o", + "simd/x86_64/jdsample-avx2.o", + "simd/x86_64/jdsample-sse2.o", + "simd/x86_64/jfdctflt-sse.o", + "simd/x86_64/jfdctfst-sse2.o", + "simd/x86_64/jfdctint-avx2.o", + "simd/x86_64/jfdctint-sse2.o", + "simd/x86_64/jidctflt-sse2.o", + "simd/x86_64/jidctfst-sse2.o", + "simd/x86_64/jidctint-avx2.o", + "simd/x86_64/jidctint-sse2.o", + "simd/x86_64/jidctred-sse2.o", + "simd/x86_64/jquantf-sse2.o", + "simd/x86_64/jquanti-avx2.o", + "simd/x86_64/jquanti-sse2.o", + "simd/x86_64/jsimdcpu.o", ], cmd = "for out in $(OUTS); do\n" + " $(location @nasm//:nasm) -f elf64" + - " -DELF -DPIC -DRGBX_FILLER_0XFF -D__x86_64__ -DARCH_X86_64" + - " -I $$(dirname $(location simd/jdct.inc))/" + - " -I $$(dirname $(location simd/jsimdcfg.inc))/" + + " -DELF -DPIC -D__x86_64__" + + " -I $$(dirname $(location jconfig.h))/" + + " -I $$(dirname $(location jconfigint.h))/" + + " -I $$(dirname $(location simd/nasm/jsimdcfg.inc.h))/" + + " -I $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/" + " -o $$out" + - " $$(dirname $(location simd/jdct.inc))/$$(basename $${out%.o}.asm)\n" + + " $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/$$(basename $${out%.o}.asm)\n" + "done", tools = ["@nasm"], ) @@ -279,8 +323,8 @@ cc_library( "jsimd.h", "jsimddct.h", "simd/jsimd.h", - "simd/jsimd_arm.c", - "simd/jsimd_arm_neon.S", + "simd/arm/jsimd.c", + "simd/arm/jsimd_neon.S", ], copts = libjpegturbo_copts, nocopts = libjpegturbo_nocopts, @@ -300,14 +344,148 @@ cc_library( "jsimd.h", "jsimddct.h", "simd/jsimd.h", - "simd/jsimd_arm64.c", - "simd/jsimd_arm64_neon.S", + "simd/arm64/jsimd.c", + "simd/arm64/jsimd_neon.S", ], copts = libjpegturbo_copts, nocopts = libjpegturbo_nocopts, ) cc_library( + name = "simd_win_x86_64", + srcs = [ + "jchuff.h", + "jconfig.h", + "jconfigint.h", + "jdct.h", + "jerror.h", + "jinclude.h", + "jmorecfg.h", + "jpegint.h", + "jpeglib.h", + "jsimd.h", + "jsimddct.h", + "simd/jsimd.h", + "simd/x86_64/jsimd.c", + "simd/x86_64/jccolor-avx2.obj", + "simd/x86_64/jccolor-sse2.obj", + "simd/x86_64/jcgray-avx2.obj", + "simd/x86_64/jcgray-sse2.obj", + "simd/x86_64/jchuff-sse2.obj", + "simd/x86_64/jcphuff-sse2.obj", + "simd/x86_64/jcsample-avx2.obj", + "simd/x86_64/jcsample-sse2.obj", + "simd/x86_64/jdcolor-avx2.obj", + "simd/x86_64/jdcolor-sse2.obj", + "simd/x86_64/jdmerge-avx2.obj", + "simd/x86_64/jdmerge-sse2.obj", + "simd/x86_64/jdsample-avx2.obj", + "simd/x86_64/jdsample-sse2.obj", + "simd/x86_64/jfdctflt-sse.obj", + "simd/x86_64/jfdctfst-sse2.obj", + "simd/x86_64/jfdctint-avx2.obj", + "simd/x86_64/jfdctint-sse2.obj", + "simd/x86_64/jidctflt-sse2.obj", + "simd/x86_64/jidctfst-sse2.obj", + "simd/x86_64/jidctint-avx2.obj", + "simd/x86_64/jidctint-sse2.obj", + "simd/x86_64/jidctred-sse2.obj", + "simd/x86_64/jquantf-sse2.obj", + "simd/x86_64/jquanti-avx2.obj", + "simd/x86_64/jquanti-sse2.obj", + "simd/x86_64/jsimdcpu.obj", + ], + copts = libjpegturbo_copts, +) + +genrule( + name = "simd_win_x86_64_assemble", + srcs = [ + "jconfig.h", + "jconfigint.h", + "simd/x86_64/jccolext-avx2.asm", + "simd/x86_64/jccolext-sse2.asm", + "simd/x86_64/jccolor-avx2.asm", + "simd/x86_64/jccolor-sse2.asm", + "simd/x86_64/jcgray-avx2.asm", + "simd/x86_64/jcgray-sse2.asm", + "simd/x86_64/jcgryext-avx2.asm", + "simd/x86_64/jcgryext-sse2.asm", + "simd/x86_64/jchuff-sse2.asm", + "simd/x86_64/jcphuff-sse2.asm", + "simd/x86_64/jcsample-avx2.asm", + "simd/x86_64/jcsample-sse2.asm", + "simd/x86_64/jdcolext-avx2.asm", + "simd/x86_64/jdcolext-sse2.asm", + "simd/x86_64/jdcolor-avx2.asm", + "simd/x86_64/jdcolor-sse2.asm", + "simd/x86_64/jdmerge-avx2.asm", + "simd/x86_64/jdmerge-sse2.asm", + "simd/x86_64/jdmrgext-avx2.asm", + "simd/x86_64/jdmrgext-sse2.asm", + "simd/x86_64/jdsample-avx2.asm", + "simd/x86_64/jdsample-sse2.asm", + "simd/x86_64/jfdctflt-sse.asm", + "simd/x86_64/jfdctfst-sse2.asm", + "simd/x86_64/jfdctint-avx2.asm", + "simd/x86_64/jfdctint-sse2.asm", + "simd/x86_64/jidctflt-sse2.asm", + "simd/x86_64/jidctfst-sse2.asm", + "simd/x86_64/jidctint-avx2.asm", + "simd/x86_64/jidctint-sse2.asm", + "simd/x86_64/jidctred-sse2.asm", + "simd/x86_64/jquantf-sse2.asm", + "simd/x86_64/jquanti-avx2.asm", + "simd/x86_64/jquanti-sse2.asm", + "simd/x86_64/jsimdcpu.asm", + "simd/nasm/jcolsamp.inc", + "simd/nasm/jdct.inc", + "simd/nasm/jpeg_nbits_table.inc", + "simd/nasm/jsimdcfg.inc", + "simd/nasm/jsimdcfg.inc.h", + "simd/nasm/jsimdext.inc", + ], + outs = [ + "simd/x86_64/jccolor-avx2.obj", + "simd/x86_64/jccolor-sse2.obj", + "simd/x86_64/jcgray-avx2.obj", + "simd/x86_64/jcgray-sse2.obj", + "simd/x86_64/jchuff-sse2.obj", + "simd/x86_64/jcphuff-sse2.obj", + "simd/x86_64/jcsample-avx2.obj", + "simd/x86_64/jcsample-sse2.obj", + "simd/x86_64/jdcolor-avx2.obj", + "simd/x86_64/jdcolor-sse2.obj", + "simd/x86_64/jdmerge-avx2.obj", + "simd/x86_64/jdmerge-sse2.obj", + "simd/x86_64/jdsample-avx2.obj", + "simd/x86_64/jdsample-sse2.obj", + "simd/x86_64/jfdctflt-sse.obj", + "simd/x86_64/jfdctfst-sse2.obj", + "simd/x86_64/jfdctint-avx2.obj", + "simd/x86_64/jfdctint-sse2.obj", + "simd/x86_64/jidctflt-sse2.obj", + "simd/x86_64/jidctfst-sse2.obj", + "simd/x86_64/jidctint-avx2.obj", + "simd/x86_64/jidctint-sse2.obj", + "simd/x86_64/jidctred-sse2.obj", + "simd/x86_64/jquantf-sse2.obj", + "simd/x86_64/jquanti-avx2.obj", + "simd/x86_64/jquanti-sse2.obj", + "simd/x86_64/jsimdcpu.obj", + ], + cmd = "for out in $(OUTS); do\n" + + " $(location @nasm//:nasm) -fwin64 -DWIN64 -D__x86_64__" + + " -I $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/" + + " -I $$(dirname $(location simd/nasm/jdct.inc))/" + + " -I $$(dirname $(location simd/nasm/jdct.inc))/../../win/" + + " -o $$out" + + " $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/$$(basename $${out%.obj}.asm)\n" + + "done", + tools = ["@nasm"], +) + +cc_library( name = "simd_none", srcs = [ "jchuff.h", @@ -332,50 +510,44 @@ template_rule( out = "jconfig_win.h", substitutions = { "@JPEG_LIB_VERSION@": "62", - "@VERSION@": "1.5.1", - "@LIBJPEG_TURBO_VERSION_NUMBER@": "1005001", - "cmakedefine": "define", + "@VERSION@": "2.0.0", + "@LIBJPEG_TURBO_VERSION_NUMBER@": "2000000", "@BITS_IN_JSAMPLE@": "8", - }, -) - -template_rule( - name = "jconfigint_win", - src = "win/jconfigint.h.in", - out = "jconfigint_win.h", - substitutions = { - "@VERSION@": "1.5.1", - "@BUILD@": "20161115", - "@CMAKE_PROJECT_NAME@": "libjpeg-turbo", + "#cmakedefine C_ARITH_CODING_SUPPORTED": "#define C_ARITH_CODING_SUPPORTED", + "#cmakedefine D_ARITH_CODING_SUPPORTED": "#define D_ARITH_CODING_SUPPORTED", + "#cmakedefine MEM_SRCDST_SUPPORTED": "#define MEM_SRCDST_SUPPORTED", + "#cmakedefine WITH_SIMD": "", }, ) JCONFIG_NOWIN_COMMON_SUBSTITUTIONS = { - "LIBJPEG_TURBO_VERSION 0": "LIBJPEG_TURBO_VERSION 1.5.1", - "LIBJPEG_TURBO_VERSION_NUMBER 0": "LIBJPEG_TURBO_VERSION_NUMBER 1005001", - "#undef C_ARITH_CODING_SUPPORTED": "#define C_ARITH_CODING_SUPPORTED 1", - "#undef D_ARITH_CODING_SUPPORTED": "#define D_ARITH_CODING_SUPPORTED 1", - "#undef HAVE_LOCALE_H": "#define HAVE_LOCALE_H 1", - "#undef HAVE_STDDEF_H": "#define HAVE_STDDEF_H 1", - "#undef HAVE_STDLIB_H": "#define HAVE_STDLIB_H 1", - "#undef HAVE_UNSIGNED_CHAR": "#define HAVE_UNSIGNED_CHAR 1", - "#undef HAVE_UNSIGNED_SHORT": "#define HAVE_UNSIGNED_SHORT 1", - "#undef INCOMPLETE_TYPES_BROKEN": "", - "#undef MEM_SRCDST_SUPPORTED": "#define MEM_SRCDST_SUPPORTED 1", - "#undef NEED_BSD_STRINGS": "", - "#undef NEED_SYS_TYPES_H": "#define NEED_SYS_TYPES_H 1", - "#undef __CHAR_UNSIGNED__": "", + "@JPEG_LIB_VERSION@": "62", + "@VERSION@": "2.0.0", + "@LIBJPEG_TURBO_VERSION_NUMBER@": "2000000", + "#cmakedefine C_ARITH_CODING_SUPPORTED": "#define C_ARITH_CODING_SUPPORTED", + "#cmakedefine D_ARITH_CODING_SUPPORTED": "#define D_ARITH_CODING_SUPPORTED", + "#cmakedefine MEM_SRCDST_SUPPORTED": "#define MEM_SRCDST_SUPPORTED", + "@BITS_IN_JSAMPLE@": "8", + "#cmakedefine HAVE_LOCALE_H": "#define HAVE_LOCALE_H 1", + "#cmakedefine HAVE_STDDEF_H": "#define HAVE_STDDEF_H 1", + "#cmakedefine HAVE_STDLIB_H": "#define HAVE_STDLIB_H 1", + "#cmakedefine NEED_SYS_TYPES_H": "#define NEED_SYS_TYPES_H", + "#cmakedefine NEED_BSD_STRINGS": "", + "#cmakedefine HAVE_UNSIGNED_CHAR": "#define HAVE_UNSIGNED_CHAR 1", + "#cmakedefine HAVE_UNSIGNED_SHORT": "#define HAVE_UNSIGNED_SHORT 1", + "#cmakedefine INCOMPLETE_TYPES_BROKEN": "", + "#cmakedefine RIGHT_SHIFT_IS_UNSIGNED": "", + "#cmakedefine __CHAR_UNSIGNED__": "", "#undef const": "", "#undef size_t": "", - "#undef RIGHT_SHIFT_IS_UNSIGNED": "", } JCONFIG_NOWIN_SIMD_SUBSTITUTIONS = { - "#undef WITH_SIMD": "#define WITH_SIMD 1", + "#cmakedefine WITH_SIMD": "#define WITH_SIMD", } JCONFIG_NOWIN_NOSIMD_SUBSTITUTIONS = { - "#undef WITH_SIMD": "", + "#cmakedefine WITH_SIMD": "", } JCONFIG_NOWIN_SIMD_SUBSTITUTIONS.update(JCONFIG_NOWIN_COMMON_SUBSTITUTIONS) @@ -396,22 +568,55 @@ template_rule( substitutions = JCONFIG_NOWIN_SIMD_SUBSTITUTIONS, ) +JCONFIGINT_COMMON_SUBSTITUTIONS = { + "@BUILD@": "20180831", + "@VERSION@": "2.0.0", + "@CMAKE_PROJECT_NAME@": "libjpeg-turbo", + "#undef inline": "", + "#cmakedefine HAVE_INTRIN_H": "", +} + +JCONFIGINT_NOWIN_SUBSTITUTIONS = { + "#cmakedefine HAVE_BUILTIN_CTZL": "#define HAVE_BUILTIN_CTZL", + "@INLINE@": "inline __attribute__((always_inline))", + "#define SIZEOF_SIZE_T @SIZE_T@": "#if (__WORDSIZE==64 && !defined(__native_client__))\n" + + "#define SIZEOF_SIZE_T 8\n" + + "#else\n" + + "#define SIZEOF_SIZE_T 4\n" + + "#endif\n", +} + +JCONFIGINT_WIN_SUBSTITUTIONS = { + "#cmakedefine HAVE_BUILTIN_CTZL": "", + "#define INLINE @INLINE@": "#if defined(__GNUC__)\n" + + "#define INLINE inline __attribute__((always_inline))\n" + + "#elif defined(_MSC_VER)\n" + + "#define INLINE __forceinline\n" + + "#else\n" + + "#define INLINE\n" + + "#endif\n", + "#define SIZEOF_SIZE_T @SIZE_T@": "#if (__WORDSIZE==64)\n" + + "#define SIZEOF_SIZE_T 8\n" + + "#else\n" + + "#define SIZEOF_SIZE_T 4\n" + + "#endif\n", +} + +JCONFIGINT_NOWIN_SUBSTITUTIONS.update(JCONFIGINT_COMMON_SUBSTITUTIONS) +JCONFIGINT_WIN_SUBSTITUTIONS.update(JCONFIGINT_COMMON_SUBSTITUTIONS) + template_rule( name = "jconfigint_nowin", src = "jconfigint.h.in", out = "jconfigint_nowin.h", - substitutions = { - "#undef BUILD": "#define BUILD \"20161115\"", - "#undef inline": "", - "#undef INLINE": "#define INLINE inline __attribute__((always_inline))", - "#undef PACKAGE_NAME": "#define PACKAGE_NAME \"libjpeg-turbo\"", - "#undef VERSION": "#define VERSION \"1.5.1\"", - "#undef SIZEOF_SIZE_T": "#if (__WORDSIZE==64 && !defined(__native_client__))\n" + - "#define SIZEOF_SIZE_T 8\n" + - "#else\n" + - "#define SIZEOF_SIZE_T 4\n" + - "#endif\n", - }, + substitutions = JCONFIGINT_NOWIN_SUBSTITUTIONS, +) + +template_rule( + name = "jconfigint_win", + src = "jconfigint.h.in", + out = "jconfigint_win.h", + substitutions = JCONFIGINT_WIN_SUBSTITUTIONS, ) genrule( diff --git a/third_party/llvm/llvm.autogenerated.BUILD b/third_party/llvm/llvm.autogenerated.BUILD index 0ac27e26a4..776935739a 100644 --- a/third_party/llvm/llvm.autogenerated.BUILD +++ b/third_party/llvm/llvm.autogenerated.BUILD @@ -109,16 +109,23 @@ template_rule( ) # A common library that all LLVM targets depend on. +# TODO(b/113996071): We need to glob all potentially #included files and stage +# them here because LLVM's build files are not strict headers clean, and remote +# build execution requires all inputs to be depended upon. cc_library( name = "config", - hdrs = [ + hdrs = glob([ + "**/*.h", + "**/*.def", + "**/*.inc.cpp", + ]) + [ "include/llvm/Config/AsmParsers.def", "include/llvm/Config/AsmPrinters.def", "include/llvm/Config/Disassemblers.def", "include/llvm/Config/Targets.def", - "include/llvm/Config/abi-breaking.h", "include/llvm/Config/config.h", "include/llvm/Config/llvm-config.h", + "include/llvm/Config/abi-breaking.h", ], defines = llvm_defines, includes = ["include"], diff --git a/third_party/llvm/llvm.bzl b/third_party/llvm/llvm.bzl index 586935b6e6..54ca86f327 100644 --- a/third_party/llvm/llvm.bzl +++ b/third_party/llvm/llvm.bzl @@ -405,7 +405,7 @@ def llvm_support_platform_specific_srcs_glob(): return select({ "@org_tensorflow//tensorflow:windows": native.glob([ "lib/Support/Windows/*.inc", - "lib/Support/Windows/*.h" + "lib/Support/Windows/*.h", ]), "//conditions:default": native.glob([ "lib/Support/Unix/*.inc", diff --git a/third_party/mkl/build_defs.bzl b/third_party/mkl/build_defs.bzl index 06a8c3518c..b645c0fc5c 100644 --- a/third_party/mkl/build_defs.bzl +++ b/third_party/mkl/build_defs.bzl @@ -11,10 +11,8 @@ mkl_repository depends on the following environment variables: * `TF_MKL_ROOT`: The root folder where a copy of libmkl is located. """ - _TF_MKL_ROOT = "TF_MKL_ROOT" - def if_mkl(if_true, if_false = []): """Shorthand for select()'ing on whether we're building with MKL. @@ -26,7 +24,7 @@ def if_mkl(if_true, if_false = []): a select evaluating to either if_true or if_false as appropriate. """ return select({ - "//third_party/mkl:using_mkl": if_true, + str(Label("//third_party/mkl:using_mkl")): if_true, "//conditions:default": if_false, }) @@ -42,11 +40,10 @@ def if_mkl_ml(if_true, if_false = []): a select evaluating to either if_true or if_false as appropriate. """ return select({ - "//third_party/mkl_dnn:using_mkl_dnn_only": - if_false, - "//third_party/mkl:using_mkl": if_true, + str(Label("//third_party/mkl_dnn:using_mkl_dnn_only")): if_false, + str(Label("//third_party/mkl:using_mkl")): if_true, "//conditions:default": if_false, - }) + }) def if_mkl_ml_only(if_true, if_false = []): """Shorthand for select()'ing on whether we're building with MKL-ML only. @@ -59,7 +56,7 @@ def if_mkl_ml_only(if_true, if_false = []): a select evaluating to either if_true or if_false as appropriate. """ return select({ - "//third_party/mkl:using_mkl_ml_only": if_true, + str(Label("//third_party/mkl:using_mkl_ml_only")): if_true, "//conditions:default": if_false, }) @@ -76,7 +73,7 @@ def if_mkl_lnx_x64(if_true, if_false = []): a select evaluating to either if_true or if_false as appropriate. """ return select({ - "//third_party/mkl:using_mkl_lnx_x64": if_true, + str(Label("//third_party/mkl:using_mkl_lnx_x64")): if_true, "//conditions:default": if_false, }) @@ -90,45 +87,40 @@ def mkl_deps(): inclusion in the deps attribute of rules. """ return select({ - "//third_party/mkl_dnn:using_mkl_dnn_only": - ["@mkl_dnn"], - "//third_party/mkl:using_mkl_ml_only": - ["//third_party/mkl:intel_binary_blob"], - "//third_party/mkl:using_mkl": - [ + str(Label("//third_party/mkl_dnn:using_mkl_dnn_only")): ["@mkl_dnn"], + str(Label("//third_party/mkl:using_mkl_ml_only")): ["//third_party/mkl:intel_binary_blob"], + str(Label("//third_party/mkl:using_mkl")): [ "//third_party/mkl:intel_binary_blob", - "@mkl_dnn" + "@mkl_dnn", ], - "//conditions:default": [] - }) + "//conditions:default": [], + }) def _enable_local_mkl(repository_ctx): - return _TF_MKL_ROOT in repository_ctx.os.environ - + return _TF_MKL_ROOT in repository_ctx.os.environ def _mkl_autoconf_impl(repository_ctx): - """Implementation of the local_mkl_autoconf repository rule.""" - - if _enable_local_mkl(repository_ctx): - # Symlink lib and include local folders. - mkl_root = repository_ctx.os.environ[_TF_MKL_ROOT] - mkl_lib_path = "%s/lib" % mkl_root - repository_ctx.symlink(mkl_lib_path, "lib") - mkl_include_path = "%s/include" % mkl_root - repository_ctx.symlink(mkl_include_path, "include") - mkl_license_path = "%s/license.txt" % mkl_root - repository_ctx.symlink(mkl_license_path, "license.txt") - else: - # setup remote mkl repository. - repository_ctx.download_and_extract( - repository_ctx.attr.urls, - sha256=repository_ctx.attr.sha256, - stripPrefix=repository_ctx.attr.strip_prefix, - ) - - # Also setup BUILD file. - repository_ctx.symlink(repository_ctx.attr.build_file, "BUILD") - + """Implementation of the local_mkl_autoconf repository rule.""" + + if _enable_local_mkl(repository_ctx): + # Symlink lib and include local folders. + mkl_root = repository_ctx.os.environ[_TF_MKL_ROOT] + mkl_lib_path = "%s/lib" % mkl_root + repository_ctx.symlink(mkl_lib_path, "lib") + mkl_include_path = "%s/include" % mkl_root + repository_ctx.symlink(mkl_include_path, "include") + mkl_license_path = "%s/license.txt" % mkl_root + repository_ctx.symlink(mkl_license_path, "license.txt") + else: + # setup remote mkl repository. + repository_ctx.download_and_extract( + repository_ctx.attr.urls, + sha256 = repository_ctx.attr.sha256, + stripPrefix = repository_ctx.attr.strip_prefix, + ) + + # Also setup BUILD file. + repository_ctx.symlink(repository_ctx.attr.build_file, "BUILD") mkl_repository = repository_rule( implementation = _mkl_autoconf_impl, diff --git a/third_party/nasm.BUILD b/third_party/nasm.BUILD index 2b877883b9..d746a65e7e 100644 --- a/third_party/nasm.BUILD +++ b/third_party/nasm.BUILD @@ -133,7 +133,10 @@ cc_binary( "x86/regs.c", "x86/regs.h", "x86/regvals.c", - ], + ] + select({ + ":windows": ["config/msvc.h"], + "//conditions:default": [], + }), includes = [ "asm", "include", diff --git a/third_party/nccl/BUILD b/third_party/nccl/BUILD new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/third_party/nccl/BUILD diff --git a/third_party/nccl/nccl_configure.bzl b/third_party/nccl/nccl_configure.bzl index 5d1ebf0686..ce9447096e 100644 --- a/third_party/nccl/nccl_configure.bzl +++ b/third_party/nccl/nccl_configure.bzl @@ -16,6 +16,7 @@ load( _NCCL_INSTALL_PATH = "NCCL_INSTALL_PATH" _TF_NCCL_VERSION = "TF_NCCL_VERSION" +_TF_NCCL_CONFIG_REPO = "TF_NCCL_CONFIG_REPO" _DEFINE_NCCL_MAJOR = "#define NCCL_MAJOR" _DEFINE_NCCL_MINOR = "#define NCCL_MINOR" @@ -48,25 +49,8 @@ alias( """ # Local build results in dynamic link and the license should not be included. -_NCCL_LOCAL_BUILD_TEMPLATE = """ -filegroup( - name = "LICENSE", - visibility = ["//visibility:public"], -) - -cc_library( - name = "nccl", - srcs = ["nccl/lib/libnccl.so.%s"], - hdrs = ["nccl/include/nccl.h"], - include_prefix = "third_party/nccl", - strip_include_prefix = "nccl/include", - deps = [ - "@local_config_cuda//cuda:cuda_headers", - ], - visibility = ["//visibility:public"], -) -""" - +_NCCL_REMOTE_BUILD_TEMPLATE = Label("//third_party/nccl:remote.BUILD.tpl") +_NCCL_LOCAL_BUILD_TEMPLATE = Label("//third_party/nccl:system.BUILD.tpl") def _find_nccl_header(repository_ctx, nccl_install_path): """Finds the NCCL header on the system. @@ -137,6 +121,13 @@ def _nccl_configure_impl(repository_ctx): repository_ctx.file("BUILD", _NCCL_DUMMY_BUILD_CONTENT) return + if _TF_NCCL_CONFIG_REPO in repository_ctx.os.environ: + # Forward to the pre-configured remote repository. + repository_ctx.template("BUILD", _NCCL_REMOTE_BUILD_TEMPLATE, { + "%{target}": repository_ctx.os.environ[_TF_NCCL_CONFIG_REPO], + }) + return + nccl_version = repository_ctx.os.environ[_TF_NCCL_VERSION].strip() if matches_version("1", nccl_version): # Alias to GitHub target from @nccl_archive. @@ -148,8 +139,10 @@ def _nccl_configure_impl(repository_ctx): # Create target for locally installed NCCL. nccl_install_path = repository_ctx.os.environ[_NCCL_INSTALL_PATH].strip() _check_nccl_version(repository_ctx, nccl_install_path, nccl_version) - repository_ctx.symlink(nccl_install_path, "nccl") - repository_ctx.file("BUILD", _NCCL_LOCAL_BUILD_TEMPLATE % nccl_version) + repository_ctx.template("BUILD", _NCCL_LOCAL_BUILD_TEMPLATE, { + "%{version}": nccl_version, + "%{install_path}": nccl_install_path, + }) nccl_configure = repository_rule( diff --git a/third_party/nccl/remote.BUILD.tpl b/third_party/nccl/remote.BUILD.tpl new file mode 100644 index 0000000000..d66fc5563d --- /dev/null +++ b/third_party/nccl/remote.BUILD.tpl @@ -0,0 +1,6 @@ +licenses(["restricted"]) + +package(default_visibility = ["//visibility:public"]) + +alias(name="LICENSE", actual = "%{target}:LICENSE") +alias(name = "nccl", actual = "%{target}:nccl") diff --git a/third_party/nccl/system.BUILD.tpl b/third_party/nccl/system.BUILD.tpl new file mode 100644 index 0000000000..7ca835dedf --- /dev/null +++ b/third_party/nccl/system.BUILD.tpl @@ -0,0 +1,26 @@ +filegroup( + name = "LICENSE", + visibility = ["//visibility:public"], +) + +cc_library( + name = "nccl", + srcs = ["libnccl.so.%{version}"], + hdrs = ["nccl.h"], + include_prefix = "third_party/nccl", + deps = [ + "@local_config_cuda//cuda:cuda_headers", + ], + visibility = ["//visibility:public"], +) + +genrule( + name = "nccl-files", + outs = [ + "libnccl.so.%{version}", + "nccl.h", + ], + cmd = """cp "%{install_path}/include/nccl.h" "$(@D)/nccl.h" && + cp "%{install_path}/lib/libnccl.so.%{version}" "$(@D)/libnccl.so.%{version}" """, +) + diff --git a/third_party/ngraph/ngraph.BUILD b/third_party/ngraph/ngraph.BUILD index f73ce4f674..31aa3cee51 100644 --- a/third_party/ngraph/ngraph.BUILD +++ b/third_party/ngraph/ngraph.BUILD @@ -1,14 +1,6 @@ licenses(["notice"]) # 3-Clause BSD -exports_files(["license.txt"]) - -filegroup( - name = "LICENSE", - srcs = [ - "license.txt", - ], - visibility = ["//visibility:public"], -) +exports_files(["LICENSE"]) cc_library( name = "ngraph_core", diff --git a/third_party/ngraph/ngraph_tf.BUILD b/third_party/ngraph/ngraph_tf.BUILD index 0c2c8a718f..4d96ccf2f2 100644 --- a/third_party/ngraph/ngraph_tf.BUILD +++ b/third_party/ngraph/ngraph_tf.BUILD @@ -1,14 +1,6 @@ licenses(["notice"]) # 3-Clause BSD -exports_files(["license.txt"]) - -filegroup( - name = "LICENSE", - srcs = [ - "license.txt", - ], - visibility = ["//visibility:public"], -) +exports_files(["LICENSE"]) load( "@org_tensorflow//tensorflow:tensorflow.bzl", diff --git a/third_party/ngraph/nlohmann_json.BUILD b/third_party/ngraph/nlohmann_json.BUILD index a0b18a51cb..04c8db6a96 100644 --- a/third_party/ngraph/nlohmann_json.BUILD +++ b/third_party/ngraph/nlohmann_json.BUILD @@ -1,14 +1,6 @@ licenses(["notice"]) # 3-Clause BSD -exports_files(["license.txt"]) - -filegroup( - name = "LICENSE", - srcs = [ - "license.txt", - ], - visibility = ["//visibility:public"], -) +exports_files(["LICENSE.MIT"]) cc_library( name = "nlohmann_json_lib", diff --git a/third_party/toolchains/gpus/crosstool/BUILD b/third_party/toolchains/gpus/crosstool/BUILD index 1f9065007c..bb0b6b3bbb 100644 --- a/third_party/toolchains/gpus/crosstool/BUILD +++ b/third_party/toolchains/gpus/crosstool/BUILD @@ -11,6 +11,7 @@ cc_toolchain_suite( toolchains = { "local|compiler": ":cc-compiler-local", "darwin|compiler": ":cc-compiler-darwin", + "x64_windows|msvc-cl": ":cc-compiler-windows", }, ) @@ -46,6 +47,20 @@ cc_toolchain( supports_param_files = 0, ) +cc_toolchain( + name = "cc-compiler-windows", + all_files = ":empty", + compiler_files = ":empty", + cpu = "x64_windows", + dwp_files = ":empty", + dynamic_runtime_libs = [":empty"], + linker_files = ":empty", + objcopy_files = ":empty", + static_runtime_libs = [":empty"], + strip_files = ":empty", + supports_param_files = 1, +) + filegroup( name = "empty", srcs = [], @@ -55,3 +70,8 @@ filegroup( name = "crosstool_wrapper_driver_is_not_gcc", srcs = ["clang/bin/crosstool_wrapper_driver_is_not_gcc"], ) + +filegroup( + name = "windows_msvc_wrapper_files", + srcs = glob(["windows/msvc_*"]), +) diff --git a/third_party/toolchains/gpus/crosstool/CROSSTOOL b/third_party/toolchains/gpus/crosstool/CROSSTOOL index d6ee7e38c4..b8eeb31ecb 100644 --- a/third_party/toolchains/gpus/crosstool/CROSSTOOL +++ b/third_party/toolchains/gpus/crosstool/CROSSTOOL @@ -26,6 +26,10 @@ default_toolchain { cpu: "ppc" toolchain_identifier: "local_linux" } +default_toolchain { + cpu: "x64_windows" + toolchain_identifier: "local_windows" +} toolchain { abi_version: "local" @@ -144,9 +148,11 @@ toolchain { flag_group { # All warnings are enabled. Maybe enable -Werror as well? flag: "-Wall" + # Some parts of the codebase set -Werror and hit this warning, so # switch it off for now. flag: "-Wno-invalid-partial-specialization" + } } } @@ -307,3 +313,1120 @@ toolchain { cxx_builtin_include_directory: "/usr/include/x86_64-linux-gnu" cxx_builtin_include_directory: "/usr/include" } + +toolchain { + abi_version: "local" + abi_libc_version: "local" + compiler: "compiler" + host_system_name: "local" + needsPic: true + target_libc: "macosx" + target_cpu: "darwin" + target_system_name: "local" + toolchain_identifier: "local_darwin" + feature { + name: "c++11" + flag_set { + action: "c++-compile" + flag_group { + flag: "-std=c++11" + } + } + } + + feature { + name: "stdlib" + flag_set { + action: "c++-link-executable" + action: "c++-link-dynamic-library" + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: "-lc++" + } + } + } + + feature { + name: "determinism" + flag_set { + action: "c-compile" + action: "c++-compile" + flag_group { + # Make C++ compilation deterministic. Use linkstamping instead of these + # compiler symbols. + flag: "-Wno-builtin-macro-redefined" + flag: "-D__DATE__=\"redacted\"" + flag: "-D__TIMESTAMP__=\"redacted\"" + flag: "-D__TIME__=\"redacted\"" + } + } + } + + # This feature will be enabled for builds that support pic by bazel. + feature { + name: "pic" + flag_set { + action: "c-compile" + action: "c++-compile" + flag_group { + expand_if_all_available: "pic" + flag: "-fPIC" + } + flag_group { + expand_if_none_available: "pic" + flag: "-fPIE" + } + } + } + + # Security hardening on by default. + feature { + name: "hardening" + flag_set { + action: "c-compile" + action: "c++-compile" + flag_group { + # Conservative choice; -D_FORTIFY_SOURCE=2 may be unsafe in some cases. + # We need to undef it before redefining it as some distributions now + # have it enabled by default. + flag: "-U_FORTIFY_SOURCE" + flag: "-D_FORTIFY_SOURCE=1" + flag: "-fstack-protector" + } + } + flag_set { + action: "c++-link-executable" + flag_group { + flag: "-pie" + } + } + } + + feature { + name: "warnings" + flag_set { + action: "c-compile" + action: "c++-compile" + flag_group { + # All warnings are enabled. Maybe enable -Werror as well? + flag: "-Wall" + + # Some parts of the codebase set -Werror and hit this warning, so + # switch it off for now. + flag: "-Wno-invalid-partial-specialization" + + } + } + } + + # Keep stack frames for debugging, even in opt mode. + feature { + name: "frame-pointer" + flag_set { + action: "c-compile" + action: "c++-compile" + flag_group { + flag: "-fno-omit-frame-pointer" + } + } + } + + feature { + name: "no-canonical-prefixes" + flag_set { + action: "c-compile" + action: "c++-compile" + action: "c++-link-executable" + action: "c++-link-dynamic-library" + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag:"-no-canonical-prefixes" + } + } + } + + feature { + name: "disable-assertions" + flag_set { + action: "c-compile" + action: "c++-compile" + flag_group { + flag: "-DNDEBUG" + } + } + } + + feature { + name: "linker-bin-path" + + flag_set { + action: "c++-link-executable" + action: "c++-link-dynamic-library" + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: "-B/usr/bin/" + } + } + } + + feature { + name: "undefined-dynamic" + flag_set { + action: "c++-link-dynamic-library" + action: "c++-link-nodeps-dynamic-library" + action: "c++-link-executable" + flag_group { + flag: "-undefined" + flag: "dynamic_lookup" + } + } + } + + feature { + name: "common" + implies: "stdlib" + implies: "c++11" + implies: "determinism" + implies: "hardening" + implies: "warnings" + implies: "frame-pointer" + implies: "no-canonical-prefixes" + implies: "linker-bin-path" + implies: "undefined-dynamic" + } + + feature { + name: "opt" + implies: "common" + implies: "disable-assertions" + + flag_set { + action: "c-compile" + action: "c++-compile" + flag_group { + # No debug symbols. + # Maybe we should enable https://gcc.gnu.org/wiki/DebugFission for opt + # or even generally? However, that can't happen here, as it requires + # special handling in Bazel. + flag: "-g0" + + # Conservative choice for -O + # -O3 can increase binary size and even slow down the resulting binaries. + # Profile first and / or use FDO if you need better performance than this. + flag: "-O2" + + # Removal of unused code and data at link time (can this increase binary size in some cases?). + flag: "-ffunction-sections" + flag: "-fdata-sections" + } + } + } + + feature { + name: "fastbuild" + implies: "common" + } + + feature { + name: "dbg" + implies: "common" + flag_set { + action: "c-compile" + action: "c++-compile" + flag_group { + flag: "-g" + } + } + } + + # Set clang as a C/C++ compiler. + tool_path { name: "gcc" path: "/usr/local/bin/clang" } + + # Use the default system toolchain for everything else. + tool_path { name: "ar" path: "/usr/bin/libtool" } + tool_path { name: "compat-ld" path: "/usr/bin/ld" } + tool_path { name: "cpp" path: "/usr/bin/cpp" } + tool_path { name: "dwp" path: "/usr/bin/dwp" } + tool_path { name: "gcov" path: "/usr/bin/gcov" } + tool_path { name: "ld" path: "/usr/bin/ld" } + tool_path { name: "nm" path: "/usr/bin/nm" } + tool_path { name: "objcopy" path: "/usr/bin/objcopy" } + tool_path { name: "objdump" path: "/usr/bin/objdump" } + tool_path { name: "strip" path: "/usr/bin/strip" } + + # Enabled dynamic linking. + linking_mode_flags { mode: DYNAMIC } + + cxx_builtin_include_directory: "/usr/include/c++/5.4.0" + cxx_builtin_include_directory: "/usr/include/x86_64-linux-gnu/c++/5.4.0" + cxx_builtin_include_directory: "/usr/include/c++/5.4.0/backward" + cxx_builtin_include_directory: "/usr/local/include" + cxx_builtin_include_directory: "/usr/local/lib/clang/7.0.0/include" + cxx_builtin_include_directory: "/usr/include/x86_64-linux-gnu" + cxx_builtin_include_directory: "/usr/include" +} + +toolchain { + toolchain_identifier: "local_windows" + host_system_name: "local" + target_system_name: "local" + + abi_version: "local" + abi_libc_version: "local" + target_cpu: "x64_windows" + compiler: "msvc-cl" + target_libc: "msvcrt" + + + + tool_path { + name: "ar" + path: "" + } + tool_path { + name: "ml" + path: "" + } + tool_path { + name: "cpp" + path: "" + } + tool_path { + name: "gcc" + path: "" + } + tool_path { + name: "gcov" + path: "wrapper/bin/msvc_nop.bat" + } + tool_path { + name: "ld" + path: "" + } + tool_path { + name: "nm" + path: "wrapper/bin/msvc_nop.bat" + } + tool_path { + name: "objcopy" + path: "wrapper/bin/msvc_nop.bat" + } + tool_path { + name: "objdump" + path: "wrapper/bin/msvc_nop.bat" + } + tool_path { + name: "strip" + path: "wrapper/bin/msvc_nop.bat" + } + supports_interface_shared_objects: true + + # TODO(pcloudy): Review those flags below, they should be defined by cl.exe + compiler_flag: "/DCOMPILER_MSVC" + + # Don't define min/max macros in windows.h. + compiler_flag: "/DNOMINMAX" + + # Platform defines. + compiler_flag: "/D_WIN32_WINNT=0x0600" + # Turn off warning messages. + compiler_flag: "/D_CRT_SECURE_NO_DEPRECATE" + compiler_flag: "/D_CRT_SECURE_NO_WARNINGS" + compiler_flag: "/D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS" + + # Useful options to have on for compilation. + # Increase the capacity of object files to 2^32 sections. + compiler_flag: "/bigobj" + # Allocate 500MB for precomputed headers. + compiler_flag: "/Zm500" + # Use unsigned char by default. + compiler_flag: "/J" + # Use function level linking. + compiler_flag: "/Gy" + # Use string pooling. + compiler_flag: "/GF" + # Catch C++ exceptions only and tell the compiler to assume that functions declared + # as extern "C" never throw a C++ exception. + compiler_flag: "/EHsc" + + # Globally disabled warnings. + # Don't warn about elements of array being be default initialized. + compiler_flag: "/wd4351" + # Don't warn about no matching delete found. + compiler_flag: "/wd4291" + # Don't warn about diamond inheritance patterns. + compiler_flag: "/wd4250" + # Don't warn about insecure functions (e.g. non _s functions). + compiler_flag: "/wd4996" + + linker_flag: "/MACHINE:X64" + + feature { + name: "no_legacy_features" + } + + # Suppress startup banner. + feature { + name: "nologo" + flag_set { + action: "c-compile" + action: "c++-compile" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "c++-header-parsing" + action: "assemble" + action: "preprocess-assemble" + action: "c++-link-executable" + action: "c++-link-dynamic-library" + action: "c++-link-nodeps-dynamic-library" + action: "c++-link-static-library" + flag_group { + flag: "/nologo" + } + } + } + + feature { + name: 'has_configured_linker_path' + } + + # This feature indicates strip is not supported, building stripped binary will just result a copy of orignial binary + feature { + name: 'no_stripping' + } + + # This feature indicates this is a toolchain targeting Windows. + feature { + name: 'targets_windows' + implies: 'copy_dynamic_libraries_to_binary' + enabled: true + } + + feature { + name: 'copy_dynamic_libraries_to_binary' + } + + action_config { + config_name: 'assemble' + action_name: 'assemble' + tool { + tool_path: '' + } + implies: 'compiler_input_flags' + implies: 'compiler_output_flags' + implies: 'nologo' + implies: 'msvc_env' + implies: 'sysroot' + } + + action_config { + config_name: 'preprocess-assemble' + action_name: 'preprocess-assemble' + tool { + tool_path: '' + } + implies: 'compiler_input_flags' + implies: 'compiler_output_flags' + implies: 'nologo' + implies: 'msvc_env' + implies: 'sysroot' + } + + action_config { + config_name: 'c-compile' + action_name: 'c-compile' + tool { + tool_path: '' + } + implies: 'compiler_input_flags' + implies: 'compiler_output_flags' + implies: 'legacy_compile_flags' + implies: 'nologo' + implies: 'msvc_env' + implies: 'parse_showincludes' + implies: 'user_compile_flags' + implies: 'sysroot' + implies: 'unfiltered_compile_flags' + } + + action_config { + config_name: 'c++-compile' + action_name: 'c++-compile' + tool { + tool_path: '' + } + implies: 'compiler_input_flags' + implies: 'compiler_output_flags' + implies: 'legacy_compile_flags' + implies: 'nologo' + implies: 'msvc_env' + implies: 'parse_showincludes' + implies: 'user_compile_flags' + implies: 'sysroot' + implies: 'unfiltered_compile_flags' + } + + action_config { + config_name: 'c++-link-executable' + action_name: 'c++-link-executable' + tool { + tool_path: '' + } + implies: 'nologo' + implies: 'linkstamps' + implies: 'output_execpath_flags' + implies: 'input_param_flags' + implies: 'user_link_flags' + implies: 'legacy_link_flags' + implies: 'linker_subsystem_flag' + implies: 'linker_param_file' + implies: 'msvc_env' + implies: 'no_stripping' + } + + action_config { + config_name: 'c++-link-dynamic-library' + action_name: 'c++-link-dynamic-library' + tool { + tool_path: '' + } + implies: 'nologo' + implies: 'shared_flag' + implies: 'linkstamps' + implies: 'output_execpath_flags' + implies: 'input_param_flags' + implies: 'user_link_flags' + implies: 'legacy_link_flags' + implies: 'linker_subsystem_flag' + implies: 'linker_param_file' + implies: 'msvc_env' + implies: 'no_stripping' + implies: 'has_configured_linker_path' + implies: 'def_file' + } + + action_config { + config_name: 'c++-link-nodeps-dynamic-library' + action_name: 'c++-link-nodeps-dynamic-library' + tool { + tool_path: '' + } + implies: 'nologo' + implies: 'shared_flag' + implies: 'linkstamps' + implies: 'output_execpath_flags' + implies: 'input_param_flags' + implies: 'user_link_flags' + implies: 'legacy_link_flags' + implies: 'linker_subsystem_flag' + implies: 'linker_param_file' + implies: 'msvc_env' + implies: 'no_stripping' + implies: 'has_configured_linker_path' + implies: 'def_file' + } + + action_config { + config_name: 'c++-link-static-library' + action_name: 'c++-link-static-library' + tool { + tool_path: '' + } + implies: 'nologo' + implies: 'archiver_flags' + implies: 'input_param_flags' + implies: 'linker_param_file' + implies: 'msvc_env' + } + + # TODO(b/65151735): Remove legacy_compile_flags feature when legacy fields are + # not used in this crosstool + feature { + name: 'legacy_compile_flags' + flag_set { + expand_if_all_available: 'legacy_compile_flags' + action: 'preprocess-assemble' + action: 'c-compile' + action: 'c++-compile' + action: 'c++-header-parsing' + action: 'c++-module-compile' + action: 'c++-module-codegen' + flag_group { + iterate_over: 'legacy_compile_flags' + flag: '%{legacy_compile_flags}' + } + } + } + + feature { + name: "msvc_env" + env_set { + action: "c-compile" + action: "c++-compile" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "c++-header-parsing" + action: "assemble" + action: "preprocess-assemble" + action: "c++-link-executable" + action: "c++-link-dynamic-library" + action: "c++-link-nodeps-dynamic-library" + action: "c++-link-static-library" + env_entry { + key: "PATH" + value: "" + } + env_entry { + key: "INCLUDE" + value: "" + } + env_entry { + key: "LIB" + value: "" + } + env_entry { + key: "TMP" + value: "" + } + env_entry { + key: "TEMP" + value: "" + } + } + } + + feature { + name: 'include_paths' + flag_set { + action: "assemble" + action: 'preprocess-assemble' + action: 'c-compile' + action: 'c++-compile' + action: 'c++-header-parsing' + action: 'c++-module-compile' + flag_group { + iterate_over: 'quote_include_paths' + flag: '/I%{quote_include_paths}' + } + flag_group { + iterate_over: 'include_paths' + flag: '/I%{include_paths}' + } + flag_group { + iterate_over: 'system_include_paths' + flag: '/I%{system_include_paths}' + } + } + } + + feature { + name: "preprocessor_defines" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-module-compile" + flag_group { + flag: "/D%{preprocessor_defines}" + iterate_over: "preprocessor_defines" + } + } + } + + # Tell Bazel to parse the output of /showIncludes + feature { + name: 'parse_showincludes' + flag_set { + action: 'preprocess-assemble' + action: 'c-compile' + action: 'c++-compile' + action: 'c++-module-compile' + action: 'c++-header-parsing' + flag_group { + flag: "/showIncludes" + } + } + } + + + feature { + name: 'generate_pdb_file' + requires: { + feature: 'dbg' + } + requires: { + feature: 'fastbuild' + } + } + + feature { + name: 'shared_flag' + flag_set { + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: '/DLL' + } + } + } + + feature { + name: 'linkstamps' + flag_set { + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + expand_if_all_available: 'linkstamp_paths' + flag_group { + iterate_over: 'linkstamp_paths' + flag: '%{linkstamp_paths}' + } + } + } + + feature { + name: 'output_execpath_flags' + flag_set { + expand_if_all_available: 'output_execpath' + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: '/OUT:%{output_execpath}' + } + } + } + + feature { + name: 'archiver_flags' + flag_set { + expand_if_all_available: 'output_execpath' + action: 'c++-link-static-library' + flag_group { + flag: '/OUT:%{output_execpath}' + } + } + } + + feature { + name: 'input_param_flags' + flag_set { + expand_if_all_available: 'interface_library_output_path' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: "/IMPLIB:%{interface_library_output_path}" + } + } + flag_set { + expand_if_all_available: 'libopts' + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + iterate_over: 'libopts' + flag: '%{libopts}' + } + } + flag_set { + expand_if_all_available: 'libraries_to_link' + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + action: 'c++-link-static-library' + flag_group { + iterate_over: 'libraries_to_link' + flag_group { + expand_if_equal: { + variable: 'libraries_to_link.type' + value: 'object_file_group' + } + iterate_over: 'libraries_to_link.object_files' + flag_group { + flag: '%{libraries_to_link.object_files}' + } + } + flag_group { + expand_if_equal: { + variable: 'libraries_to_link.type' + value: 'object_file' + } + flag_group { + flag: '%{libraries_to_link.name}' + } + } + flag_group { + expand_if_equal: { + variable: 'libraries_to_link.type' + value: 'interface_library' + } + flag_group { + flag: '%{libraries_to_link.name}' + } + } + flag_group { + expand_if_equal: { + variable: 'libraries_to_link.type' + value: 'static_library' + } + flag_group { + expand_if_false: 'libraries_to_link.is_whole_archive' + flag: '%{libraries_to_link.name}' + } + flag_group { + expand_if_true: 'libraries_to_link.is_whole_archive' + flag: '/WHOLEARCHIVE:%{libraries_to_link.name}' + } + } + } + } + } + + # Since this feature is declared earlier in the CROSSTOOL than + # "user_link_flags", this feature will be applied prior to it anwyhere they + # are both implied. And since "user_link_flags" contains the linkopts from + # the build rule, this allows the user to override the /SUBSYSTEM in the BUILD + # file. + feature { + name: 'linker_subsystem_flag' + flag_set { + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: '/SUBSYSTEM:CONSOLE' + } + } + } + + # The "user_link_flags" contains user-defined linkopts (from build rules) + # so it should be defined after features that declare user-overridable flags. + # For example the "linker_subsystem_flag" defines a default "/SUBSYSTEM" flag + # but we want to let the user override it, therefore "link_flag_subsystem" is + # defined earlier in the CROSSTOOL file than "user_link_flags". + feature { + name: 'user_link_flags' + flag_set { + expand_if_all_available: 'user_link_flags' + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + iterate_over: 'user_link_flags' + flag: '%{user_link_flags}' + } + } + } + feature { + name: 'legacy_link_flags' + flag_set { + expand_if_all_available: 'legacy_link_flags' + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + iterate_over: 'legacy_link_flags' + flag: '%{legacy_link_flags}' + } + } + } + + feature { + name: 'linker_param_file' + flag_set { + expand_if_all_available: 'linker_param_file' + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + action: 'c++-link-static-library' + flag_group { + flag: '@%{linker_param_file}' + } + } + } + + feature { + name: 'static_link_msvcrt' + } + + feature { + name: 'static_link_msvcrt_no_debug' + flag_set { + action: 'c-compile' + action: 'c++-compile' + flag_group { + flag: "/MT" + } + } + flag_set { + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: "/DEFAULTLIB:libcmt.lib" + } + } + requires: { feature: 'fastbuild'} + requires: { feature: 'opt'} + } + + feature { + name: 'dynamic_link_msvcrt_no_debug' + flag_set { + action: 'c-compile' + action: 'c++-compile' + flag_group { + flag: "/MD" + } + } + flag_set { + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: "/DEFAULTLIB:msvcrt.lib" + } + } + requires: { feature: 'fastbuild'} + requires: { feature: 'opt'} + } + + feature { + name: 'static_link_msvcrt_debug' + flag_set { + action: 'c-compile' + action: 'c++-compile' + flag_group { + flag: "/MTd" + } + } + flag_set { + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: "/DEFAULTLIB:libcmtd.lib" + } + } + requires: { feature: 'dbg'} + } + + feature { + name: 'dynamic_link_msvcrt_debug' + flag_set { + action: 'c-compile' + action: 'c++-compile' + flag_group { + flag: "/MDd" + } + } + flag_set { + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: "/DEFAULTLIB:msvcrtd.lib" + } + } + requires: { feature: 'dbg'} + } + + feature { + name: 'dbg' + flag_set { + action: 'c-compile' + action: 'c++-compile' + flag_group { + flag: "/Od" + flag: "/Z7" + flag: "/DDEBUG" + } + } + flag_set { + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: "/DEBUG:FULL" + flag: "/INCREMENTAL:NO" + } + } + implies: 'generate_pdb_file' + } + + feature { + name: 'fastbuild' + flag_set { + action: 'c-compile' + action: 'c++-compile' + flag_group { + flag: "/Od" + flag: "/Z7" + flag: "/DDEBUG" + } + } + flag_set { + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: "/DEBUG:FASTLINK" + flag: "/INCREMENTAL:NO" + } + } + implies: 'generate_pdb_file' + } + + feature { + name: 'opt' + flag_set { + action: 'c-compile' + action: 'c++-compile' + flag_group { + flag: "/O2" + flag: "/DNDEBUG" + } + } + } + + feature { + name: 'user_compile_flags' + flag_set { + expand_if_all_available: 'user_compile_flags' + action: 'preprocess-assemble' + action: 'c-compile' + action: 'c++-compile' + action: 'c++-header-parsing' + action: 'c++-module-compile' + action: 'c++-module-codegen' + flag_group { + iterate_over: 'user_compile_flags' + flag: '%{user_compile_flags}' + } + } + } + + feature { + name: 'sysroot' + flag_set { + expand_if_all_available: 'sysroot' + action: 'assemble' + action: 'preprocess-assemble' + action: 'c-compile' + action: 'c++-compile' + action: 'c++-header-parsing' + action: 'c++-module-compile' + action: 'c++-module-codegen' + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + iterate_over: 'sysroot' + flag: '--sysroot=%{sysroot}' + } + } + } + + feature { + name: 'unfiltered_compile_flags' + flag_set { + expand_if_all_available: 'unfiltered_compile_flags' + action: 'preprocess-assemble' + action: 'c-compile' + action: 'c++-compile' + action: 'c++-header-parsing' + action: 'c++-module-compile' + action: 'c++-module-codegen' + flag_group { + iterate_over: 'unfiltered_compile_flags' + flag: '%{unfiltered_compile_flags}' + } + } + } + + feature { + name: 'compiler_output_flags' + flag_set { + action: 'assemble' + flag_group { + expand_if_all_available: 'output_file' + expand_if_none_available: 'output_assembly_file' + expand_if_none_available: 'output_preprocess_file' + flag: '/Fo%{output_file}' + flag: '/Zi' + } + } + flag_set { + action: 'preprocess-assemble' + action: 'c-compile' + action: 'c++-compile' + action: 'c++-header-parsing' + action: 'c++-module-compile' + action: 'c++-module-codegen' + flag_group { + expand_if_all_available: 'output_file' + expand_if_none_available: 'output_assembly_file' + expand_if_none_available: 'output_preprocess_file' + flag: '/Fo%{output_file}' + } + flag_group { + expand_if_all_available: 'output_file' + expand_if_all_available: 'output_assembly_file' + flag: '/Fa%{output_file}' + } + flag_group { + expand_if_all_available: 'output_file' + expand_if_all_available: 'output_preprocess_file' + flag: '/P' + flag: '/Fi%{output_file}' + } + } + } + + feature { + name: 'compiler_input_flags' + flag_set { + action: 'assemble' + action: 'preprocess-assemble' + action: 'c-compile' + action: 'c++-compile' + action: 'c++-header-parsing' + action: 'c++-module-compile' + action: 'c++-module-codegen' + flag_group { + expand_if_all_available: 'source_file' + flag: '/c' + flag: '%{source_file}' + } + } + } + + feature { + name : 'def_file', + flag_set { + expand_if_all_available: 'def_file_path' + action: 'c++-link-executable' + action: 'c++-link-dynamic-library' + action: "c++-link-nodeps-dynamic-library" + flag_group { + flag: "/DEF:%{def_file_path}" + # We can specify a different DLL name in DEF file, /ignore:4070 suppresses + # the warning message about DLL name doesn't match the default one. + # See https://msdn.microsoft.com/en-us/library/sfkk2fz7.aspx + flag: "/ignore:4070" + } + } + } + + feature { + name: 'windows_export_all_symbols' + } + + feature { + name: 'no_windows_export_all_symbols' + } + + linking_mode_flags { mode: DYNAMIC } +}
\ No newline at end of file diff --git a/third_party/toolchains/gpus/cuda/BUILD b/third_party/toolchains/gpus/cuda/BUILD index 4cb8380938..f59e025019 100644 --- a/third_party/toolchains/gpus/cuda/BUILD +++ b/third_party/toolchains/gpus/cuda/BUILD @@ -133,6 +133,15 @@ cc_library( ) cc_library( + name = "cudnn_header", + includes = [ + ".", + "cuda/include", + ], + visibility = ["//visibility:public"], +) + +cc_library( name = "cufft", srcs = ["cuda/lib/libcufft.so.9.0"], data = ["cuda/lib/libcufft.so.9.0"], @@ -1191,33 +1200,10 @@ if [ -d "$(@D)/extras" ]; then rm $(@D)/extras -drf; fi && if [ -d "$(@D)/includ genrule( name = "cuda-nvvm", outs = [ - "cuda/nvvm/bin/cicc", - "cuda/nvvm/include/nvvm.h", - "cuda/nvvm/lib64/libnvvm.so", - "cuda/nvvm/lib64/libnvvm.so.3", - "cuda/nvvm/lib64/libnvvm.so.3.2.0", "cuda/nvvm/libdevice/libdevice.10.bc", - "cuda/nvvm/libnvvm-samples/CMakeLists.txt", - "cuda/nvvm/libnvvm-samples/README.txt", - "cuda/nvvm/libnvvm-samples/build.bat", - "cuda/nvvm/libnvvm-samples/build.sh", - "cuda/nvvm/libnvvm-samples/common/include/DDSWriter.h", - "cuda/nvvm/libnvvm-samples/common/include/drvapi_error_string.h", - "cuda/nvvm/libnvvm-samples/cuda-c-linking/CMakeLists.txt", - "cuda/nvvm/libnvvm-samples/cuda-c-linking/README.txt", - "cuda/nvvm/libnvvm-samples/cuda-c-linking/cuda-c-linking.cpp", - "cuda/nvvm/libnvvm-samples/cuda-c-linking/math-funcs.cu", - "cuda/nvvm/libnvvm-samples/ptxgen/CMakeLists.txt", - "cuda/nvvm/libnvvm-samples/ptxgen/README.txt", - "cuda/nvvm/libnvvm-samples/ptxgen/ptxgen.c", - "cuda/nvvm/libnvvm-samples/simple/CMakeLists.txt", - "cuda/nvvm/libnvvm-samples/simple/README.txt", - "cuda/nvvm/libnvvm-samples/simple/simple-gpu.ll", - "cuda/nvvm/libnvvm-samples/simple/simple-gpu64.ll", - "cuda/nvvm/libnvvm-samples/simple/simple.c", ], cmd = """ -if [ -d "$(@D)/extras" ]; then rm $(@D)/extras -drf; fi && if [ -d "$(@D)/include" ]; then rm $(@D)/include -drf; fi && if [ -d "$(@D)/lib" ]; then rm $(@D)/lib -drf; fi && if [ -d "$(@D)/nvvm" ]; then rm $(@D)/nvvm -drf; fi && cp "/usr/local/cuda-9.0/nvvm/bin/cicc" "$(@D)/cuda/nvvm/bin/cicc" && cp "/usr/local/cuda-9.0/nvvm/include/nvvm.h" "$(@D)/cuda/nvvm/include/nvvm.h" && cp "/usr/local/cuda-9.0/nvvm/lib64/libnvvm.so" "$(@D)/cuda/nvvm/lib64/libnvvm.so" && cp "/usr/local/cuda-9.0/nvvm/lib64/libnvvm.so.3" "$(@D)/cuda/nvvm/lib64/libnvvm.so.3" && cp "/usr/local/cuda-9.0/nvvm/lib64/libnvvm.so.3.2.0" "$(@D)/cuda/nvvm/lib64/libnvvm.so.3.2.0" && cp "/usr/local/cuda-9.0/nvvm/libdevice/libdevice.10.bc" "$(@D)/cuda/nvvm/libdevice/libdevice.10.bc" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/CMakeLists.txt" "$(@D)/cuda/nvvm/libnvvm-samples/CMakeLists.txt" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/README.txt" "$(@D)/cuda/nvvm/libnvvm-samples/README.txt" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/build.bat" "$(@D)/cuda/nvvm/libnvvm-samples/build.bat" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/build.sh" "$(@D)/cuda/nvvm/libnvvm-samples/build.sh" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/common/include/DDSWriter.h" "$(@D)/cuda/nvvm/libnvvm-samples/common/include/DDSWriter.h" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/common/include/drvapi_error_string.h" "$(@D)/cuda/nvvm/libnvvm-samples/common/include/drvapi_error_string.h" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/cuda-c-linking/CMakeLists.txt" "$(@D)/cuda/nvvm/libnvvm-samples/cuda-c-linking/CMakeLists.txt" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/cuda-c-linking/README.txt" "$(@D)/cuda/nvvm/libnvvm-samples/cuda-c-linking/README.txt" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/cuda-c-linking/cuda-c-linking.cpp" "$(@D)/cuda/nvvm/libnvvm-samples/cuda-c-linking/cuda-c-linking.cpp" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/cuda-c-linking/math-funcs.cu" "$(@D)/cuda/nvvm/libnvvm-samples/cuda-c-linking/math-funcs.cu" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/ptxgen/CMakeLists.txt" "$(@D)/cuda/nvvm/libnvvm-samples/ptxgen/CMakeLists.txt" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/ptxgen/README.txt" "$(@D)/cuda/nvvm/libnvvm-samples/ptxgen/README.txt" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/ptxgen/ptxgen.c" "$(@D)/cuda/nvvm/libnvvm-samples/ptxgen/ptxgen.c" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/simple/CMakeLists.txt" "$(@D)/cuda/nvvm/libnvvm-samples/simple/CMakeLists.txt" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/simple/README.txt" "$(@D)/cuda/nvvm/libnvvm-samples/simple/README.txt" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/simple/simple-gpu.ll" "$(@D)/cuda/nvvm/libnvvm-samples/simple/simple-gpu.ll" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/simple/simple-gpu64.ll" "$(@D)/cuda/nvvm/libnvvm-samples/simple/simple-gpu64.ll" && cp "/usr/local/cuda-9.0/nvvm/libnvvm-samples/simple/simple.c" "$(@D)/cuda/nvvm/libnvvm-samples/simple/simple.c" +if [ -d "$(@D)/extras" ]; then rm $(@D)/extras -drf; fi && if [ -d "$(@D)/include" ]; then rm $(@D)/include -drf; fi && if [ -d "$(@D)/lib" ]; then rm $(@D)/lib -drf; fi && if [ -d "$(@D)/nvvm" ]; then rm $(@D)/nvvm -drf; fi && cp "/usr/local/cuda-9.0/nvvm/libdevice/libdevice.10.bc" "$(@D)//libdevice.10.bc" """, ) @@ -1272,7 +1258,7 @@ genrule( "cuda/lib/libcupti.so.9.0", ], cmd = """ -if [ -d "$(@D)/extras" ]; then rm $(@D)/extras -drf; fi && if [ -d "$(@D)/include" ]; then rm $(@D)/include -drf; fi && if [ -d "$(@D)/lib" ]; then rm $(@D)/lib -drf; fi && if [ -d "$(@D)/nvvm" ]; then rm $(@D)/nvvm -drf; fi && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/stubs/libcuda.so" "$(@D)/cuda/lib/libcuda.so" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudart.so.9.0" "$(@D)/cuda/lib/libcudart.so.9.0" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudart_static.a" "$(@D)/cuda/lib/libcudart_static.a" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcublas.so.9.0" "$(@D)/cuda/lib/libcublas.so.9.0" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcusolver.so.9.0" "$(@D)/cuda/lib/libcusolver.so.9.0" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcurand.so.9.0" "$(@D)/cuda/lib/libcurand.so.9.0" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcufft.so.9.0" "$(@D)/cuda/lib/libcufft.so.9.0" && cp "/usr/lib/x86_64-linux-gnu/libcudnn.so.7" "$(@D)/cuda/lib/libcudnn.so.7" && cp "/usr/local/cuda-9.0/extras/CUPTI/lib64/libcupti.so.9.0" "$(@D)/cuda/lib/libcupti.so.9.0" +if [ -d "$(@D)/extras" ]; then rm $(@D)/extras -drf; fi && if [ -d "$(@D)/include" ]; then rm $(@D)/include -drf; fi && if [ -d "$(@D)/lib" ]; then rm $(@D)/lib -drf; fi && if [ -d "$(@D)/nvvm" ]; then rm $(@D)/nvvm -drf; fi && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/stubs/libcuda.so" "$(@D)/cuda/lib/libcuda.so" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudart.so.9.0.176" "$(@D)/cuda/lib/libcudart.so.9.0" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudart_static.a" "$(@D)/cuda/lib/libcudart_static.a" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcublas.so.9.0.480" "$(@D)/cuda/lib/libcublas.so.9.0" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcusolver.so.9.0.176" "$(@D)/cuda/lib/libcusolver.so.9.0" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcurand.so.9.0.176" "$(@D)/cuda/lib/libcurand.so.9.0" && cp "/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcufft.so.9.0.176" "$(@D)/cuda/lib/libcufft.so.9.0" && cp "/usr/lib/x86_64-linux-gnu/libcudnn.so.7.2.1" "$(@D)/cuda/lib/libcudnn.so.7" && cp "/usr/local/cuda-9.0/extras/CUPTI/lib64/libcupti.so.9.0.176" "$(@D)/cuda/lib/libcupti.so.9.0" """, ) diff --git a/third_party/toolchains/gpus/cuda/build_defs.bzl b/third_party/toolchains/gpus/cuda/build_defs.bzl index badaf43019..9210bfe016 100644 --- a/third_party/toolchains/gpus/cuda/build_defs.bzl +++ b/third_party/toolchains/gpus/cuda/build_defs.bzl @@ -2,6 +2,7 @@ # execution service. # DO NOT EDIT: automatically generated file +# Macros for building CUDA code. def if_cuda(if_true, if_false = []): """Shorthand for select()'ing on whether we're building with CUDA. @@ -12,15 +13,13 @@ def if_cuda(if_true, if_false = []): return select({ "@local_config_cuda//cuda:using_nvcc": if_true, "@local_config_cuda//cuda:using_clang": if_true, - "//conditions:default": if_false + "//conditions:default": if_false, }) - def cuda_default_copts(): """Default options for all CUDA compilations.""" return if_cuda(["-x", "cuda", "-DGOOGLE_CUDA=1"] + ["--cuda-gpu-arch=sm_30"]) - def cuda_is_configured(): """Returns true if CUDA was enabled during the configure process.""" return True @@ -32,6 +31,5 @@ def if_cuda_is_configured(x): --config=cuda. Used to allow non-CUDA code to depend on CUDA libraries. """ if cuda_is_configured(): - return x + return x return [] - diff --git a/third_party/toolchains/gpus/cuda/cuda/cuda_config.h b/third_party/toolchains/gpus/cuda/cuda/cuda_config.h index f6662274cc..7cdaf144ad 100644 --- a/third_party/toolchains/gpus/cuda/cuda/cuda_config.h +++ b/third_party/toolchains/gpus/cuda/cuda/cuda_config.h @@ -19,9 +19,9 @@ limitations under the License. #define TF_CUDA_CAPABILITIES CudaVersion("3.0") -#define TF_CUDA_VERSION "8.0" -#define TF_CUDNN_VERSION "5" +#define TF_CUDA_VERSION "9.0" +#define TF_CUDNN_VERSION "7" -#define TF_CUDA_TOOLKIT_PATH "/usr/local/cuda-8.0" +#define TF_CUDA_TOOLKIT_PATH "/usr/local/cuda-9.0" #endif // CUDA_CUDA_CONFIG_H_ diff --git a/third_party/toolchains/gpus/py/BUILD b/third_party/toolchains/gpus/py/BUILD index 2d5ace93ff..1235988abb 100644 --- a/third_party/toolchains/gpus/py/BUILD +++ b/third_party/toolchains/gpus/py/BUILD @@ -6,18 +6,24 @@ licenses(["restricted"]) package(default_visibility = ["//visibility:public"]) +# To build Python C/C++ extension on Windows, we need to link to python import library pythonXY.lib +# See https://docs.python.org/3/extending/windows.html +cc_import( + name = "python_lib", + interface_library = select({ + ":windows": ":python_import_lib", + # A placeholder for Unix platforms which makes --no_build happy. + "//conditions:default": "not-existing.lib", + }), + system_provided = 1, +) + cc_library( name = "python_headers", hdrs = [":python_include"], - data = select({ - ":windows": [":python_import_lib"], - "//conditions:default": [], - }), includes = ["python_include"], - linkopts = select({ - # TODO(pcloudy): Ideally, this should just go into deps after resolving - # https://github.com/bazelbuild/bazel/issues/3237, - ":windows": ["$(locations :python_import_lib)"], + deps = select({ + ":windows": [":python_lib"], "//conditions:default": [], }), ) |