2016-06-11 5 views
5

hinzufügen Ich versuche, externe Header-Datei (wie OpenCL-Header-Datei) für einige Experimente für Tensorflow hinzufügen. Ich habe versucht, dies unter tensorflow/core/BUILD-Datei in BUILD-Datei hinzufügen:Wie externe Header-Dateien während bazel/Tensorflow Build

# This includes implementations of all kernels built into TensorFlow. 
cc_library(
    name = "all_kernels", 
    visibility = ["//visibility:public"], 
    copts = tf_copts() + ["-Ithird_party/include"], <==== this is the line I added 

ich auch einen Softlink in diesem Verzeichnis in den Speicherort dieser Header-Dateien von OpenCL-Treiber (unter tensorflow/third_party) erstellt haben, zu (wie ln -s/opt/opencl /), aber es beschwert sich immer noch, dass es diese Header-Datei nicht gefunden hat.

Wenn ich externe Header-Datei direkt (wie/opt/opencl/CL /) hinzufügen, beschwert es sich, dass externe Dateien nicht aufgenommen werden können (oder so etwas).

Ich habe kein Root-Passwort, um diese Header-Dateien in/usr/include/too zu kopieren.

Kann jemand erklären, wie man externe Headerdateien in tensorflow für das Errichten genau tut?

Danke für jede schnelle Hilfe.

Antwort

0

Bazel versucht streng darauf zu achten, dass seine Builds nur Dateien enthalten, von denen sie weiß, dass sie reproduzierbar sind. Leider kann es schwierig sein, damit zu experimentieren. Der richtige Weg zur Lösung des Problems besteht darin, eine BUILD-Datei und -Regel für die Header zu erstellen, die Sie einschließen möchten. Sie können möglicherweise etwas hacken, indem Sie mit den bazel- * generierten Ordnern herumspielen, aber ich empfehle es nicht.

+1

Dank für die Hilfe, aber ich wollte wissen, wie genau das geht. Wie ich in meinem ursprünglichen Beitrag gesagt habe, wenn ich den Softlink zum internen Verzeichnis hinzufüge und das als "-I" gebe, funktioniert es immer noch nicht. Also, wollte genau wissen, wie wir das machen können. –

1

Sie müssen die Dateien als eine Abhängigkeit von dieser Regel hinzufügen.

IIUC, Sie haben die folgende Struktur:

tensorflow/ 
    BUILD 
    WORKSPACE 
    tensorflow/ 
    core/ 
     BUILD 
    third_party/ 
    include -> /opt/opencl/CL # or something like that 

Sie möchten, können Sie die H-Dateien in einer Weise Bazel belichten verstehen/abhängen, so eröffnen die tensorflow/BUILD Datei und fügen Sie die folgenden Schritte aus:

Das erstellt eine C++ - Bibliothek aus den .h-Dateien unter third_party/include, auf die von überall in der Quellstruktur zugegriffen werden kann.

auf Ihre tensorflow/core/BUILD Datei Nun gehen Sie und eine Abhängigkeit der cc_library dort hinzuzufügen:

cc_library(
    name = "all_kernels", 
    visibility = ["//visibility:public"], 
    copts = tf_copts() + ["-Ithird_party/include"], 
    deps = [ 
     "//:opencl", 
     # plus any other deps 
    ], 
) 

Einstellung copts ändert sich nur die Flags, wenn gcc laufen gelassen wird. Das Hinzufügen von //:opencl zu den Abhängigkeiten weist Bazel an, diese Dateien verfügbar zu machen, wenn gcc ausgeführt wird.

2

Ich habe mit dem ähnlichen Problem konfrontiert, als ich TensorFlow mit Intel MKL baute und MKL-Header hinzufügen musste.Meine Lösung ist folgende:

  1. Erstellen symbolischer Link auf Ihre Header in third_party Ordner, wie zB:

    <your tensorflow folder>/third_party/opencl/include -> /opt/OpenCL/include 
    

    mit dem Befehl:

    ln -s /opt/OpenCL/include <your tensorflow folder>/third_party/opencl 
    
  2. Erstellen Sie einfache BUILD-Datei in <your tensorflow folder>/third_party/opencl Ordner:

    cc_library(
        name = "opencl", 
        hdrs = glob(["include/CL/*.h"]), 
        visibility = ["//visibility:public"], 
    ) 
    
  3. Add deps in Zielbibliothek:

    cc_library(
        name = "all_kernels", 
        visibility = ["//visibility:public"], 
        copts = tf_copts() + ["-Ithird_party/opencl/include"], 
        deps = [ 
         "//third_party/opencl", 
         ... 
        ], 
    ) 
    
  4. Sie Compiler-Optionen hinzuzufügen, entweder in der Zielbibliothek nicht vergessen, wie oben oder einfach nur als ein Flag gezeigt bazel:

    bazel build --copt="-Ithird_party/opencl/include" ... 
    
Verwandte Themen