Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

This rule is missing dependency declarations for the following files #1317

Closed
lf94 opened this issue May 28, 2016 · 5 comments
Closed

This rule is missing dependency declarations for the following files #1317

lf94 opened this issue May 28, 2016 · 5 comments
Assignees
Labels
P2 We'll consider working on this in future. (Assignee optional) platform: other type: feature request
Milestone

Comments

@lf94
Copy link

lf94 commented May 28, 2016

Hello,

I'm trying to compile TensorFlow on FreeBSD. So far things have been going OK. Someone has made a Bazel 0.2.2b port that works, but I am getting errors that have been discussed before on this issue tracker.

Apologies if this has already been fixed, but I have tried everything out there besides latest Bazel. There are no search results that indicate this is a solved problem.

Things I have tried:

  • Added cxx_builtin_include line to tools/cpp/CROSSTOOL
  • Created a symlink between /usr/local/lib/gcc48 and /usr/lib/gcc
  • Used Clang (which bypasses this problem but fails the build because it doesn't support a GCCism...)

Here is the error:

[lee@ ~/3rdparty/tensorflow]$ bazel build --genrule_strategy=standalone --spawn_strategy=standalone -c opt //tensorflow/tools/pip_package:build_pip_package;
INFO: Found 1 target...
ERROR: /home/lee/3rdparty/tensorflow/tensorflow/core/BUILD:810:1: undeclared inclusion(s) in rule '//tensorflow/core:framework_internal':
this rule is missing dependency declarations for the following files included by 'tensorflow/core/framework/versions.cc':
  '/usr/local/lib/gcc48/include/c++/string'
  '/usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd10.1/bits/c++config.h'
  '/usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd10.1/bits/os_defines.h'
  '/usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd10.1/bits/cpu_defines.h'
  '/usr/local/lib/gcc48/include/c++/bits/stringfwd.h'
  '/usr/local/lib/gcc48/include/c++/bits/memoryfwd.h'
  '/usr/local/lib/gcc48/include/c++/bits/char_traits.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_algobase.h'
  '/usr/local/lib/gcc48/include/c++/bits/functexcept.h'
  '/usr/local/lib/gcc48/include/c++/bits/exception_defines.h'
  '/usr/local/lib/gcc48/include/c++/bits/cpp_type_traits.h'
  '/usr/local/lib/gcc48/include/c++/ext/type_traits.h'
  '/usr/local/lib/gcc48/include/c++/ext/numeric_traits.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_pair.h'
  '/usr/local/lib/gcc48/include/c++/bits/move.h'
  '/usr/local/lib/gcc48/include/c++/bits/concept_check.h'
  '/usr/local/lib/gcc48/include/c++/type_traits'
  '/usr/local/lib/gcc48/include/c++/bits/stl_iterator_base_types.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_iterator_base_funcs.h'
  '/usr/local/lib/gcc48/include/c++/debug/debug.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_iterator.h'
  '/usr/local/lib/gcc48/include/c++/bits/postypes.h'
  '/usr/local/lib/gcc48/include/c++/cwchar'
  '/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include-fixed/wchar.h'
  '/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include-fixed/sys/cdefs.h'
  '/usr/local/lib/gcc48/include/c++/cstdint'
  '/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include/stdint.h'
  '/usr/local/lib/gcc48/include/c++/bits/allocator.h'
  '/usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd10.1/bits/c++allocator.h'
  '/usr/local/lib/gcc48/include/c++/ext/new_allocator.h'
  '/usr/local/lib/gcc48/include/c++/new'
  '/usr/local/lib/gcc48/include/c++/exception'
  '/usr/local/lib/gcc48/include/c++/bits/atomic_lockfree_defines.h'
  '/usr/local/lib/gcc48/include/c++/bits/exception_ptr.h'
  '/usr/local/lib/gcc48/include/c++/bits/nested_exception.h'
  '/usr/local/lib/gcc48/include/c++/bits/localefwd.h'
  '/usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd10.1/bits/c++locale.h'
  '/usr/local/lib/gcc48/include/c++/clocale'
  '/usr/local/lib/gcc48/include/c++/iosfwd'
  '/usr/local/lib/gcc48/include/c++/cctype'
  '/usr/local/lib/gcc48/include/c++/bits/ostream_insert.h'
  '/usr/local/lib/gcc48/include/c++/bits/cxxabi_forced.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_function.h'
  '/usr/local/lib/gcc48/include/c++/backward/binders.h'
  '/usr/local/lib/gcc48/include/c++/bits/range_access.h'
  '/usr/local/lib/gcc48/include/c++/bits/basic_string.h'
  '/usr/local/lib/gcc48/include/c++/ext/atomicity.h'
  '/usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd10.1/bits/gthr.h'
  '/usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd10.1/bits/gthr-default.h'
  '/usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd10.1/bits/atomic_word.h'
  '/usr/local/lib/gcc48/include/c++/initializer_list'
  '/usr/local/lib/gcc48/include/c++/bits/functional_hash.h'
  '/usr/local/lib/gcc48/include/c++/bits/hash_bytes.h'
  '/usr/local/lib/gcc48/include/c++/bits/basic_string.tcc'
  '/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include-fixed/stdlib.h'
  '/usr/local/lib/gcc48/include/c++/cstddef'
  '/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include/stddef.h'
  '/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include-fixed/sys/types.h'
  '/usr/local/lib/gcc48/include/c++/utility'
  '/usr/local/lib/gcc48/include/c++/bits/stl_relops.h'
  '/usr/local/lib/gcc48/include/c++/limits'
  '/usr/local/lib/gcc48/include/c++/typeinfo'
  '/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include-fixed/stdio.h'
  '/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include/stdarg.h'
  '/usr/local/lib/gcc48/include/c++/vector'
  '/usr/local/lib/gcc48/include/c++/bits/stl_construct.h'
  '/usr/local/lib/gcc48/include/c++/ext/alloc_traits.h'
  '/usr/local/lib/gcc48/include/c++/bits/alloc_traits.h'
  '/usr/local/lib/gcc48/include/c++/bits/ptr_traits.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_uninitialized.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_vector.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_bvector.h'
  '/usr/local/lib/gcc48/include/c++/bits/vector.tcc'
  '/usr/local/lib/gcc48/include/c++/memory'
  '/usr/local/lib/gcc48/include/c++/bits/stl_tempbuf.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_raw_storage_iter.h'
  '/usr/local/lib/gcc48/include/c++/ext/concurrence.h'
  '/usr/local/lib/gcc48/include/c++/bits/uses_allocator.h'
  '/usr/local/lib/gcc48/include/c++/functional'
  '/usr/local/lib/gcc48/include/c++/tuple'
  '/usr/local/lib/gcc48/include/c++/array'
  '/usr/local/lib/gcc48/include/c++/stdexcept'
  '/usr/local/lib/gcc48/include/c++/bits/unique_ptr.h'
  '/usr/local/lib/gcc48/include/c++/bits/shared_ptr.h'
  '/usr/local/lib/gcc48/include/c++/bits/shared_ptr_base.h'
  '/usr/local/lib/gcc48/include/c++/backward/auto_ptr.h'
  '/usr/local/lib/gcc48/include/c++/set'
  '/usr/local/lib/gcc48/include/c++/bits/stl_tree.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_set.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_multiset.h'
  '/usr/local/lib/gcc48/include/c++/iterator'
  '/usr/local/lib/gcc48/include/c++/ostream'
  '/usr/local/lib/gcc48/include/c++/ios'
  '/usr/local/lib/gcc48/include/c++/bits/ios_base.h'
  '/usr/local/lib/gcc48/include/c++/bits/locale_classes.h'
  '/usr/local/lib/gcc48/include/c++/bits/locale_classes.tcc'
  '/usr/local/lib/gcc48/include/c++/streambuf'
  '/usr/local/lib/gcc48/include/c++/bits/streambuf.tcc'
  '/usr/local/lib/gcc48/include/c++/bits/basic_ios.h'
  '/usr/local/lib/gcc48/include/c++/bits/locale_facets.h'
  '/usr/local/lib/gcc48/include/c++/cwctype'
  '/usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd10.1/bits/ctype_base.h'
  '/usr/local/lib/gcc48/include/c++/bits/streambuf_iterator.h'
  '/usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd10.1/bits/ctype_inline.h'
  '/usr/local/lib/gcc48/include/c++/bits/locale_facets.tcc'
  '/usr/local/lib/gcc48/include/c++/bits/basic_ios.tcc'
  '/usr/local/lib/gcc48/include/c++/bits/ostream.tcc'
  '/usr/local/lib/gcc48/include/c++/istream'
  '/usr/local/lib/gcc48/include/c++/bits/istream.tcc'
  '/usr/local/lib/gcc48/include/c++/bits/stream_iterator.h'
  '/usr/local/lib/gcc48/include/c++/map'
  '/usr/local/lib/gcc48/include/c++/bits/stl_map.h'
  '/usr/local/lib/gcc48/include/c++/bits/stl_multimap.h'
  '/usr/local/lib/gcc48/include/c++/sstream'
  '/usr/local/lib/gcc48/include/c++/bits/sstream.tcc'.
Target //tensorflow/tools/pip_package:build_pip_package failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 6.311s, Critical Path: 4.88s
@bsilver8192
Copy link
Contributor

tools/cpp/CROSSTOOL isn't actually getting sued; the one generated from tools/cpp/CROSSTOOL.tpl by tools/cpp/cc_configure.bzl is being used instead. Try adding your paths there.

@damienmg might be able to help on actually solving the problem.

@damienmg
Copy link
Contributor

Can you give me the output of echo | gcc -E -xc++ - -v?

Also what is the content of the bazel-tensorflow/external/local_config_cc/CROSSTOOL file?

@lf94
Copy link
Author

lf94 commented May 31, 2016

I wanted to mention that after some quick investigation, the port overwrites my changes to the CROSSTOOL file. I will try modifying tools/cpp/cc_configure.bzl and report back.

In the mean time, Clang 3.8 with Bazel works perfectly and I can compile TensorFlow (although there is still an issue I'm having but that's off-topic).

[lee@ ~]$ echo | gcc -E -xc++ - -v
Using built-in specs.
COLLECT_GCC=gcc
Target: x86_64-portbld-freebsd10.1
Configured with: ./../gcc-4.8.5/configure --disable-bootstrap --disable-nls --enable-gnu-indirect-function --libdir=/usr/local/lib/gcc48 --libexecdir=/usr/local/libexec/gcc48 --program-suffix=48 --with-as=/usr/local/bin/as --with-gmp=/usr/local --with-gxx-include-dir=/usr/local/lib/gcc48/include/c++/ --with-ld=/usr/local/bin/ld --with-pkgversion='FreeBSD Ports Collection' --with-system-zlib --with-ecj-jar=/usr/local/share/java/ecj-4.5.jar --enable-languages=c,c++,objc,fortran,java --prefix=/usr/local --localstatedir=/var --mandir=/usr/local/man --infodir=/usr/local/info/gcc48 --build=x86_64-portbld-freebsd10.1
Thread model: posix
gcc version 4.8.5 (FreeBSD Ports Collection) 
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=x86-64'
 /usr/local/libexec/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/cc1plus -E -quiet -v - -mtune=generic -march=x86-64
ignoring nonexistent directory "/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/../../../../../x86_64-portbld-freebsd10.1/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/lib/gcc48/include/c++/
 /usr/local/lib/gcc48/include/c++//x86_64-portbld-freebsd10.1
 /usr/local/lib/gcc48/include/c++//backward
 /usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include
 /usr/local/include
 /usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include-fixed
 /usr/include
End of search list.
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"
COMPILER_PATH=/usr/local/libexec/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/:/usr/local/libexec/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/:/usr/local/libexec/gcc48/gcc/x86_64-portbld-freebsd10.1/:/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/:/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/:/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/../../../../../x86_64-portbld-freebsd10.1/bin/
LIBRARY_PATH=/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/:/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/../../../../../x86_64-portbld-freebsd10.1/lib/:/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=x86-64'
[lee@ ~]$ cat 3rdparty/tensorflow/bazel-tensorflow/external/local_config_cc/CROSSTOOL 
major_version: "local"
minor_version: ""
default_target_cpu: "same_as_host"

default_toolchain {
  cpu: "k8"
  toolchain_identifier: "local_linux"
}
default_toolchain {
  cpu: "piii"
  toolchain_identifier: "local_linux"
}
default_toolchain {
  cpu: "darwin"
  toolchain_identifier: "local_darwin"
}
default_toolchain {
  cpu: "freebsd"
  toolchain_identifier: "local_freebsd"
}
default_toolchain {
  cpu: "armeabi-v7a"
  toolchain_identifier: "stub_armeabi-v7a"
}
default_toolchain {
  cpu: "arm"
  toolchain_identifier: "local_linux"
}
default_toolchain {
  cpu: "x64_windows"
  toolchain_identifier: "local_windows_msys64"
}
default_toolchain {
  cpu: "x64_windows_msvc"
  toolchain_identifier: "vc_14_0_x64"
}

toolchain {
  abi_version: "armeabi-v7a"
  abi_libc_version: "armeabi-v7a"
  builtin_sysroot: ""
  compiler: "compiler"
  host_system_name: "armeabi-v7a"
  needsPic: true
  supports_gold_linker: false
  supports_incremental_linker: false
  supports_fission: false
  supports_interface_shared_objects: false
  supports_normalizing_ar: false
  supports_start_end_lib: false
  supports_thin_archives: false
  target_libc: "armeabi-v7a"
  target_cpu: "armeabi-v7a"
  target_system_name: "armeabi-v7a"
  toolchain_identifier: "stub_armeabi-v7a"

  tool_path { name: "ar" path: "/bin/false" }
  tool_path { name: "compat-ld" path: "/bin/false" }
  tool_path { name: "cpp" path: "/bin/false" }
  tool_path { name: "dwp" path: "/bin/false" }
  tool_path { name: "gcc" path: "/bin/false" }
  tool_path { name: "gcov" path: "/bin/false" }
  tool_path { name: "ld" path: "/bin/false" }

  tool_path { name: "nm" path: "/bin/false" }
  tool_path { name: "objcopy" path: "/bin/false" }
  tool_path { name: "objdump" path: "/bin/false" }
  tool_path { name: "strip" path: "/bin/false" }
  linking_mode_flags { mode: DYNAMIC }
}

toolchain {
  abi_version: "local"
  abi_libc_version: "local"
  builtin_sysroot: ""
  compiler: "compiler"
  host_system_name: "local"
  needsPic: true
  supports_gold_linker: false
  supports_incremental_linker: false
  supports_fission: false
  supports_interface_shared_objects: false
  supports_normalizing_ar: false
  supports_start_end_lib: false
  supports_thin_archives: false
  target_libc: "local"
  target_cpu: "local"
  target_system_name: "local"
  toolchain_identifier: "local_linux"

  tool_path { name: "ar" path: "/usr/bin/ar" }
  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: "gcc" path: "/usr/bin/gcc" }
  cxx_flag: "-std=c++0x"
  linker_flag: "-lstdc++"
  linker_flag: "-B/usr/bin/"

  # TODO(bazel-team): In theory, the path here ought to exactly match the path
  # used by gcc. That works because bazel currently doesn't track files at
  # absolute locations and has no remote execution, yet. However, this will need
  # to be fixed, maybe with auto-detection?
  cxx_builtin_include_directory: "/usr/lib/gcc/"
  cxx_builtin_include_directory: "/usr/local/include"
  cxx_builtin_include_directory: "/usr/include"
  tool_path { name: "gcov" path: "/usr/bin/gcov" }

  # C(++) compiles invoke the compiler (as that is the one knowing where
  # to find libraries), but we provide LD so other rules can invoke the linker.
  tool_path { name: "ld" path: "/usr/bin/ld" }

  tool_path { name: "nm" path: "/usr/bin/nm" }
  tool_path { name: "objcopy" path: "/usr/bin/objcopy" }
  objcopy_embed_flag: "-I"
  objcopy_embed_flag: "binary"
  tool_path { name: "objdump" path: "/usr/bin/objdump" }
  tool_path { name: "strip" path: "/usr/bin/strip" }

  # Anticipated future default.
  unfiltered_cxx_flag: "-no-canonical-prefixes"
  unfiltered_cxx_flag: "-fno-canonical-system-headers"

  # Make C++ compilation deterministic. Use linkstamping instead of these
  # compiler symbols.
  unfiltered_cxx_flag: "-Wno-builtin-macro-redefined"
  unfiltered_cxx_flag: "-D__DATE__=\"redacted\""
  unfiltered_cxx_flag: "-D__TIMESTAMP__=\"redacted\""
  unfiltered_cxx_flag: "-D__TIME__=\"redacted\""

  # Security hardening on by default.
  # 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.
  compiler_flag: "-U_FORTIFY_SOURCE"
  compiler_flag: "-D_FORTIFY_SOURCE=1"
  compiler_flag: "-fstack-protector"
  linker_flag: "-Wl,-z,relro,-z,now"

  # Enable coloring even if there's no attached terminal. Bazel removes the
  # escape sequences if --nocolor is specified. This isn't supported by gcc
  # on Ubuntu 14.04.
  # compiler_flag: "-fcolor-diagnostics"

  # All warnings are enabled. Maybe enable -Werror as well?
  compiler_flag: "-Wall"
  # Enable a few more warnings that aren't part of -Wall.
  compiler_flag: "-Wunused-but-set-parameter"
  # But disable some that are problematic.
  compiler_flag: "-Wno-free-nonheap-object" # has false positives

  # Keep stack frames for debugging, even in opt mode.
  compiler_flag: "-fno-omit-frame-pointer"

  # Anticipated future default.
  linker_flag: "-no-canonical-prefixes"
  # Have gcc return the exit code from ld.
  linker_flag: "-pass-exit-codes"
  # Stamp the binary with a unique identifier.
  linker_flag: "-Wl,--build-id=md5"
  linker_flag: "-Wl,--hash-style=gnu"
  # Gold linker only? Can we enable this by default?
  # linker_flag: "-Wl,--warn-execstack"
  # linker_flag: "-Wl,--detect-odr-violations"

  compilation_mode_flags {
    mode: DBG
    # Enable debug symbols.
    compiler_flag: "-g"
  }
  compilation_mode_flags {
    mode: OPT

    # 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.
    compiler_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.
    compiler_flag: "-O2"

    # Disable assertions
    compiler_flag: "-DNDEBUG"

    # Removal of unused code and data at link time (can this increase binary size in some cases?).
    compiler_flag: "-ffunction-sections"
    compiler_flag: "-fdata-sections"
    linker_flag: "-Wl,--gc-sections"
  }
  linking_mode_flags { mode: DYNAMIC }
}

toolchain {
  abi_version: "local"
  abi_libc_version: "local"
  builtin_sysroot: ""
  compiler: "compiler"
  host_system_name: "local"
  needsPic: true
  target_libc: "macosx"
  target_cpu: "darwin"
  target_system_name: "local"
  toolchain_identifier: "local_darwin"

  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: "gcc" path: "osx_cc_wrapper.sh" }
  cxx_flag: "-std=c++0x"
  ar_flag: "-static"
  ar_flag: "-s"
  ar_flag: "-o"
  linker_flag: "-lstdc++"
  linker_flag: "-undefined"
  linker_flag: "dynamic_lookup"
  # TODO(ulfjack): This is wrong on so many levels. Figure out a way to auto-detect the proper
  # setting from the local compiler, and also how to make incremental builds correct.
  cxx_builtin_include_directory: "/"
  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" }
  objcopy_embed_flag: "-I"
  objcopy_embed_flag: "binary"
  tool_path { name: "objdump" path: "/usr/bin/objdump" }
  tool_path { name: "strip" path: "/usr/bin/strip" }

  # Anticipated future default.
  unfiltered_cxx_flag: "-no-canonical-prefixes"

  # Make C++ compilation deterministic. Use linkstamping instead of these
  # compiler symbols.
  unfiltered_cxx_flag: "-Wno-builtin-macro-redefined"
  unfiltered_cxx_flag: "-D__DATE__=\"redacted\""
  unfiltered_cxx_flag: "-D__TIMESTAMP__=\"redacted\""
  unfiltered_cxx_flag: "-D__TIME__=\"redacted\""

  # Security hardening on by default.
  # Conservative choice; -D_FORTIFY_SOURCE=2 may be unsafe in some cases.
  compiler_flag: "-D_FORTIFY_SOURCE=1"
  compiler_flag: "-fstack-protector"

  # Enable coloring even if there's no attached terminal. Bazel removes the
  # escape sequences if --nocolor is specified.
  compiler_flag: "-fcolor-diagnostics"

  # All warnings are enabled. Maybe enable -Werror as well?
  compiler_flag: "-Wall"
  # Enable a few more warnings that aren't part of -Wall.
  compiler_flag: "-Wthread-safety"
  compiler_flag: "-Wself-assign"

  # Keep stack frames for debugging, even in opt mode.
  compiler_flag: "-fno-omit-frame-pointer"

  # Anticipated future default.
  linker_flag: "-no-canonical-prefixes"

  compilation_mode_flags {
    mode: DBG
    # Enable debug symbols.
    compiler_flag: "-g"
  }
  compilation_mode_flags {
    mode: OPT
    # 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.
    compiler_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.
    compiler_flag: "-O2"

    # Disable assertions
    compiler_flag: "-DNDEBUG"

    # Removal of unused code and data at link time (can this increase binary size in some cases?).
    compiler_flag: "-ffunction-sections"
    compiler_flag: "-fdata-sections"
  }
  linking_mode_flags { mode: DYNAMIC }
}

toolchain {
  abi_version: "local"
  abi_libc_version: "local"
  builtin_sysroot: ""
  compiler: "compiler"
  host_system_name: "local"
  needsPic: true
  supports_gold_linker: false
  supports_incremental_linker: false
  supports_fission: false
  supports_interface_shared_objects: false
  supports_normalizing_ar: false
  supports_start_end_lib: false
  supports_thin_archives: false
  target_libc: "local"
  target_cpu: "freebsd"
  target_system_name: "local"
  toolchain_identifier: "local_freebsd"

  tool_path { name: "ar" path: "/usr/bin/ar" }
  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: "gcc" path: "/usr/bin/cc" }
  cxx_flag: "-std=c++0x"
  linker_flag: "-lstdc++"
  linker_flag: "-B/usr/bin/"

  # TODO(bazel-team): In theory, the path here ought to exactly match the path
  # used by gcc. That works because bazel currently doesn't track files at
  # absolute locations and has no remote execution, yet. However, this will need
  # to be fixed, maybe with auto-detection?
  cxx_builtin_include_directory: "/usr/local/include"
  cxx_builtin_include_directory: "/usr/include"
  tool_path { name: "gcov" path: "/usr/bin/gcov" }

  # C(++) compiles invoke the compiler (as that is the one knowing where
  # to find libraries), but we provide LD so other rules can invoke the linker.
  tool_path { name: "ld" path: "/usr/bin/ld" }

  tool_path { name: "nm" path: "/usr/bin/nm" }
  tool_path { name: "objcopy" path: "/usr/bin/objcopy" }
  objcopy_embed_flag: "-I"
  objcopy_embed_flag: "binary"
  tool_path { name: "objdump" path: "/usr/bin/objdump" }
  tool_path { name: "strip" path: "/usr/bin/strip" }

  # Anticipated future default.
  unfiltered_cxx_flag: "-no-canonical-prefixes"

  # Make C++ compilation deterministic. Use linkstamping instead of these
  # compiler symbols.
  unfiltered_cxx_flag: "-Wno-builtin-macro-redefined"
  unfiltered_cxx_flag: "-D__DATE__=\"redacted\""
  unfiltered_cxx_flag: "-D__TIMESTAMP__=\"redacted\""
  unfiltered_cxx_flag: "-D__TIME__=\"redacted\""

  # Security hardening on by default.
  # 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.
  compiler_flag: "-U_FORTIFY_SOURCE"
  compiler_flag: "-D_FORTIFY_SOURCE=1"
  compiler_flag: "-fstack-protector"
  linker_flag: "-Wl,-z,relro,-z,now"

  # Enable coloring even if there's no attached terminal. Bazel removes the
  # escape sequences if --nocolor is specified. This isn't supported by gcc
  # on Ubuntu 14.04.
  # compiler_flag: "-fcolor-diagnostics"

  # All warnings are enabled. Maybe enable -Werror as well?
  compiler_flag: "-Wall"
  # Enable a few more warnings that aren't part of -Wall.
  #compiler_flag: "-Wunused-but-set-parameter"
  # But disable some that are problematic.
  #compiler_flag: "-Wno-free-nonheap-object" # has false positives

  # Keep stack frames for debugging, even in opt mode.
  compiler_flag: "-fno-omit-frame-pointer"

  # Anticipated future default.
  linker_flag: "-no-canonical-prefixes"
  # Have gcc return the exit code from ld.
  #linker_flag: "-pass-exit-codes"
  # Stamp the binary with a unique identifier.
  #linker_flag: "-Wl,--build-id=md5"
  linker_flag: "-Wl,--hash-style=gnu"
  # Gold linker only? Can we enable this by default?
  # linker_flag: "-Wl,--warn-execstack"
  # linker_flag: "-Wl,--detect-odr-violations"

  compilation_mode_flags {
    mode: DBG
    # Enable debug symbols.
    compiler_flag: "-g"
  }
  compilation_mode_flags {
    mode: OPT

    # 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.
    compiler_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.
    compiler_flag: "-O2"

    # Disable assertions
    compiler_flag: "-DNDEBUG"

    # Removal of unused code and data at link time (can this increase binary size in some cases?).
    compiler_flag: "-ffunction-sections"
    compiler_flag: "-fdata-sections"
    linker_flag: "-Wl,--gc-sections"
  }
  linking_mode_flags { mode: DYNAMIC }
}

toolchain {
  abi_version: "local"
  abi_libc_version: "local"
  builtin_sysroot: ""
  compiler: "windows_mingw"
  host_system_name: "local"
  needsPic: false
  target_libc: "local"
  target_cpu: "x64_windows"
  target_system_name: "local"
  toolchain_identifier: "local_windows_mingw"

  tool_path { name: "ar" path: "C:/mingw/bin/ar" }
  tool_path { name: "compat-ld" path: "C:/mingw/bin/ld" }
  tool_path { name: "cpp" path: "C:/mingw/bin/cpp" }
  tool_path { name: "dwp" path: "C:/mingw/bin/dwp" }
  tool_path { name: "gcc" path: "C:/mingw/bin/gcc" }
  cxx_flag: "-std=c++0x"
  # TODO(bazel-team): In theory, the path here ought to exactly match the path
  # used by gcc. That works because bazel currently doesn't track files at
  # absolute locations and has no remote execution, yet. However, this will need
  # to be fixed, maybe with auto-detection?
  cxx_builtin_include_directory: "C:/mingw/include"
  cxx_builtin_include_directory: "C:/mingw/lib/gcc"
  tool_path { name: "gcov" path: "C:/mingw/bin/gcov" }
  tool_path { name: "ld" path: "C:/mingw/bin/ld" }
  tool_path { name: "nm" path: "C:/mingw/bin/nm" }
  tool_path { name: "objcopy" path: "C:/mingw/bin/objcopy" }
  objcopy_embed_flag: "-I"
  objcopy_embed_flag: "binary"
  tool_path { name: "objdump" path: "C:/mingw/bin/objdump" }
  tool_path { name: "strip" path: "C:/mingw/bin/strip" }
  linking_mode_flags { mode: DYNAMIC }
}

toolchain {
  abi_version: "local"
  abi_libc_version: "local"
  builtin_sysroot: ""
  compiler: "windows_msys64_mingw64"
  host_system_name: "local"
  needsPic: false
  target_libc: "local"
  target_cpu: "x64_windows"
  target_system_name: "local"
  toolchain_identifier: "local_windows_msys64_mingw64"

  tool_path { name: "ar" path: "C:/tools/msys64/mingw64/bin/ar" }
  tool_path { name: "compat-ld" path: "C:/tools/msys64/mingw64/bin/ld" }
  tool_path { name: "cpp" path: "C:/tools/msys64/mingw64/bin/cpp" }
  tool_path { name: "dwp" path: "C:/tools/msys64/mingw64/bin/dwp" }
  tool_path { name: "gcc" path: "C:/tools/msys64/mingw64/bin/gcc" }
  cxx_flag: "-std=c++0x"
  # TODO(bazel-team): In theory, the path here ought to exactly match the path
  # used by gcc. That works because bazel currently doesn't track files at
  # absolute locations and has no remote execution, yet. However, this will need
  # to be fixed, maybe with auto-detection?
  cxx_builtin_include_directory: "C:/tools/msys64/mingw64/x86_64-w64-mingw32/include"
  tool_path { name: "gcov" path: "C:/tools/msys64/mingw64/bin/gcov" }
  tool_path { name: "ld" path: "C:/tools/msys64/mingw64/bin/ld" }
  tool_path { name: "nm" path: "C:/tools/msys64/mingw64/bin/nm" }
  tool_path { name: "objcopy" path: "C:/tools/msys64/mingw64/bin/objcopy" }
  objcopy_embed_flag: "-I"
  objcopy_embed_flag: "binary"
  tool_path { name: "objdump" path: "C:/tools/msys64/mingw64/bin/objdump" }
  tool_path { name: "strip" path: "C:/tools/msys64/mingw64/bin/strip" }
  linking_mode_flags { mode: DYNAMIC }
}

toolchain {
  abi_version: "local"
  abi_libc_version: "local"
  builtin_sysroot: ""
  compiler: "windows_clang"
  host_system_name: "local"
  needsPic: false
  target_libc: "local"
  target_cpu: "x64_windows"
  target_system_name: "local"
  toolchain_identifier: "local_windows_clang"

  tool_path { name: "ar" path: "C:/mingw/bin/ar" }
  tool_path { name: "compat-ld" path: "C:/Program Files (x86)/LLVM/bin/ld" }
  tool_path { name: "cpp" path: "C:/Program Files (x86)/LLVM/bin/cpp" }
  tool_path { name: "dwp" path: "C:/Program Files (x86)/LLVM/bin/dwp" }
  tool_path { name: "gcc" path: "C:/Program Files (x86)/LLVM/bin/clang" }
  cxx_flag: "-std=c++0x"
  # TODO(bazel-team): In theory, the path here ought to exactly match the path
  # used by gcc. That works because bazel currently doesn't track files at
  # absolute locations and has no remote execution, yet. However, this will need
  # to be fixed, maybe with auto-detection?
  cxx_builtin_include_directory: "/usr/lib/gcc/"
  cxx_builtin_include_directory: "/usr/local/include"
  cxx_builtin_include_directory: "/usr/include"
  tool_path { name: "gcov" path: "C:/Program Files (x86)/LLVM/bin/gcov" }
  tool_path { name: "ld" path: "C:/Program Files (x86)/LLVM/bin/ld" }
  tool_path { name: "nm" path: "C:/Program Files (x86)/LLVM/bin/nm" }
  tool_path { name: "objcopy" path: "C:/Program Files (x86)/LLVM/bin/objcopy" }
  objcopy_embed_flag: "-I"
  objcopy_embed_flag: "binary"
  tool_path { name: "objdump" path: "C:/Program Files (x86)/LLVM/bin/objdump" }
  tool_path { name: "strip" path: "C:/Program Files (x86)/LLVM/bin/strip" }
  linking_mode_flags { mode: DYNAMIC }
}

toolchain {
   abi_version: "local"
   abi_libc_version: "local"
   builtin_sysroot: ""
   compiler: "windows_msys64"
   host_system_name: "local"
   needsPic: false
   target_libc: "local"
   target_cpu: "x64_windows"
   target_system_name: "local"
   toolchain_identifier: "local_windows_msys64"

   tool_path { name: "ar" path: "C:/tools/msys64/usr/bin/ar" }
   tool_path { name: "compat-ld" path: "C:/tools/msys64/usr/bin/ld" }
   tool_path { name: "cpp" path: "C:/tools/msys64/usr/bin/cpp" }
   tool_path { name: "dwp" path: "C:/tools/msys64/usr/bin/dwp" }
   # Use gcc instead of g++ so that C will compile correctly.
   tool_path { name: "gcc" path: "C:/tools/msys64/usr/bin/gcc" }
   cxx_flag: "-std=gnu++0x"
   linker_flag: "-lstdc++"
   # TODO(bazel-team): In theory, the path here ought to exactly match the path
   # used by gcc. That works because bazel currently doesn't track files at
   # absolute locations and has no remote execution, yet. However, this will need
   # to be fixed, maybe with auto-detection?
   cxx_builtin_include_directory: "C:/tools/msys64/"
   cxx_builtin_include_directory: "/usr/"
   tool_path { name: "gcov" path: "C:/tools/msys64/usr/bin/gcov" }
   tool_path { name: "ld" path: "C:/tools/msys64/usr/bin/ld" }
   tool_path { name: "nm" path: "C:/tools/msys64/usr/bin/nm" }
   tool_path { name: "objcopy" path: "C:/tools/msys64/usr/bin/objcopy" }
   objcopy_embed_flag: "-I"
   objcopy_embed_flag: "binary"
   tool_path { name: "objdump" path: "C:/tools/msys64/usr/bin/objdump" }
   tool_path { name: "strip" path: "C:/tools/msys64/usr/bin/strip" }
   linking_mode_flags { mode: DYNAMIC }
}

toolchain {
  toolchain_identifier: "vc_14_0_x64"
  host_system_name: "local"
  target_system_name: "local"

  abi_version: "local"
  abi_libc_version: "local"
  target_cpu: "x64_windows"
  compiler: "cl"
  target_libc: "msvcrt140"
  default_python_version: "python2.7"
  cxx_builtin_include_directory: "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/INCLUDE"
  cxx_builtin_include_directory: "C:/Program Files (x86)/Windows Kits/10/include/10.0.10240.0/ucrt"
  tool_path {
    name: "ar"
    path: "wrapper/bin/msvc_link.bat"
  }
  tool_path {
    name: "cpp"
    path: "wrapper/bin/msvc_cl.bat"
  }
  tool_path {
    name: "gcc"
    path: "wrapper/bin/msvc_cl.bat"
  }
  tool_path {
    name: "gcov"
    path: "wrapper/bin/msvc_nop.bat"
  }
  tool_path {
    name: "ld"
    path: "wrapper/bin/msvc_link.bat"
  }
  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_gold_linker: false
  supports_thin_archives: false
  supports_start_end_lib: false
  supports_interface_shared_objects: false
  supports_incremental_linker: false
  supports_normalizing_ar: true
  needsPic: false

  compiler_flag: "-m64"

  # TODO(pcloudy): Review those flags below, they should be defined by cl.exe
  compiler_flag: "/DOS_WINDOWS=OS_WINDOWS"
  compiler_flag: "/DCOMPILER_MSVC"

  # Don't pollute with GDI macros in windows.h.
  compiler_flag: "/DNOGDI"
  # Don't define min/max macros in windows.h.
  compiler_flag: "/DNOMINMAX"
  compiler_flag: "/DPRAGMA_SUPPORTED"
  # Platform defines.
  compiler_flag: "/D_WIN32"
  compiler_flag: "/DWIN32"
  compiler_flag: "/D_WIN32_WINNT=0x0502"
  compiler_flag: "/DWINVER=0x0502"
  compiler_flag: "/D_MSC_VER=1900"
  compiler_flag: "/D_WINDOWS"
  # 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"
  # Use math constants (M_PI, etc.) from the math library
  compiler_flag: "/D_USE_MATH_DEFINES"
  # Don't bloat namespace with incompatible winsock versions.
  compiler_flag: "/DWIN32_LEAN_AND_MEAN"

  # Useful options to have on for compilation.
  # Suppress startup banner.
  compiler_flag: "/nologo"
  # Treat warnings as errors.
  compiler_flag: "/WX"
  # 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"
  # Warning level 3 (could possibly go to 4 in the future).
  compiler_flag: "/W3"
  # Catch both asynchronous (structured) and synchronous (C++) exceptions.
  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: "-m64"

  compilation_mode_flags {
    mode: DBG
    compiler_flag: "/DDEBUG=1"
    # This will signal the wrapper that we are doing a debug build, which sets
    # some internal state of the toolchain wrapper. It is intentionally a "-"
    # flag to make this very obvious.
    compiler_flag: "-g"
    compiler_flag: "/Od"
    compiler_flag: "-Xcompilation-mode=dbg"
  }

  compilation_mode_flags {
    mode: FASTBUILD
    compiler_flag: "/DNDEBUG"
    compiler_flag: "/Od"
    compiler_flag: "-Xcompilation-mode=fastbuild"
  }

  compilation_mode_flags {
    mode: OPT
    compiler_flag: "/DNDEBUG"
    compiler_flag: "/O2"
    compiler_flag: "-Xcompilation-mode=opt"
  }
}

@damienmg
Copy link
Contributor

On FreeBSD it copies tools/cpp/CROSSTOOL.

Ok so here the instruction:
add to tools/cpp/CROSSTOOL:

    cxx_builtin_include_directory: "/usr/local/lib/gcc48/include/c++/"
    cxx_builtin_include_directory: "/usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd10.1"
    cxx_builtin_include_directory: "/usr/local/lib/gcc48/include/c++/backward"
    cxx_builtin_include_directory: "/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include"
    cxx_builtin_include_directory: "/usr/local/lib/gcc48/gcc/x86_64-portbld-freebsd10.1/4.8.5/include-fixed"

Recompile Bazel and use that new binary in tensorflow (but do bazel clean --expunge in tensorflow first).

Assigning to @aehlig for further reference for his effort to make Bazel works on FreeBSD.

@aehlig
Copy link
Contributor

aehlig commented Aug 28, 2017

I believe this issue is fixed by now, given that science/py-tensorflow is in the ports collection now.

/cc @amutu FYI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
P2 We'll consider working on this in future. (Assignee optional) platform: other type: feature request
Projects
None yet
Development

No branches or pull requests

5 participants