Date   

[meta-tensorflow][PATCH 24/25] tensorflow: split sub packages

hongxu
 

Split sub packages (libtensorflow-c libtensorflow-framework
label-image label-image-lite python3-tensorflow), then user
chould select the required one rather than install them
as a whole

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
recipes-framework/tensorflow/tensorflow_2.4.0.bb | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/recipes-framework/tensorflow/tensorflow_2.4.0.bb b/recipes-framework/tensorflow/tensorflow_2.4.0.bb
index 49c868e..6c4163e 100644
--- a/recipes-framework/tensorflow/tensorflow_2.4.0.bb
+++ b/recipes-framework/tensorflow/tensorflow_2.4.0.bb
@@ -168,7 +168,20 @@ FILES_${PN}-dev = ""
INSANE_SKIP_${PN} += "dev-so \
already-stripped \
"
-FILES_${PN} += "${libdir}/* ${datadir}/*"
+
+PACKAGE_BEFORE_PN += "libtensorflow-c libtensorflow-framework label-image label-image-lite python3-tensorflow"
+
+RDEPENDS_label-image += "libtensorflow-framework"
+RDEPENDS_python3-tensorflow += "libtensorflow-framework"
+RDEPENDS_${PN} += "libtensorflow-c libtensorflow-framework label-image label-image-lite python3-tensorflow"
+
+ALLOW_EMPTY_${PN} = "1"
+
+FILES_python3-tensorflow += "${libdir}/* ${datadir}/* ${sbindir}/*"
+FILES_libtensorflow-c = "${libdir}/libtensorflow.so ${libdir}/libtensorflow_cc.so"
+FILES_libtensorflow-framework = "${libdir}/libtensorflow.so ${libdir}/libtensorflow_framework.so*"
+FILES_label-image = "${sbindir}/label_image"
+FILES_label-image-lite = "${sbindir}/label_image.lite"

inherit siteinfo unsupportarch
python __anonymous() {
--
2.21.0


[meta-tensorflow][PATCH 23/25] BUILD.md: update quick start for tensorflow 2

hongxu
 

Refers begginers of upstream [1] [2]
[1] https://www.tensorflow.org/install/pip
[2] https://www.tensorflow.org/tutorials/quickstart/beginner

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
BUILD.md | 97 ++++++++++++++++++++++++++++++++------------------------
1 file changed, 55 insertions(+), 42 deletions(-)

diff --git a/BUILD.md b/BUILD.md
index da5a148..bd0f44a 100644
--- a/BUILD.md
+++ b/BUILD.md
@@ -41,75 +41,88 @@ $ runqemu qemux86-64 core-image-minimal slirp kvm qemuparams="-m 5120"

## 5. Verify the install
```
-root@qemux86-64:~# python3 -c "import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"
-tf.Tensor(-604.65454, shape=(), dtype=float32)
+root@qemux86-64:~# python3 -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
+tf.Tensor(-3304.6208, shape=(), dtype=float32)
```

## 6. Run tutorial case
### Refer: https://www.tensorflow.org/tutorials
```
-root@qemux86-64:~# cat >code.py <<ENDOF
+root@qemux86-64:~# cat >code-v2.py <<ENDOF
import tensorflow as tf
mnist = tf.keras.datasets.mnist

-(x_train, y_train),(x_test, y_test) = mnist.load_data()
+(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
- tf.keras.layers.Dense(512, activation=tf.nn.relu),
+ tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
- tf.keras.layers.Dense(10, activation=tf.nn.softmax)
+ tf.keras.layers.Dense(10)
])
+
+predictions = model(x_train[:1]).numpy()
+tf.nn.softmax(predictions).numpy()
+loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
+loss_fn(y_train[:1], predictions).numpy()
+
model.compile(optimizer='adam',
- loss='sparse_categorical_crossentropy',
+ loss=loss_fn,
metrics=['accuracy'])
-
model.fit(x_train, y_train, epochs=5)
-model.evaluate(x_test, y_test)
+model.evaluate(x_test, y_test, verbose=2)
+
+probability_model = tf.keras.Sequential([
+ model,
+ tf.keras.layers.Softmax()
+])
+probability_model(x_test[:5])
+
+
ENDOF

-root@qemux86-64:~# python3 ./code.py
-Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
-11493376/11490434 [==============================] - 7s 1us/step
-Instructions for updating:
-Colocations handled automatically by placer.
-Instructions for updating:
-Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.
+root@qemux86-64:~# python3 ./code-v2.py
+2020-12-15 08:16:44.171593: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:116] None of the MLIR optimization passes are enabled (registered 2)
+2020-12-15 08:16:44.184464: I tensorflow/core/platform/profile_utils/cpu_utils.cc:112] CPU Frequency: 3099995000 Hz
Epoch 1/5
-60000/60000 [==============================] - 27s 449us/sample - loss: 0.2211 - acc: 0.9346
+1875/1875 [==============================] - 14s 7ms/step - loss: 0.4833 - accuracy: 0.8595
Epoch 2/5
-60000/60000 [==============================] - 24s 408us/sample - loss: 0.0969 - acc: 0.9702
+1875/1875 [==============================] - 13s 7ms/step - loss: 0.1549 - accuracy: 0.9558
Epoch 3/5
-60000/60000 [==============================] - 26s 439us/sample - loss: 0.0694 - acc: 0.9780
+1875/1875 [==============================] - 13s 7ms/step - loss: 0.1135 - accuracy: 0.9651
Epoch 4/5
-60000/60000 [==============================] - 23s 390us/sample - loss: 0.0540 - acc: 0.9832
+1875/1875 [==============================] - 13s 7ms/step - loss: 0.0889 - accuracy: 0.9729
Epoch 5/5
-60000/60000 [==============================] - 24s 399us/sample - loss: 0.0447 - acc: 0.9851
-10000/10000 [==============================] - 1s 91us/sample - loss: 0.0700 - acc: 0.9782
+1875/1875 [==============================] - 13s 7ms/step - loss: 0.0741 - accuracy: 0.9777
+313/313 - 1s - loss: 0.0757 - accuracy: 0.9757
```
## 7. TensorFlow/TensorFlow Lite C++ Image Recognition Demo
```
root@qemux86-64:~# time label_image
-2019-03-06 06:08:51.076028: I tensorflow/examples/label_image/main.cc:251] military uniform (653): 0.834306
-2019-03-06 06:08:51.078221: I tensorflow/examples/label_image/main.cc:251] mortarboard (668): 0.0218695
-2019-03-06 06:08:51.080054: I tensorflow/examples/label_image/main.cc:251] academic gown (401): 0.010358
-2019-03-06 06:08:51.081943: I tensorflow/examples/label_image/main.cc:251] pickelhaube (716): 0.00800814
-2019-03-06 06:08:51.083830: I tensorflow/examples/label_image/main.cc:251] bulletproof vest (466): 0.00535084
-real 0m 10.50s
-user 0m 3.95s
-sys 0m 6.46s
+2020-12-15 08:18:34.853885: I tensorflow/core/platform/profile_utils/cpu_utils.cc:112] CPU Frequency: 3099995000 Hz
+2020-12-15 08:18:41.565167: I tensorflow/examples/label_image/main.cc:252] military uniform (653): 0.834306
+2020-12-15 08:18:41.567874: I tensorflow/examples/label_image/main.cc:252] mortarboard (668): 0.0218696
+2020-12-15 08:18:41.568936: I tensorflow/examples/label_image/main.cc:252] academic gown (401): 0.0103581
+2020-12-15 08:18:41.569985: I tensorflow/examples/label_image/main.cc:252] pickelhaube (716): 0.00800819
+2020-12-15 08:18:41.571025: I tensorflow/examples/label_image/main.cc:252] bulletproof vest (466): 0.00535086
+
+real 0m7.178s
+user 0m6.101s
+sys 0m0.893s
+
root@qemux86-64:~# time label_image.lite
-Loaded model /usr/share/label_image/mobilenet_v1_1.0_224_quant.tflite
-resolved reporter
-invoked
-average time: 1064.8 ms
-0.780392: 653 military uniform
-0.105882: 907 Windsor tie
-0.0156863: 458 bow tie
-0.0117647: 466 bulletproof vest
-0.00784314: 835 suit
-real 0m 1.10s
-user 0m 1.07s
-sys 0m 0.02s
+INFO: Loaded model /usr/share/label_image/mobilenet_v1_1.0_224_quant.tflite
+INFO: resolved reporter
+INFO: invoked
+INFO: average time: 213.584 ms
+INFO: 0.780392: 653 military uniform
+INFO: 0.105882: 907 Windsor tie
+INFO: 0.0156863: 458 bow tie
+INFO: 0.0117647: 466 bulletproof vest
+INFO: 0.00784314: 835 suit
+
+real 0m0.233s
+user 0m0.216s
+sys 0m0.012s
```
--
2.21.0


[meta-tensorflow][PATCH 22/25] bazel-native/bazel.bbclass: support bazel build without limitation

hongxu
 

Set BAZEL_JOBS and BAZEL_MEM with empty string to make bazel build without
limitation

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
classes/bazel.bbclass | 9 ++++++++-
recipes-devtools/bazel/bazel-native_3.7.1.bb | 6 +++---
2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/classes/bazel.bbclass b/classes/bazel.bbclass
index 8a3dadf..f5dc597 100644
--- a/classes/bazel.bbclass
+++ b/classes/bazel.bbclass
@@ -77,13 +77,20 @@ def bazel_get_flags(d):
flags += "# From TOOLCHAIN_OPTIONS\n"
flags += "build --linkopt=%s\n" % i

+ if d.getVar("BAZEL_JOBS"):
+ flags += "# From BAZEL_JOBS\n"
+ flags += "build --jobs=%s --local_cpu_resources=%s\n" % (d.getVar("BAZEL_JOBS"), d.getVar("BAZEL_JOBS"))
+
+ if d.getVar("BAZEL_MEM"):
+ flags += "# From BAZEL_MEM\n"
+ flags += "build --local_ram_resources=%s\n" % (d.getVar("BAZEL_MEM"))
+
return flags

bazel_do_configure () {
cat > "${S}/bazelrc" <<-EOF
build --verbose_failures
build --spawn_strategy=standalone --genrule_strategy=standalone
-build --jobs=${BAZEL_JOBS} --local_ram_resources=${BAZEL_MEM} --local_cpu_resources=${BAZEL_JOBS}
test --verbose_failures --verbose_test_summary
test --spawn_strategy=standalone --genrule_strategy=standalone

diff --git a/recipes-devtools/bazel/bazel-native_3.7.1.bb b/recipes-devtools/bazel/bazel-native_3.7.1.bb
index 03cff37..4f2e28b 100644
--- a/recipes-devtools/bazel/bazel-native_3.7.1.bb
+++ b/recipes-devtools/bazel/bazel-native_3.7.1.bb
@@ -30,9 +30,9 @@ inherit bazel-base
EXTRA_BAZEL_ARGS = " \
--host_javabase=@local_jdk//:jdk \
--python_path=python3 \
- --jobs=${BAZEL_JOBS} \
- --local_ram_resources=${BAZEL_MEM} \
- --local_cpu_resources=${BAZEL_JOBS} \
+ ${@oe.utils.conditional("BAZEL_JOBS", "", "", "--jobs=${BAZEL_JOBS}", d )} \
+ ${@oe.utils.conditional("BAZEL_JOBS", "", "", "--local_cpu_resources=${BAZEL_JOBS}", d )} \
+ ${@oe.utils.conditional("BAZEL_MEM", "", "", "--local_ram_resources=${BAZEL_MEM}", d )} \
"

do_compile () {
--
2.21.0


[meta-tensorflow][PATCH 21/25] add classes/bazel-base.bbclass and imporve classes/bazel-base.bbclass

hongxu
 

- Move common config settings to bazel-base.bbclass

- Improve bazel_get_flags to make each flag per line with comments

- Use BAZEL_MEM rather than hardcoded for option --local_ram_resources

- Explicitly remove dir ${BAZEL_DIR} before do_clean

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
classes/bazel-base.bbclass | 11 +++++
classes/bazel.bbclass | 47 ++++++++++++--------
recipes-devtools/bazel/bazel-native_3.7.1.bb | 6 +--
3 files changed, 41 insertions(+), 23 deletions(-)
create mode 100644 classes/bazel-base.bbclass

diff --git a/classes/bazel-base.bbclass b/classes/bazel-base.bbclass
new file mode 100644
index 0000000..a067733
--- /dev/null
+++ b/classes/bazel-base.bbclass
@@ -0,0 +1,11 @@
+export JAVA_HOME="${STAGING_LIBDIR_NATIVE}/jvm/openjdk-8-native"
+
+BAZEL_JOBS ??= "4"
+
+# Memory 4GB
+BAZEL_MEM ??= "4096"
+
+TS_DL_DIR ??= "${DL_DIR}"
+
+CCACHE_DISABLE = "1"
+
diff --git a/classes/bazel.bbclass b/classes/bazel.bbclass
index 3ace2ba..8a3dadf 100644
--- a/classes/bazel.bbclass
+++ b/classes/bazel.bbclass
@@ -3,6 +3,8 @@ DEPENDS += "bazel-native \
"
DEPENDS_append_class-target = " python3"

+inherit bazel-base
+
BAZEL_DIR ?= "${WORKDIR}/bazel"
BAZEL_OUTPUTBASE_DIR ?= "${BAZEL_DIR}/output_base"
export BAZEL_ARGS="--output_user_root=${BAZEL_DIR}/user_root \
@@ -11,8 +13,6 @@ export BAZEL_ARGS="--output_user_root=${BAZEL_DIR}/user_root \
--batch \
"

-export JAVA_HOME="${STAGING_LIBDIR_NATIVE}/jvm/openjdk-8-native"
-
BAZEL ?= "${BAZEL_DIR}/bazel"

do_prepare_recipe_sysroot[postfuncs] += "do_install_bazel"
@@ -26,56 +26,64 @@ do_install_bazel() {
def bazel_get_flags(d):
flags = ""
for i in d.getVar("CC").split()[1:]:
- flags += "--conlyopt=%s --cxxopt=%s --linkopt=%s " % (i, i, i)
+ flags += "# From CC\n"
+ flags += "build --conlyopt=%s --cxxopt=%s --linkopt=%s\n" % (i, i, i)

for i in d.getVar("CFLAGS").split():
if i == "-g":
continue
- flags += "--conlyopt=%s " % i
+ flags += "# From CFLAGS\n"
+ flags += "build --conlyopt=%s\n" % i

for i in d.getVar("BUILD_CFLAGS").split():
- flags += "--host_conlyopt=%s " % i
+ flags += "# From BUILD_CFLAGS\n"
+ flags += "build --host_conlyopt=%s\n" % i

for i in d.getVar("CXXFLAGS").split():
if i == "-g":
continue
- flags += "--cxxopt=%s " % i
+ flags += "# From CXXFLAGS\n"
+ flags += "build --cxxopt=%s\n" % i

for i in d.getVar("BUILD_CXXFLAGS").split():
- flags += "--host_cxxopt=%s " % i
+ flags += "# From BUILD_CXXFLAGS\n"
+ flags += "build --host_cxxopt=%s\n" % i

for i in d.getVar("CPPFLAGS").split():
if i == "-g":
continue
- flags += "--conlyopt=%s --cxxopt=%s " % (i, i)
+ flags += "# From CPPFLAGS\n"
+ flags += "build --conlyopt=%s --cxxopt=%s\n" % (i, i)

for i in d.getVar("BUILD_CPPFLAGS").split():
- flags += "--host_conlyopt=%s --host_cxxopt=%s " % (i, i)
+ flags += "# From BUILD_CPPFLAGS\n"
+ flags += "build --host_conlyopt=%s --host_cxxopt=%s\n" % (i, i)

for i in d.getVar("LDFLAGS").split():
if i == "-Wl,--as-needed":
continue
- flags += "--linkopt=%s " % i
+ flags += "# From LDFLAGS\n"
+ flags += "build --linkopt=%s\n" % i

for i in d.getVar("BUILD_LDFLAGS").split():
if i == "-Wl,--as-needed":
continue
- flags += "--host_linkopt=%s " % i
+ flags += "# From BUILD_LDFLAGS\n"
+ flags += "build --host_linkopt=%s\n" % i

for i in d.getVar("TOOLCHAIN_OPTIONS").split():
if i == "-Wl,--as-needed":
continue
- flags += "--linkopt=%s " % i
+ flags += "# From TOOLCHAIN_OPTIONS\n"
+ flags += "build --linkopt=%s\n" % i

return flags

-TS_DL_DIR ??= "${DL_DIR}"
-BAZEL_JOBS ??= "4"
bazel_do_configure () {
cat > "${S}/bazelrc" <<-EOF
build --verbose_failures
build --spawn_strategy=standalone --genrule_strategy=standalone
-#build --jobs=${BAZEL_JOBS} --local_ram_resources=4096 --local_cpu_resources=${BAZEL_JOBS}
+build --jobs=${BAZEL_JOBS} --local_ram_resources=${BAZEL_MEM} --local_cpu_resources=${BAZEL_JOBS}
test --verbose_failures --verbose_test_summary
test --spawn_strategy=standalone --genrule_strategy=standalone

@@ -98,8 +106,10 @@ EOF

bazel_do_configure_append_class-target () {
cat >> "${S}/bazelrc" <<-EOF
-# FLAGS
-build ${@bazel_get_flags(d)}
+# FLAGS begin
+${@bazel_get_flags(d)}
+# FLAGS end
+
build --linkopt=-Wl,-latomic

EOF
@@ -109,8 +119,6 @@ EOF

EXPORT_FUNCTIONS do_configure

-CCACHE_DISABLE = "1"
-
PSEUDO_IGNORE_PATHS .= ",${WORKDIR}/bazel"

inherit unsupportarch
@@ -125,4 +133,5 @@ clean_bazel() {
${BAZEL} clean
fi
fi
+ rm ${BAZEL_DIR} -rf
}
diff --git a/recipes-devtools/bazel/bazel-native_3.7.1.bb b/recipes-devtools/bazel/bazel-native_3.7.1.bb
index a1575d6..03cff37 100644
--- a/recipes-devtools/bazel/bazel-native_3.7.1.bb
+++ b/recipes-devtools/bazel/bazel-native_3.7.1.bb
@@ -25,19 +25,17 @@ DEPENDS = "coreutils-native \

S="${WORKDIR}"

-TS_DL_DIR ??= "${DL_DIR}"
+inherit bazel-base

-BAZEL_JOBS ??= "4"
EXTRA_BAZEL_ARGS = " \
--host_javabase=@local_jdk//:jdk \
--python_path=python3 \
--jobs=${BAZEL_JOBS} \
- --local_ram_resources=4096 \
+ --local_ram_resources=${BAZEL_MEM} \
--local_cpu_resources=${BAZEL_JOBS} \
"

do_compile () {
- export JAVA_HOME="${STAGING_LIBDIR_NATIVE}/jvm/openjdk-8-native"
TMPDIR="${TOPDIR}/bazel" \
VERBOSE=yes \
EXTRA_BAZEL_ARGS="${EXTRA_BAZEL_ARGS}" \
--
2.21.0


[meta-tensorflow][PATCH 20/25] bazel-native: 3.1.0 -> 3.7.1

hongxu
 

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
...l-native_3.1.0.bb => bazel-native_3.7.1.bb} | 4 ++--
...e-sysroot-dir-to-the-default-Bazel-to.patch | 12 ++++++------
.../bazel/files/0001-python3.patch | 18 +++++++++---------
3 files changed, 17 insertions(+), 17 deletions(-)
rename recipes-devtools/bazel/{bazel-native_3.1.0.bb => bazel-native_3.7.1.bb} (90%)

diff --git a/recipes-devtools/bazel/bazel-native_3.1.0.bb b/recipes-devtools/bazel/bazel-native_3.7.1.bb
similarity index 90%
rename from recipes-devtools/bazel/bazel-native_3.1.0.bb
rename to recipes-devtools/bazel/bazel-native_3.7.1.bb
index 1336da8..a1575d6 100644
--- a/recipes-devtools/bazel/bazel-native_3.1.0.bb
+++ b/recipes-devtools/bazel/bazel-native_3.7.1.bb
@@ -2,8 +2,8 @@ DESCRIPTION = "Bazel build and test tool"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"

-SRC_URI[md5sum] = "381ca27503c566ce5e489d1ba07d1d25"
-SRC_URI[sha256sum] = "d7f40d0cac95a06cea6cb5b7f7769085257caebc3ee84269dd9298da760d5615"
+SRC_URI[md5sum] = "cc255121586e849c4de2483a8a5814b6"
+SRC_URI[sha256sum] = "c9244e5905df6b0190113e26082c72d58b56b1b0dec66d076f083ce4089b0307"

SRC_URI = "https://github.com/bazelbuild/bazel/releases/download/${PV}/bazel-${PV}-dist.zip \
file://0001-HttpDownloader-save-download-tarball-to-distdir.patch \
diff --git a/recipes-devtools/bazel/files/0001-add-Yocto-native-sysroot-dir-to-the-default-Bazel-to.patch b/recipes-devtools/bazel/files/0001-add-Yocto-native-sysroot-dir-to-the-default-Bazel-to.patch
index b08c65a..7d73eb7 100644
--- a/recipes-devtools/bazel/files/0001-add-Yocto-native-sysroot-dir-to-the-default-Bazel-to.patch
+++ b/recipes-devtools/bazel/files/0001-add-Yocto-native-sysroot-dir-to-the-default-Bazel-to.patch
@@ -1,6 +1,6 @@
-From 707ba08068432262b3d02b29804c00afe7133ff6 Mon Sep 17 00:00:00 2001
+From 34c4dc1a10140addf75d3503d4b9f427303fe212 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Thu, 10 Dec 2020 16:12:51 +0800
+Date: Mon, 14 Dec 2020 16:45:31 +0800
Subject: [PATCH] add Yocto native sysroot dir to the default Bazel toolchain

While using the default Bazel C++ toolchain to build Yocto native tools
@@ -21,12 +21,12 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
1 file changed, 3 insertions(+)

diff --git a/tools/cpp/unix_cc_configure.bzl b/tools/cpp/unix_cc_configure.bzl
-index 84f5479..e17aa9d 100755
+index d48485b..0d297bf 100755
--- a/tools/cpp/unix_cc_configure.bzl
+++ b/tools/cpp/unix_cc_configure.bzl
-@@ -424,6 +424,9 @@ def configure_unix_toolchain(repository_ctx, cpu_value, overriden_tools):
- ),
- )
+@@ -443,6 +443,9 @@ def configure_unix_toolchain(repository_ctx, cpu_value, overriden_tools):
+ paths["@bazel_tools//tools/cpp:generate_system_module_map.sh"],
+ ))

+ # Customize for Yocto
+ builtin_include_directories.append(get_env_var(repository_ctx,"YOCTO_NATIVE_SYSROOT", "NOT_SET_YOCTO_NATIVE_SYSROOT"))
diff --git a/recipes-devtools/bazel/files/0001-python3.patch b/recipes-devtools/bazel/files/0001-python3.patch
index 93eee2d..c14dec7 100644
--- a/recipes-devtools/bazel/files/0001-python3.patch
+++ b/recipes-devtools/bazel/files/0001-python3.patch
@@ -1,6 +1,6 @@
-From e43263d6163f7ba1622b268e93635bf42493f758 Mon Sep 17 00:00:00 2001
+From aa31b751f9b2e5263e4510c8719f29050b8ce0de Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 8 Dec 2020 11:09:44 +0800
+Date: Mon, 14 Dec 2020 16:43:45 +0800
Subject: [PATCH] set python3 interpreter

Since many distrobution choose python3, and drop python2,
@@ -20,28 +20,28 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java
-index 2c0ae4d..ae39cc9 100755
+index 9be9ef3..dec19e5 100755
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java
-@@ -237,7 +237,7 @@ public class BazelPythonSemantics implements PythonSemantics {
+@@ -247,7 +247,7 @@ public class BazelPythonSemantics implements PythonSemantics {
PathFragment shExecutable = ShToolchain.getPathOrError(ruleContext);
// TODO(#8685): Remove this special-case handling as part of making the proper shebang a
// property of the Python toolchain configuration.
- String pythonExecutableName = OS.getCurrent() == OS.OPENBSD ? "python3" : "python";
+ String pythonExecutableName = OS.getCurrent() == OS.OPENBSD ? "python3" : "python3";
+ // NOTE: keep the following line intact to support nix builds
+ String pythonShebang = "#!/usr/bin/env " + pythonExecutableName;
ruleContext.registerAction(
- new SpawnAction.Builder()
- .addInput(zipFile)
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt
-index 59c00e8..31d29a4 100755
+index 29f043f..c83891a 100755
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3

- from __future__ import absolute_import
- from __future__ import division
+ # This script must retain compatibility with a wide variety of Python versions
+ # since it is run for every py_binary target. Currently we guarantee support
--
2.18.2

--
2.21.0


[meta-tensorflow][PATCH 19/25] tensorflow: clean up CROSSTOOL.tpl

hongxu
 

CROSSTOOL files are no longer supported after Bazel v0.26+

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
.../tensorflow/files/CROSSTOOL.tpl | 230 ------------------
.../tensorflow/tensorflow_2.4.0.bb | 3 -
2 files changed, 233 deletions(-)
delete mode 100644 recipes-framework/tensorflow/files/CROSSTOOL.tpl

diff --git a/recipes-framework/tensorflow/files/CROSSTOOL.tpl b/recipes-framework/tensorflow/files/CROSSTOOL.tpl
deleted file mode 100644
index 753898a..0000000
--- a/recipes-framework/tensorflow/files/CROSSTOOL.tpl
+++ /dev/null
@@ -1,230 +0,0 @@
-major_version: "local"
-minor_version: ""
-default_target_cpu: "same_as_host"
-
-toolchain {
- abi_version: "armeabi"
- abi_libc_version: "armeabi"
- builtin_sysroot: ""
- compiler: "compiler"
- host_system_name: "armeabi"
- 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
- target_libc: "armeabi"
- target_cpu: "armeabi"
- target_system_name: "armeabi"
- toolchain_identifier: "yocto-linux-gnueabihf"
-
- tool_path { name: "ar" path: "%%YOCTO_COMPILER_PATH%%/recipe-sysroot-native/usr/bin/%%CT_NAME%%/%%CT_NAME%%-ar" }
- tool_path { name: "compat-ld" path: "/bin/false" }
- tool_path { name: "cpp" path: "%%YOCTO_COMPILER_PATH%%/recipe-sysroot-native/usr/bin/%%CT_NAME%%/%%CT_NAME%%-cpp" }
- tool_path { name: "dwp" path: "%%YOCTO_COMPILER_PATH%%/recipe-sysroot-native/usr/bin/%%CT_NAME%%/%%CT_NAME%%-dwp" }
- tool_path { name: "gcc" path: "%%YOCTO_COMPILER_PATH%%/recipe-sysroot-native/usr/bin/%%CT_NAME%%/%%CT_NAME%%-gcc" }
- tool_path { name: "gcov" path: "%%YOCTO_COMPILER_PATH%%/recipe-sysroot-native/usr/bin/%%CT_NAME%%/%%CT_NAME%%-gcov" }
- tool_path { name: "ld" path: "%%YOCTO_COMPILER_PATH%%/recipe-sysroot-native/usr/bin/%%CT_NAME%%/%%CT_NAME%%-ld" }
-
- tool_path { name: "nm" path: "%%YOCTO_COMPILER_PATH%%/recipe-sysroot-native/usr/bin/%%CT_NAME%%/%%CT_NAME%%-nm" }
- tool_path { name: "objcopy" path: "%%YOCTO_COMPILER_PATH%%/recipe-sysroot-native/usr/bin/%%CT_NAME%%/%%CT_NAME%%-objcopy" }
- tool_path { name: "objdump" path: "%%YOCTO_COMPILER_PATH%%/recipe-sysroot-native/usr/bin/%%CT_NAME%%/%%CT_NAME%%-objdump" }
- tool_path { name: "strip" path: "%%YOCTO_COMPILER_PATH%%/recipe-sysroot-native/usr/bin/%%CT_NAME%%/%%CT_NAME%%-strip" }
-
-
- cxx_builtin_include_directory: "%%YOCTO_COMPILER_PATH%%"
-
- compiler_flag: "--sysroot=%%YOCTO_COMPILER_PATH%%/recipe-sysroot"
-
- # The path below must match the one used in
- # tensorflow/tools/ci_build/pi/build_raspberry_pi.sh.
- cxx_builtin_include_directory: "/tmp/openblas_install/include/"
- cxx_flag: "-std=c++11"
- # The cxx_builtin_include_directory directives don't seem to be adding these, so
- # explicitly set them as flags. There's a query to the Bazel team outstanding about
- # why this is necessary.
- linker_flag: "-lstdc++"
-
- 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\""
-
- unfiltered_cxx_flag: "-no-canonical-prefixes"
- unfiltered_cxx_flag: "-fno-canonical-system-headers"
-
- # Include target pyconfig.h
- compiler_flag: "-D_PYTHON_INCLUDE_TARGET"
-
- compiler_flag: "-U_FORTIFY_SOURCE"
- compiler_flag: "-D_FORTIFY_SOURCE=1"
- compiler_flag: "-fstack-protector"
- compiler_flag: "-DRASPBERRY_PI" # To differentiate from mobile builds.
- linker_flag: "-Wl,-z,relro,-z,now"
-
- linker_flag: "-no-canonical-prefixes"
- linker_flag: "-pass-exit-codes"
-
- linker_flag: "-Wl,--build-id=md5"
-
- 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
- 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
- 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/lib64/gcc/"
- cxx_builtin_include_directory: "/usr/local/include"
- cxx_builtin_include_directory: "/usr/include"
- cxx_builtin_include_directory: "%%YOCTO_COMPILER_PATH%%/recipe-sysroot-native/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"
-
- # Include native pyconfig.h
- compiler_flag: "-D_PYTHON_INCLUDE_NATIVE"
-
- # 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 }
-}
diff --git a/recipes-framework/tensorflow/tensorflow_2.4.0.bb b/recipes-framework/tensorflow/tensorflow_2.4.0.bb
index af66397..49c868e 100644
--- a/recipes-framework/tensorflow/tensorflow_2.4.0.bb
+++ b/recipes-framework/tensorflow/tensorflow_2.4.0.bb
@@ -9,7 +9,6 @@ SRC_URI += " \
file://0001-support-32-bit-x64-and-arm-for-yocto.patch \
file://BUILD.in \
file://BUILD.yocto_compiler \
- file://CROSSTOOL.tpl \
file://cc_config.bzl.tpl \
file://yocto_compiler_configure.bzl \
"
@@ -71,7 +70,6 @@ ENDOF
mkdir -p ${S}/third_party/toolchains/yocto/
sed "s#%%CPU%%#${BAZEL_TARGET_CPU}#g" ${WORKDIR}/BUILD.in > ${S}/third_party/toolchains/yocto/BUILD
chmod 644 ${S}/third_party/toolchains/yocto/BUILD
- install -m 644 ${WORKDIR}/CROSSTOOL.tpl ${S}/third_party/toolchains/yocto/
install -m 644 ${WORKDIR}/cc_config.bzl.tpl ${S}/third_party/toolchains/yocto/
install -m 644 ${WORKDIR}/yocto_compiler_configure.bzl ${S}/third_party/toolchains/yocto/
install -m 644 ${WORKDIR}/BUILD.yocto_compiler ${S}
@@ -82,7 +80,6 @@ ENDOF
SED_COMMAND="${SED_COMMAND}; s#%%YOCTO_COMPILER_PATH%%#${BAZEL_OUTPUTBASE_DIR}/external/yocto_compiler#g"

sed -i "${SED_COMMAND}" ${S}/BUILD.yocto_compiler \
- ${S}/third_party/toolchains/yocto/CROSSTOOL.tpl \
${S}/WORKSPACE

${TF_CONFIG} \
--
2.21.0


[meta-tensorflow][PATCH 18/25] tensorboard: 1.12.2 -> 2.4

hongxu
 

Rebase patch to 2.4
- 0001-customize-for-Yocto.patch

Fix projector cannot find module 'd3'

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
.../0001-customize-for-Yocto.patch | 199 +++++++++++-------
...-projector-fix-cannot-find-module-d3.patch | 34 +++
...nsorboard_1.12.2.bb => tensorboard_2.4.bb} | 53 ++++-
3 files changed, 195 insertions(+), 91 deletions(-)
create mode 100644 recipes-framework/tensorflow/tensorboard/0001-projector-fix-cannot-find-module-d3.patch
rename recipes-framework/tensorflow/{tensorboard_1.12.2.bb => tensorboard_2.4.bb} (47%)

diff --git a/recipes-framework/tensorflow/tensorboard/0001-customize-for-Yocto.patch b/recipes-framework/tensorflow/tensorboard/0001-customize-for-Yocto.patch
index 07d8257..4055e0b 100644
--- a/recipes-framework/tensorflow/tensorboard/0001-customize-for-Yocto.patch
+++ b/recipes-framework/tensorflow/tensorboard/0001-customize-for-Yocto.patch
@@ -1,6 +1,6 @@
-From 03b1ddf5058485ce1c94e6a8dc0762ad3430b6a2 Mon Sep 17 00:00:00 2001
+From 30c3d17327b7b66e082dbb443c9e528bf7aa6ac4 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Thu, 25 Apr 2019 21:13:32 +0800
+Date: Mon, 14 Dec 2020 15:14:25 +0800
Subject: [PATCH] customize for Yocto

- Remove virtualenv/pip/bdist_wheel calling which Yocto does not support
@@ -11,13 +11,13 @@ Upstream-Status: Inappropriate [oe specific]

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
- WORKSPACE | 6 ++++++
- tensorboard/pip_package/build_pip_package.sh | 31 +++-------------------------
- third_party/workspace.bzl | 8 +++++++
- 3 files changed, 17 insertions(+), 28 deletions(-)
+ WORKSPACE | 6 +++
+ tensorboard/pip_package/build_pip_package.sh | 57 ++------------------
+ third_party/workspace.bzl | 8 +++
+ 3 files changed, 17 insertions(+), 54 deletions(-)

diff --git a/WORKSPACE b/WORKSPACE
-index 8ab70cc..0c18f6f 100644
+index 86f5feaa..8056cfff 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -1,5 +1,11 @@
@@ -31,102 +31,139 @@ index 8ab70cc..0c18f6f 100644
+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

- # Needed as a transitive dependency of rules_webtesting below.
+ http_archive(
diff --git a/tensorboard/pip_package/build_pip_package.sh b/tensorboard/pip_package/build_pip_package.sh
-index 754fa83..969709d 100755
+index ef8df010..085ea608 100755
--- a/tensorboard/pip_package/build_pip_package.sh
+++ b/tensorboard/pip_package/build_pip_package.sh
-@@ -23,7 +23,7 @@ else
- sedi="sed -i"
- fi
-
--run_smoke_test=1
-+run_smoke_test=0
- while [ "$#" -gt 0 ]; do
- case "$1" in
- "--no-smoke")
-@@ -71,31 +71,20 @@ from tensorboard.plugins.beholder import Beholder, BeholderHook
+@@ -12,7 +12,7 @@
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+-
++set -x
+ usage() {
+ cat <<EOF
+ usage: build_pip_package OUTPUT_DIR
+@@ -28,12 +28,6 @@ EOF
}

- set -x
--command -v curl >/dev/null
--command -v perl >/dev/null
--command -v python2 >/dev/null
--command -v python3 >/dev/null
--command -v virtualenv >/dev/null
- [ -d "${RUNFILES}" ]
+ main() {
+- if [ $# -ne 1 ]; then
+- usage 2>&1
+- return 1
+- fi
+- output="$1"
+-
+ if [ -z "${RUNFILES+set}" ]; then
+ RUNFILES="$(CDPATH="" cd -- "$0.runfiles" && pwd)"
+ fi
+@@ -41,16 +35,12 @@ main() {
+ if [ "$(uname)" = "Darwin" ]; then
+ workdir="$(mktemp -d -t tensorboard-pip)"
+ else
+- workdir="$(mktemp -d -p /tmp -t tensorboard-pip.XXXXXXXXXX)"
++ workdir="${DESTDIR}"
++ rm -rf ${workdir} && mkdir -p ${workdir}
+ fi
+ original_wd="${PWD}"
+ cd "${workdir}" || return 2

--dest=/tmp/tensorboard
-+dest=${DESTDIR}
- if [ ! -e $dest ]; then
-- mkdir $dest
-+ mkdir -p $dest
- else
- dest="$(mktemp -d -p /tmp -t tensorboard-pip.XXXXXXXXXX)"
- fi
- cd "${dest}"
+- cleanup() {
+- rm -r "${workdir}"
+- }
+- trap cleanup EXIT
+-
+ log_file="${workdir}/log"
+ build >"${log_file}" 2>&1
+ exit_code=$?
+@@ -68,20 +58,12 @@ build() (
+ sedi="sed -i"
+ fi

- cp -LR "${RUNFILES}/org_tensorflow_tensorboard/tensorboard" .
--mv -f "tensorboard/pip_package/LICENSE" .
--mv -f "tensorboard/pip_package/MANIFEST.in" .
--mv -f "tensorboard/pip_package/README.rst" .
--mv -f "tensorboard/pip_package/setup.cfg" .
--mv -f "tensorboard/pip_package/setup.py" .
- rm -rf tensorboard/pip_package
+- command -v virtualenv >/dev/null
+ [ -d "${RUNFILES}" ]

- rm -f tensorboard/tensorboard # bazel py_binary sh wrapper
--chmod -x LICENSE # bazel symlinks confuse cp
- find . -name __init__.py | xargs chmod -x # which goes for all genfiles
+ cp -LR "${RUNFILES}/org_tensorflow_tensorboard/tensorboard" .
+- mv -f "tensorboard/pip_package/LICENSE" .
+- mv -f "tensorboard/pip_package/MANIFEST.in" .
+- mv -f "tensorboard/pip_package/README.rst" .
+- mv -f "tensorboard/pip_package/requirements.txt" .
+- mv -f "tensorboard/pip_package/setup.cfg" .
+- mv -f "tensorboard/pip_package/setup.py" .
+ rm -rf "tensorboard/pip_package"

- mkdir -p tensorboard/_vendor
-@@ -117,21 +106,7 @@ find tensorboard -name \*.py |
- s/from tensorflow_serving/from tensorboard._vendor.tensorflow_serving/
- '
+ rm -f tensorboard/tensorboard # bazel py_binary sh wrapper
+- chmod -x LICENSE # bazel symlinks confuse cp
+ find . -name __init__.py -exec chmod -x {} + # which goes for all genfiles

--virtualenv venv
--export VIRTUAL_ENV=venv
--export PATH="$PWD/venv/bin:${PATH}"
--unset PYTHON_HOME
+ mkdir -p tensorboard/_vendor
+@@ -100,39 +82,6 @@ build() (
+ s/^import webencodings$/from tensorboard._vendor import webencodings/
+ s/^from webencodings/from tensorboard._vendor.webencodings/
+ ' {} +
-
--# Require wheel for bdist_wheel command, and setuptools 36.2.0+ so that
--# env markers are handled (https://github.com/pypa/setuptools/pull/1081)
--pip install -qU wheel 'setuptools>=36.2.0'
+- virtualenv -q -p python3 venv
+- export VIRTUAL_ENV=venv
+- export PATH="${PWD}/venv/bin:${PATH}"
+- unset PYTHON_HOME
-
--python setup.py bdist_wheel --python-tag py2 >/dev/null
--python setup.py bdist_wheel --python-tag py3 >/dev/null
+- # Require wheel for bdist_wheel command, and setuptools 36.2.0+ so that
+- # env markers are handled (https://github.com/pypa/setuptools/pull/1081)
+- export PYTHONWARNINGS=ignore:DEPRECATION # suppress Python 2.7 deprecation spam
+- pip install -qU wheel 'setuptools>=36.2.0'
-
- if [ "$run_smoke_test" = 1 ]; then
- smoke 2
- smoke 3
- fi
+- # Overrides file timestamps in the zip archive to make the build
+- # reproducible. (Date is mostly arbitrary, but must be past 1980 to be
+- # representable in a zip archive.)
+- export SOURCE_DATE_EPOCH=1577836800 # 2020-01-01T00:00:00Z
-
--ls -hal "$PWD/dist"
+- python setup.py bdist_wheel --python-tag py3 >/dev/null
+-
+- cd "${original_wd}" # Bazel gives "${output}" as a relative path >_>
+- case "${output}" in
+- *.tar.gz)
+- mkdir -p "$(dirname "${output}")"
+- "${RUNFILES}/org_tensorflow_tensorboard/tensorboard/pip_package/deterministic_tar_gz" \
+- "${output}" "${workdir}"/dist/*.whl
+- ;;
+- *)
+- if ! [ -d "${output}" ]; then
+- printf >&2 'fatal: no such output directory: %s\n' "${output}"
+- return 1
+- fi
+- mv "${workdir}"/dist/*.whl "${output}"
+- ;;
+- esac
+ )
+
+ main "$@"
diff --git a/third_party/workspace.bzl b/third_party/workspace.bzl
-index 083c441..24786f8 100644
+index e6a5183f..9260a8ab 100644
--- a/third_party/workspace.bzl
+++ b/third_party/workspace.bzl
-@@ -24,6 +24,7 @@ load("//third_party:polymer.bzl", "tensorboard_polymer_workspace")
- load("//third_party:python.bzl", "tensorboard_python_workspace")
+@@ -25,6 +25,7 @@ load("//third_party:python.bzl", "tensorboard_python_workspace")
load("//third_party:js.bzl", "tensorboard_js_workspace")
+ load("//third_party:rust.bzl", "tensorboard_rust_workspace")
load("//third_party:typings.bzl", "tensorboard_typings_workspace")
+load("//third_party/toolchains/yocto:yocto_compiler_configure.bzl", "yocto_compiler_configure")

- def tensorboard_workspace():
- tensorboard_fonts_workspace()
-@@ -32,6 +33,13 @@ def tensorboard_workspace():
- tensorboard_typings_workspace()
- tensorboard_js_workspace()
+ def tensorboard_workspace(name = ""):
+ """Add repositories needed to build TensorBoard.
+@@ -39,6 +40,13 @@ def tensorboard_workspace(name = ""):
+ tensorboard_js_workspace()
+ tensorboard_rust_workspace()

-+ # Point //external/local_config_yocto_compiler to //external/yocto_compiler
-+ yocto_compiler_configure(
-+ name = "local_config_yocto_compiler",
-+ build_file = str(Label("//third_party/toolchains/yocto:BUILD")),
-+ remote_config_repo = "../yocto_compiler",
-+ )
++ # Point //external/local_config_yocto_compiler to //external/yocto_compiler
++ yocto_compiler_configure(
++ name = "local_config_yocto_compiler",
++ build_file = str(Label("//third_party/toolchains/yocto:BUILD")),
++ remote_config_repo = "../yocto_compiler",
++ )
+
- http_archive(
- name = "com_google_protobuf_js",
- strip_prefix = "protobuf-3.6.0/js",
+ # Set up TypeScript toolchain.
+ ts_setup_workspace()
+
--
-2.7.4
+2.18.2

diff --git a/recipes-framework/tensorflow/tensorboard/0001-projector-fix-cannot-find-module-d3.patch b/recipes-framework/tensorflow/tensorboard/0001-projector-fix-cannot-find-module-d3.patch
new file mode 100644
index 0000000..1cab5dd
--- /dev/null
+++ b/recipes-framework/tensorflow/tensorboard/0001-projector-fix-cannot-find-module-d3.patch
@@ -0,0 +1,34 @@
+From 60f90ec3cc3e417c4b8fe2ea25ddf6e5ff99bde0 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 14 Dec 2020 14:51:36 +0800
+Subject: [PATCH] projector: fix cannot find module 'd3'
+
+[snip]
+$ bazel run tensorboard/plugins/projector/vz_projector:standalone
+tensorboard/plugins/projector/vz_projector/projectorScatterPlotAdapter.ts:16:21 - error TS2307: Cannot find module 'd3'.
+
+16 import * as d3 from 'd3';
+[snip]
+
+Upstream-Status: Submitted [https://github.com/tensorflow/tensorboard/pull/4465]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ tensorboard/plugins/projector/vz_projector/BUILD | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tensorboard/plugins/projector/vz_projector/BUILD b/tensorboard/plugins/projector/vz_projector/BUILD
+index f173cd78..1529440d 100644
+--- a/tensorboard/plugins/projector/vz_projector/BUILD
++++ b/tensorboard/plugins/projector/vz_projector/BUILD
+@@ -63,6 +63,7 @@ tf_ts_library(
+ "//tensorboard/webapp/third_party:tfjs",
+ "@npm//@polymer/decorators",
+ "@npm//@polymer/polymer",
++ "@npm//@types/d3",
+ "@npm//d3",
+ "@npm//numeric",
+ "@npm//three",
+--
+2.18.2
+
diff --git a/recipes-framework/tensorflow/tensorboard_1.12.2.bb b/recipes-framework/tensorflow/tensorboard_2.4.bb
similarity index 47%
rename from recipes-framework/tensorflow/tensorboard_1.12.2.bb
rename to recipes-framework/tensorflow/tensorboard_2.4.bb
index a27bdea..aa97890 100644
--- a/recipes-framework/tensorflow/tensorboard_1.12.2.bb
+++ b/recipes-framework/tensorflow/tensorboard_2.4.bb
@@ -3,17 +3,22 @@ your TensorFlow runs and graphs."
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e74df23890b9521cc481e3348863e45d"

-SRC_URI = "git://github.com/tensorflow/tensorboard.git; \
+SRC_URI = "git://github.com/tensorflow/tensorboard.git;branch=2.4; \
file://0001-customize-for-Yocto.patch \
- file://BUILD \
+ file://0001-projector-fix-cannot-find-module-d3.patch \
+ file://BUILD.in \
file://BUILD.yocto_compiler \
- file://CROSSTOOL.tpl \
+ file://cc_config.bzl.tpl \
file://yocto_compiler_configure.bzl \
"
-SRCREV = "7194c7486a0c4d107322ffad102c1ca0fcc0fc24"
+SRCREV = "4e2a918a0559514a633c3a29ac6238fed4b72ed5"
S = "${WORKDIR}/git"

-DEPENDS = "util-linux-native"
+DEPENDS = " \
+ util-linux-native \
+ python3-numpy-native \
+ python3-absl-native \
+"

RDEPENDS_${PN} += "python3 \
python3-core \
@@ -23,13 +28,40 @@ RDEPENDS_${PN} += "python3 \
python3-werkzeug \
python3-six \
python3-markdown \
+ python3-absl \
+ python3-google-auth \
+ python3-google-auth-oauthlib \
+ python3-requests \
"
inherit python3native bazel

+export PYTHON_BIN_PATH="${PYTHON}"
+export PYTHON_LIB_PATH="${STAGING_LIBDIR_NATIVE}/${PYTHON_DIR}/site-packages"
+export CROSSTOOL_PYTHON_INCLUDE_PATH="${STAGING_INCDIR}/python${PYTHON_BASEVERSION}${PYTHON_ABI}"
+
do_configure_append () {
+ if [ ! -e ${CROSSTOOL_PYTHON_INCLUDE_PATH}/pyconfig-target.h ];then
+ mv ${CROSSTOOL_PYTHON_INCLUDE_PATH}/pyconfig.h ${CROSSTOOL_PYTHON_INCLUDE_PATH}/pyconfig-target.h
+ fi
+
+ install -m 644 ${STAGING_INCDIR_NATIVE}/python${PYTHON_BASEVERSION}${PYTHON_ABI}/pyconfig.h \
+ ${CROSSTOOL_PYTHON_INCLUDE_PATH}/pyconfig-native.h
+
+ cat > ${CROSSTOOL_PYTHON_INCLUDE_PATH}/pyconfig.h <<ENDOF
+#if defined (_PYTHON_INCLUDE_TARGET)
+#include "pyconfig-target.h"
+#elif defined (_PYTHON_INCLUDE_NATIVE)
+#include "pyconfig-native.h"
+#else
+#error "_PYTHON_INCLUDE_TARGET or _PYTHON_INCLUDE_NATIVE is not defined"
+#endif // End of #if defined (_PYTHON_INCLUDE_TARGET)
+
+ENDOF
+
mkdir -p ${S}/third_party/toolchains/yocto/
- install -m 644 ${WORKDIR}/BUILD ${S}/third_party/toolchains/yocto/
- install -m 644 ${WORKDIR}/CROSSTOOL.tpl ${S}/third_party/toolchains/yocto/
+ sed "s#%%CPU%%#${BAZEL_TARGET_CPU}#g" ${WORKDIR}/BUILD.in > ${S}/third_party/toolchains/yocto/BUILD
+ chmod 644 ${S}/third_party/toolchains/yocto/BUILD
+ install -m 644 ${WORKDIR}/cc_config.bzl.tpl ${S}/third_party/toolchains/yocto/
install -m 644 ${WORKDIR}/yocto_compiler_configure.bzl ${S}/third_party/toolchains/yocto/
install -m 644 ${WORKDIR}/BUILD.yocto_compiler ${S}

@@ -39,25 +71,26 @@ do_configure_append () {
SED_COMMAND="${SED_COMMAND}; s#%%YOCTO_COMPILER_PATH%%#${BAZEL_OUTPUTBASE_DIR}/external/yocto_compiler#g"

sed -i "${SED_COMMAND}" ${S}/BUILD.yocto_compiler \
- ${S}/third_party/toolchains/yocto/CROSSTOOL.tpl \
${S}/WORKSPACE
}

do_compile () {
unset CC
+ export CT_NAME=$(echo ${HOST_PREFIX} | rev | cut -c 2- | rev)
DESTDIR=${WORKDIR}/python-tensorboard \
${BAZEL} run \
- --cpu=armeabi \
+ --cpu=${BAZEL_TARGET_CPU} \
--subcommands --explain=${T}/explain.log \
--verbose_explanations --verbose_failures \
--crosstool_top=@local_config_yocto_compiler//:toolchain \
+ --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
--verbose_failures \
//tensorboard/pip_package:build_pip_package
}

do_install () {
install -d ${D}${PYTHON_SITEPACKAGES_DIR}
- cp -rf ${WORKDIR}/python-tensorboard/* ${D}${PYTHON_SITEPACKAGES_DIR}
+ cp -rf ${WORKDIR}/python-tensorboard/tensorboard ${D}${PYTHON_SITEPACKAGES_DIR}
}

FILES_${PN} += "${libdir}/*"
--
2.21.0


[meta-tensorflow][PATCH 17/25] python3-pyasn1-modules: add version 0.2.8

hongxu
 

It is required by tensorboard

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
.../python/python3-pyasn1-modules_0.2.8.bb | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 recipes-devtools/python/python3-pyasn1-modules_0.2.8.bb

diff --git a/recipes-devtools/python/python3-pyasn1-modules_0.2.8.bb b/recipes-devtools/python/python3-pyasn1-modules_0.2.8.bb
new file mode 100644
index 0000000..fb11941
--- /dev/null
+++ b/recipes-devtools/python/python3-pyasn1-modules_0.2.8.bb
@@ -0,0 +1,22 @@
+SUMMARY = "ASN.1 modules for Python"
+HOMEPAGE = "https://github.com/etingof/pyasn1-modules"
+DESCRIPTION = "The pyasn1-modules package contains a collection of \
+ASN.1 data structures expressed as Python classes based on \
+pyasn1 data model."
+SECTION = "devel/python"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a14482d15c2249de3b6f0e8a47e021fd"
+
+inherit pypi
+
+SRC_URI[md5sum] = ""
+SRC_URI[sha256sum] = ""
+
+RDEPENDS_${PN} += " \
+ python3-pyasn1 \
+"
+
+BBCLASSEXTEND = "native"
+
+inherit setuptools3
--
2.21.0


[meta-tensorflow][PATCH 16/25] python3-pyasn1: add 0.4.8

hongxu
 

It is required by tensorboard

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
recipes-devtools/python/python3-pyasn1_0.4.8.bb | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
create mode 100644 recipes-devtools/python/python3-pyasn1_0.4.8.bb

diff --git a/recipes-devtools/python/python3-pyasn1_0.4.8.bb b/recipes-devtools/python/python3-pyasn1_0.4.8.bb
new file mode 100644
index 0000000..7f8b718
--- /dev/null
+++ b/recipes-devtools/python/python3-pyasn1_0.4.8.bb
@@ -0,0 +1,17 @@
+SUMMARY = "ASN.1 library for Python"
+HOMEPAGE = "https://github.com/etingof/pyasn1"
+DESCRIPTION = "This is a free and open source implementation of ASN.1 types \
+and codecs as a Python package"
+SECTION = "devel/python"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=a14482d15c2249de3b6f0e8a47e021fd"
+
+inherit pypi
+
+SRC_URI[md5sum] = "dffae4ff9f997a83324b3f33fe62be54"
+SRC_URI[sha256sum] = "aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"
+
+BBCLASSEXTEND = "native"
+
+inherit setuptools3
--
2.21.0


[meta-tensorflow][PATCH 15/25] python3-google-auth-oauthlib: add version 0.4.2

hongxu
 

It is required by tensorboard

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
.../python3-google-auth-oauthlib_0.4.2.bb | 20 +++++++++++++++++++
1 file changed, 20 insertions(+)
create mode 100644 recipes-devtools/python/python3-google-auth-oauthlib_0.4.2.bb

diff --git a/recipes-devtools/python/python3-google-auth-oauthlib_0.4.2.bb b/recipes-devtools/python/python3-google-auth-oauthlib_0.4.2.bb
new file mode 100644
index 0000000..09e3900
--- /dev/null
+++ b/recipes-devtools/python/python3-google-auth-oauthlib_0.4.2.bb
@@ -0,0 +1,20 @@
+SUMMARY = "The oauthlib integration for Google Auth"
+HOMEPAGE = "https://github.com/googleapis/google-auth-library-python-oauthlib"
+DESCRIPTION = "This library provides oauthlib integration with google-auth."
+SECTION = "devel/python"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7b7e367c7e1664e6565ee7d16cccc58a"
+
+inherit pypi
+
+SRC_URI[md5sum] = "5d3cb6250dd05fff0b7bc0912a3e8f0a"
+SRC_URI[sha256sum] = "65b65bc39ad8cab15039b35e5898455d3d66296d0584d96fe0e79d67d04c51d9"
+
+BBCLASSEXTEND = "native"
+
+RDEPENDS_${PN} += " \
+ python3-requests-oauthlib \
+ python3-oauthlib \
+"
+inherit setuptools3
--
2.21.0


[meta-tensorflow][PATCH 14/25] python3-google-auth: 1.6.3 -> 1.24.0

hongxu
 

Move it from meta-demo to meta-tensorflow which is required by
tensorboard

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
.../python/python-google-auth.inc | 10 ++++++++--
.../python/python3-google-auth_1.24.0.bb | 0
2 files changed, 8 insertions(+), 2 deletions(-)
rename {meta-demo/recipes-devtools => recipes-devtools}/python/python-google-auth.inc (63%)
rename meta-demo/recipes-devtools/python/python3-google-auth_1.6.3.bb => recipes-devtools/python/python3-google-auth_1.24.0.bb (100%)

diff --git a/meta-demo/recipes-devtools/python/python-google-auth.inc b/recipes-devtools/python/python-google-auth.inc
similarity index 63%
rename from meta-demo/recipes-devtools/python/python-google-auth.inc
rename to recipes-devtools/python/python-google-auth.inc
index 61e37c0..bfee039 100644
--- a/meta-demo/recipes-devtools/python/python-google-auth.inc
+++ b/recipes-devtools/python/python-google-auth.inc
@@ -9,7 +9,13 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"

inherit pypi

-SRC_URI[md5sum] = "0440718247cc4531422e2a8f4f012e8b"
-SRC_URI[sha256sum] = "0f7c6a64927d34c1a474da92cfc59e552a5d3b940d3266606c6a28b72888b9e4"
+SRC_URI[md5sum] = "d1f8a9284283b8db69e84c41b36db501"
+SRC_URI[sha256sum] = "0b0e026b412a0ad096e753907559e4bdb180d9ba9f68dd9036164db4fdc4ad2e"
+
+RDEPENDS_${PN} += " \
+ python3-cachetools \
+ python3-rsa \
+ python3-pyasn1-modules \
+"

BBCLASSEXTEND = "native"
diff --git a/meta-demo/recipes-devtools/python/python3-google-auth_1.6.3.bb b/recipes-devtools/python/python3-google-auth_1.24.0.bb
similarity index 100%
rename from meta-demo/recipes-devtools/python/python3-google-auth_1.6.3.bb
rename to recipes-devtools/python/python3-google-auth_1.24.0.bb
--
2.21.0


[meta-tensorflow][PATCH 13/25] classes/bazel.bbclass: clean up bazel files before do_clean

hongxu
 

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
classes/bazel.bbclass | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/classes/bazel.bbclass b/classes/bazel.bbclass
index 5a76244..3ace2ba 100644
--- a/classes/bazel.bbclass
+++ b/classes/bazel.bbclass
@@ -75,7 +75,7 @@ bazel_do_configure () {
cat > "${S}/bazelrc" <<-EOF
build --verbose_failures
build --spawn_strategy=standalone --genrule_strategy=standalone
-build --jobs=${BAZEL_JOBS} --local_ram_resources=4096 --local_cpu_resources=${BAZEL_JOBS}
+#build --jobs=${BAZEL_JOBS} --local_ram_resources=4096 --local_cpu_resources=${BAZEL_JOBS}
test --verbose_failures --verbose_test_summary
test --spawn_strategy=standalone --genrule_strategy=standalone

@@ -116,3 +116,13 @@ PSEUDO_IGNORE_PATHS .= ",${WORKDIR}/bazel"
inherit unsupportarch

export YOCTO_NATIVE_SYSROOT="${BAZEL_OUTPUTBASE_DIR}/external/yocto_compiler/recipe-sysroot-native"
+
+do_clean[prefuncs] += "clean_bazel"
+clean_bazel() {
+ if [ -d ${S} ]; then
+ cd ${S}
+ if [ -e ${BAZEL} ] && [ -e ${S}/bazelrc ]; then
+ ${BAZEL} clean
+ fi
+ fi
+}
--
2.21.0


[meta-tensorflow][PATCH 12/25] tensorflow: fix Multiple shlib providers for libtensorflow_framework.so

hongxu
 

|ERROR: tensorflow: Multiple shlib providers for
libtensorflow_framework.so.2: tensorflow, tensorflow (used by files:
tmp-glibc/work/core2-64-wrs-linux/tensorflow/2.4.0-r0/packages-split/
tensorflow/usr/lib64/python3.9/site-packages/tensorflow/python/
_pywrap_tf_session.so)

Remove the duplicate one

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
recipes-framework/tensorflow/tensorflow_2.4.0.bb | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/recipes-framework/tensorflow/tensorflow_2.4.0.bb b/recipes-framework/tensorflow/tensorflow_2.4.0.bb
index ba441a7..af66397 100644
--- a/recipes-framework/tensorflow/tensorflow_2.4.0.bb
+++ b/recipes-framework/tensorflow/tensorflow_2.4.0.bb
@@ -120,8 +120,6 @@ do_install() {
${D}${libdir}
install -m 644 ${S}/bazel-bin/tensorflow/libtensorflow_cc.so \
${D}${libdir}
- install -m 644 ${S}/bazel-bin/tensorflow/libtensorflow_framework.so \
- ${D}${libdir}

install -d ${D}${sbindir}
install -m 755 ${S}/bazel-bin/tensorflow/tools/benchmark/benchmark_model \
@@ -165,7 +163,7 @@ do_install() {
mv $app ${D}${sbindir}
done

- rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/tensorflow/libtensorflow_framework.so
+ mv ${D}${PYTHON_SITEPACKAGES_DIR}/tensorflow/libtensorflow_framework.so* ${D}${libdir}
)
}

--
2.21.0


[meta-tensorflow][PATCH 11/25] tensorflow: update cross compile support

hongxu
 

- CROSSTOOL files are no longer supported after Bazel v0.26+,
so converted over to the new toolchain config format

- Support 32 bit x86 and 64 bit x86 for Yocto

- Support 32 bit arm and 64 bit arm (aarch64) for Yocto

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
classes/bazel.bbclass | 7 +-
classes/unsupportarch.bbclass | 13 +-
...support-32-bit-x64-and-arm-for-yocto.patch | 129 ++++++
recipes-framework/tensorflow/files/BUILD | 56 ---
recipes-framework/tensorflow/files/BUILD.in | 40 ++
.../tensorflow/files/cc_config.bzl.tpl | 411 ++++++++++++++++++
.../files/yocto_compiler_configure.bzl | 26 +-
...or_1.13.bb => tensorflow-estimator_2.4.bb} | 0
.../tensorflow/tensorflow_2.4.0.bb | 21 +-
9 files changed, 634 insertions(+), 69 deletions(-)
create mode 100644 recipes-framework/tensorflow/files/0001-support-32-bit-x64-and-arm-for-yocto.patch
delete mode 100644 recipes-framework/tensorflow/files/BUILD
create mode 100644 recipes-framework/tensorflow/files/BUILD.in
create mode 100644 recipes-framework/tensorflow/files/cc_config.bzl.tpl
rename recipes-framework/tensorflow/{tensorflow-estimator_1.13.bb => tensorflow-estimator_2.4.bb} (100%)

diff --git a/classes/bazel.bbclass b/classes/bazel.bbclass
index 2a64156..5a76244 100644
--- a/classes/bazel.bbclass
+++ b/classes/bazel.bbclass
@@ -75,13 +75,16 @@ bazel_do_configure () {
cat > "${S}/bazelrc" <<-EOF
build --verbose_failures
build --spawn_strategy=standalone --genrule_strategy=standalone
-buuld --jobs=${BAZEL_JOBS} --local_ram_resources=4096 --local_cpu_resources=${BAZEL_JOBS}
+build --jobs=${BAZEL_JOBS} --local_ram_resources=4096 --local_cpu_resources=${BAZEL_JOBS}
test --verbose_failures --verbose_test_summary
test --spawn_strategy=standalone --genrule_strategy=standalone

build --linkopt=-Wl,--no-as-needed
build --host_linkopt=-Wl,--no-as-needed

+build --host_conlyopt=-D_PYTHON_INCLUDE_NATIVE --host_cxxopt=-D_PYTHON_INCLUDE_NATIVE
+build --conlyopt=-D_PYTHON_INCLUDE_TARGET --cxxopt=-D_PYTHON_INCLUDE_TARGET
+
build --strip=never

build --python_path=python3
@@ -108,6 +111,8 @@ EXPORT_FUNCTIONS do_configure

CCACHE_DISABLE = "1"

+PSEUDO_IGNORE_PATHS .= ",${WORKDIR}/bazel"
+
inherit unsupportarch

export YOCTO_NATIVE_SYSROOT="${BAZEL_OUTPUTBASE_DIR}/external/yocto_compiler/recipe-sysroot-native"
diff --git a/classes/unsupportarch.bbclass b/classes/unsupportarch.bbclass
index 8aecca3..f169c35 100644
--- a/classes/unsupportarch.bbclass
+++ b/classes/unsupportarch.bbclass
@@ -1,8 +1,11 @@
-UNSUPPORTED_TARGET_ARCH ??= "powerpc"
-UNSUPPORTED_TARGET_ARCH_mipsarchn32_append = " mips64"
+BAZEL_TARGET_CPU ??= ""
+BAZEL_TARGET_CPU_x86 = "x86"
+BAZEL_TARGET_CPU_x86-64 = "k8"
+BAZEL_TARGET_CPU_arm = "arm"
+BAZEL_TARGET_CPU_aarch64 = "aarch64"

python __anonymous() {
- target_arch = d.getVar("TARGET_ARCH")
- if target_arch in d.getVar("UNSUPPORTED_TARGET_ARCH").split():
- raise bb.parse.SkipPackage("TensorFlow does not support Target Arch '%s'" % target_arch)
+ if not d.getVar("BAZEL_TARGET_CPU"):
+ target_arch = d.getVar("TARGET_ARCH")
+ raise bb.parse.SkipPackage("BAZEL_TARGET_CPU is not set\nTensorFlow does not support Target Arch '%s'" % target_arch)
}
diff --git a/recipes-framework/tensorflow/files/0001-support-32-bit-x64-and-arm-for-yocto.patch b/recipes-framework/tensorflow/files/0001-support-32-bit-x64-and-arm-for-yocto.patch
new file mode 100644
index 0000000..7324136
--- /dev/null
+++ b/recipes-framework/tensorflow/files/0001-support-32-bit-x64-and-arm-for-yocto.patch
@@ -0,0 +1,129 @@
+From 52b0c97764b65e4351aa2005217b0827d94b842f Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Sat, 12 Dec 2020 21:41:29 +0800
+Subject: [PATCH] support 32 bit x64 and arm for yocto
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ tensorflow/BUILD | 1 -
+ tensorflow/workspace.bzl | 1 +
+ .../0001-XNNPACK-support-32-bit-x86.patch | 29 +++++++++++++++++++
+ third_party/aws/BUILD.bazel | 6 ++++
+ third_party/aws/aws-c-common.bazel | 9 ++++++
+ third_party/cpuinfo/BUILD.bazel | 1 -
+ 6 files changed, 45 insertions(+), 2 deletions(-)
+ create mode 100644 third_party/0001-XNNPACK-support-32-bit-x86.patch
+
+diff --git a/tensorflow/BUILD b/tensorflow/BUILD
+index 85e172afa03..4d2d90cd755 100644
+--- a/tensorflow/BUILD
++++ b/tensorflow/BUILD
+@@ -86,7 +86,6 @@ config_setting(
+ config_setting(
+ name = "android_x86",
+ values = {
+- "crosstool_top": "//external:android/crosstool",
+ "cpu": "x86",
+ },
+ visibility = ["//visibility:public"],
+diff --git a/tensorflow/workspace.bzl b/tensorflow/workspace.bzl
+index f6c47187c54..fce3c53fff0 100755
+--- a/tensorflow/workspace.bzl
++++ b/tensorflow/workspace.bzl
+@@ -140,6 +140,7 @@ def tf_repositories(path_prefix = "", tf_repo_name = ""):
+ name = "XNNPACK",
+ sha256 = "4b199c96fb2d551450b48eb5549843b41c023ad200aa86760a7c56d0dc0da806",
+ strip_prefix = "XNNPACK-68447302abcfad0d4b6b19a1efe7d7eef8833f4a",
++ patch_file = clean_dep("//third_party:0001-XNNPACK-support-32-bit-x86.patch"),
+ urls = [
+ "https://storage.googleapis.com/mirror.tensorflow.org/github.com/google/XNNPACK/archive/68447302abcfad0d4b6b19a1efe7d7eef8833f4a.zip",
+ "https://github.com/google/XNNPACK/archive/68447302abcfad0d4b6b19a1efe7d7eef8833f4a.zip",
+diff --git a/third_party/0001-XNNPACK-support-32-bit-x86.patch b/third_party/0001-XNNPACK-support-32-bit-x86.patch
+new file mode 100644
+index 00000000000..9e9ae3bb554
+--- /dev/null
++++ b/third_party/0001-XNNPACK-support-32-bit-x86.patch
+@@ -0,0 +1,29 @@
++From be12104d25bf9a74daeabd6eae388291196ebdc1 Mon Sep 17 00:00:00 2001
++From: Hongxu Jia <hongxu.jia@windriver.com>
++Date: Fri, 11 Dec 2020 23:29:23 +0800
++Subject: [PATCH] XNNPACK: support 32 bit x86
++
++Use android_x86 as a workaround to support 32 bit x86
++
++Upstream-Status: Inappropriate [oe specific]
++
++Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
++---
++ BUILD.bazel | 1 -
++ 1 file changed, 1 deletion(-)
++
++diff --git a/BUILD.bazel b/BUILD.bazel
++index ec7d05a..be0beba 100644
++--- a/BUILD.bazel
+++++ b/BUILD.bazel
++@@ -6475,7 +6475,6 @@ config_setting(
++ config_setting(
++ name = "android_x86",
++ values = {
++- "crosstool_top": "//external:android/crosstool",
++ "cpu": "x86",
++ },
++ )
++--
++2.18.2
++
+diff --git a/third_party/aws/BUILD.bazel b/third_party/aws/BUILD.bazel
+index e1058edaba4..a86591997f3 100644
+--- a/third_party/aws/BUILD.bazel
++++ b/third_party/aws/BUILD.bazel
+@@ -33,6 +33,12 @@ cc_library(
+ "@org_tensorflow//tensorflow:yocto_armeabi": glob([
+ "aws-cpp-sdk-core/source/platform/linux-shared/*.cpp",
+ ]),
++ "@org_tensorflow//tensorflow:android_x86": glob([
++ "aws-cpp-sdk-core/source/platform/linux-shared/*.cpp",
++ ]),
++ "@org_tensorflow//tensorflow:arm": glob([
++ "aws-cpp-sdk-core/source/platform/linux-shared/*.cpp",
++ ]),
+ "//conditions:default": [],
+ }) + select({
+ "//conditions:default": glob([
+diff --git a/third_party/aws/aws-c-common.bazel b/third_party/aws/aws-c-common.bazel
+index ab9406805c2..d1078b0d701 100644
+--- a/third_party/aws/aws-c-common.bazel
++++ b/third_party/aws/aws-c-common.bazel
+@@ -12,6 +12,15 @@ load("@org_tensorflow//third_party:common.bzl", "template_rule")
+ cc_library(
+ name = "aws-c-common",
+ srcs = select({
++ "@org_tensorflow//tensorflow:arm": glob([
++ "source/posix/*.c",
++ ]),
++ "@org_tensorflow//tensorflow:android_x86": glob([
++ "source/posix/*.c",
++ ]),
++ "@org_tensorflow//tensorflow:yocto_armeabi": glob([
++ "source/posix/*.c",
++ ]),
+ "@org_tensorflow//tensorflow:linux_aarch64": glob([
+ "source/posix/*.c",
+ ]),
+diff --git a/third_party/cpuinfo/BUILD.bazel b/third_party/cpuinfo/BUILD.bazel
+index 9b007cc0daa..1fca02facfc 100644
+--- a/third_party/cpuinfo/BUILD.bazel
++++ b/third_party/cpuinfo/BUILD.bazel
+@@ -248,7 +248,6 @@ config_setting(
+ config_setting(
+ name = "android_x86",
+ values = {
+- "crosstool_top": "//external:android/crosstool",
+ "cpu": "x86",
+ },
+ visibility = ["//visibility:public"],
+--
+2.18.2
+
diff --git a/recipes-framework/tensorflow/files/BUILD b/recipes-framework/tensorflow/files/BUILD
deleted file mode 100644
index fd1f99a..0000000
--- a/recipes-framework/tensorflow/files/BUILD
+++ /dev/null
@@ -1,56 +0,0 @@
-package(default_visibility = ["//visibility:public"])
-
-cc_toolchain_suite(
- name = "toolchain",
- toolchains = {
- "armeabi|compiler": ":cc-compiler-armeabi",
- "local|compiler": ":cc-compiler-local",
- "armeabi": ":cc-compiler-armeabi",
- "k8": ":cc-compiler-local",
- "piii": ":cc-compiler-local",
- "arm": ":cc-compiler-local",
- "s390x": ":cc-compiler-local",
- },
-)
-
-filegroup(
- name = "empty",
- srcs = [],
-)
-
-filegroup(
- name = "arm_linux_all_files",
- srcs = [
- "@yocto_compiler//:compiler_pieces",
- ],
-)
-
-cc_toolchain(
- name = "cc-compiler-local",
- all_files = ":empty",
- compiler_files = ":empty",
- cpu = "local",
- dwp_files = ":empty",
- dynamic_runtime_libs = [":empty"],
- linker_files = ":empty",
- objcopy_files = ":empty",
- static_runtime_libs = [":empty"],
- strip_files = ":empty",
- supports_param_files = 1,
- toolchain_identifier = "local_linux",
-)
-
-cc_toolchain(
- name = "cc-compiler-armeabi",
- all_files = ":arm_linux_all_files",
- compiler_files = ":arm_linux_all_files",
- cpu = "armeabi",
- dwp_files = ":empty",
- dynamic_runtime_libs = [":empty"],
- linker_files = ":arm_linux_all_files",
- objcopy_files = "arm_linux_all_files",
- static_runtime_libs = [":empty"],
- strip_files = "arm_linux_all_files",
- supports_param_files = 1,
- toolchain_identifier = "yocto-linux-gnueabihf",
-)
diff --git a/recipes-framework/tensorflow/files/BUILD.in b/recipes-framework/tensorflow/files/BUILD.in
new file mode 100644
index 0000000..2e230a6
--- /dev/null
+++ b/recipes-framework/tensorflow/files/BUILD.in
@@ -0,0 +1,40 @@
+package(default_visibility = ["//visibility:public"])
+
+load(":cc_config.bzl", "cc_toolchain_config")
+
+cc_toolchain_suite(
+ name = "toolchain",
+ toolchains = {
+ "%%CPU%%": ":cc-compiler-yocto",
+ },
+)
+
+filegroup(
+ name = "empty",
+ srcs = [],
+)
+
+filegroup(
+ name = "yocto_linux_all_files",
+ srcs = [
+ "@yocto_compiler//:compiler_pieces",
+ ],
+)
+
+cc_toolchain_config(
+ name = "yocto_config",
+ cpu = "%%CPU%%",
+)
+
+cc_toolchain(
+ name = "cc-compiler-yocto",
+ all_files = ":yocto_linux_all_files",
+ compiler_files = ":yocto_linux_all_files",
+ dwp_files = ":empty",
+ linker_files = ":yocto_linux_all_files",
+ objcopy_files = "yocto_linux_all_files",
+ strip_files = "yocto_linux_all_files",
+ supports_param_files = 1,
+ toolchain_config = ":yocto_config",
+ toolchain_identifier = "yocto-linux-toolchain",
+)
diff --git a/recipes-framework/tensorflow/files/cc_config.bzl.tpl b/recipes-framework/tensorflow/files/cc_config.bzl.tpl
new file mode 100644
index 0000000..7ab7ea8
--- /dev/null
+++ b/recipes-framework/tensorflow/files/cc_config.bzl.tpl
@@ -0,0 +1,411 @@
+load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
+ "action_config",
+ "artifact_name_pattern",
+ "env_entry",
+ "env_set",
+ "feature",
+ "feature_set",
+ "flag_group",
+ "flag_set",
+ "make_variable",
+ "tool",
+ "tool_path",
+ "variable_with_value",
+ "with_feature_set",
+)
+load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
+
+def _impl(ctx):
+ toolchain_identifier = "yocto-linux-toolchain"
+ host_system_name = ctx.attr.cpu
+ target_system_name = ctx.attr.cpu
+ target_cpu = ctx.attr.cpu
+ target_libc = ctx.attr.cpu
+ abi_version = ctx.attr.cpu
+ abi_libc_version = ctx.attr.cpu
+
+ compiler = "compiler"
+
+ cc_target_os = None
+
+ builtin_sysroot = None
+
+ all_compile_actions = [
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.assemble,
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.clif_match,
+ ACTION_NAMES.lto_backend,
+ ]
+
+ all_cpp_compile_actions = [
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.clif_match,
+ ]
+
+ preprocessor_compile_actions = [
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.clif_match,
+ ]
+
+ codegen_compile_actions = [
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.assemble,
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.lto_backend,
+ ]
+
+ all_link_actions = [
+ ACTION_NAMES.cpp_link_executable,
+ ACTION_NAMES.cpp_link_dynamic_library,
+ ACTION_NAMES.cpp_link_nodeps_dynamic_library,
+ ]
+
+ objcopy_embed_data_action = action_config(
+ action_name = "objcopy_embed_data",
+ enabled = True,
+ tools = [tool(path = "/usr/bin/objcopy")],
+ )
+
+ action_configs = []
+
+ opt_feature = feature(name = "opt")
+
+ dbg_feature = feature(name = "dbg")
+
+ sysroot_feature = feature(
+ name = "sysroot",
+ enabled = True,
+ flag_sets = [
+ flag_set(
+ actions = [
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.lto_backend,
+ ACTION_NAMES.clif_match,
+ ACTION_NAMES.cpp_link_executable,
+ ACTION_NAMES.cpp_link_dynamic_library,
+ ACTION_NAMES.cpp_link_nodeps_dynamic_library,
+ ],
+ flag_groups = [
+ flag_group(
+ flags = ["--sysroot=%{YOCTO_COMPILER_PATH}%/recipe-sysroot"],
+ expand_if_available = "sysroot",
+ ),
+ ],
+ ),
+ ],
+ )
+
+ unfiltered_compile_flags_feature = feature(
+ name = "unfiltered_compile_flags",
+ enabled = True,
+ flag_sets = [
+ flag_set(
+ actions = [
+ ACTION_NAMES.assemble,
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.lto_backend,
+ ACTION_NAMES.clif_match,
+ ],
+ flag_groups = [
+ flag_group(
+ flags = [
+ "-Wno-builtin-macro-redefined",
+ "-D__DATE__=\"redacted\"",
+ "-D__TIMESTAMP__=\"redacted\"",
+ "-D__TIME__=\"redacted\"",
+ "-no-canonical-prefixes",
+ "-fno-canonical-system-headers",
+ ],
+ ),
+ ],
+ ),
+ ],
+ )
+
+ objcopy_embed_flags_feature = feature(
+ name = "objcopy_embed_flags",
+ enabled = True,
+ flag_sets = [
+ flag_set(
+ actions = ["objcopy_embed_data"],
+ flag_groups = [flag_group(flags = ["-I", "binary"])],
+ ),
+ ],
+ )
+
+ default_compile_flags_feature = feature(
+ name = "default_compile_flags",
+ enabled = True,
+ flag_sets = [
+ flag_set(
+ actions = [
+ ACTION_NAMES.assemble,
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.lto_backend,
+ ACTION_NAMES.clif_match,
+ ],
+ flag_groups = [
+ flag_group(
+ flags = [
+ "-fstack-protector",
+ ],
+ ),
+ ],
+ ),
+ flag_set(
+ actions = [
+ ACTION_NAMES.assemble,
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.lto_backend,
+ ACTION_NAMES.clif_match,
+ ],
+ flag_groups = [flag_group(flags = ["-g"])],
+ with_features = [with_feature_set(features = ["dbg"])],
+ ),
+ flag_set(
+ actions = [
+ ACTION_NAMES.assemble,
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.lto_backend,
+ ACTION_NAMES.clif_match,
+ ],
+ flag_groups = [
+ flag_group(
+ flags = [
+ "-g0",
+ "-O2",
+ "-DNDEBUG",
+ "-ffunction-sections",
+ "-fdata-sections",
+ ],
+ ),
+ ],
+ with_features = [with_feature_set(features = ["opt"])],
+ ),
+ flag_set(
+ actions = [
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.lto_backend,
+ ACTION_NAMES.clif_match,
+ ],
+ flag_groups = [
+ flag_group(
+ flags = [
+ # Include target pyconfig.h
+ "-D_PYTHON_INCLUDE_TARGET",
+ ],
+ ),
+ ],
+ ),
+ ],
+ )
+
+ default_link_flags_feature = feature(
+ name = "default_link_flags",
+ enabled = True,
+ flag_sets = [
+ flag_set(
+ actions = all_link_actions,
+ flag_groups = [
+ flag_group(
+ flags = [
+ "-lstdc++",
+ "-Wl,-z,relro,-z,now",
+ "-no-canonical-prefixes",
+ "-pass-exit-codes",
+ "-Wl,--build-id=md5",
+ "-Wl,--hash-style=gnu",
+ ],
+ ),
+ ],
+ ),
+ flag_set(
+ actions = all_link_actions,
+ flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
+ with_features = [with_feature_set(features = ["opt"])],
+ ),
+ ],
+ )
+
+ supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)
+
+ supports_pic_feature = feature(name = "supports_pic", enabled = True)
+
+ user_compile_flags_feature = feature(
+ name = "user_compile_flags",
+ enabled = True,
+ flag_sets = [
+ flag_set(
+ actions = [
+ ACTION_NAMES.assemble,
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.lto_backend,
+ ACTION_NAMES.clif_match,
+ ],
+ flag_groups = [
+ flag_group(
+ flags = ["%{user_compile_flags}"],
+ iterate_over = "user_compile_flags",
+ expand_if_available = "user_compile_flags",
+ ),
+ ],
+ ),
+ ],
+ )
+
+ features = [
+ default_compile_flags_feature,
+ default_link_flags_feature,
+ supports_dynamic_linker_feature,
+ supports_pic_feature,
+ opt_feature,
+ dbg_feature,
+ user_compile_flags_feature,
+ sysroot_feature,
+ unfiltered_compile_flags_feature,
+ ]
+
+ cxx_builtin_include_directories = [
+ "%{YOCTO_COMPILER_PATH}%",
+ ]
+
+ artifact_name_patterns = []
+
+ make_variables = []
+
+ tool_paths = [
+ tool_path(
+ name = "ar",
+ path = "%{YOCTO_COMPILER_PATH}%/recipe-sysroot-native/usr/bin/%{CT_NAME}%/%{CT_NAME}%-ar",
+ ),
+ tool_path(name = "compat-ld", path = "/bin/false"),
+ tool_path(
+ name = "cpp",
+ path = "%{YOCTO_COMPILER_PATH}%/recipe-sysroot-native/usr/bin/%{CT_NAME}%/%{CT_NAME}%-cpp",
+ ),
+ tool_path(
+ name = "dwp",
+ path = "%{YOCTO_COMPILER_PATH}%/recipe-sysroot-native/usr/bin/%{CT_NAME}%/%{CT_NAME}%-dwp",
+ ),
+ tool_path(
+ name = "gcc",
+ path = "%{YOCTO_COMPILER_PATH}%/recipe-sysroot-native/usr/bin/%{CT_NAME}%/%{CT_NAME}%-gcc",
+ ),
+ tool_path(
+ name = "gcov",
+ path = "%{YOCTO_COMPILER_PATH}%/recipe-sysroot-native/usr/bin/%{CT_NAME}%/%{CT_NAME}%-gcov",
+ ),
+ tool_path(
+ name = "ld",
+ path = "%{YOCTO_COMPILER_PATH}%/recipe-sysroot-native/usr/bin/%{CT_NAME}%/%{CT_NAME}%-ld",
+ ),
+ tool_path(
+ name = "nm",
+ path = "%{YOCTO_COMPILER_PATH}%/recipe-sysroot-native/usr/bin/%{CT_NAME}%/%{CT_NAME}%-nm",
+ ),
+ tool_path(
+ name = "objcopy",
+ path = "%{YOCTO_COMPILER_PATH}%/recipe-sysroot-native/usr/bin/%{CT_NAME}%/%{CT_NAME}%-objcopy",
+ ),
+ tool_path(
+ name = "objdump",
+ path = "%{YOCTO_COMPILER_PATH}%/recipe-sysroot-native/usr/bin/%{CT_NAME}%/%{CT_NAME}%-objdump",
+ ),
+ tool_path(
+ name = "strip",
+ path = "%{YOCTO_COMPILER_PATH}%/recipe-sysroot-native/usr/bin/%{CT_NAME}%/%{CT_NAME}%-strip",
+ ),
+ ]
+
+ out = ctx.actions.declare_file(ctx.label.name)
+ ctx.actions.write(out, "Fake executable")
+ return [
+ cc_common.create_cc_toolchain_config_info(
+ ctx = ctx,
+ features = features,
+ action_configs = action_configs,
+ artifact_name_patterns = artifact_name_patterns,
+ cxx_builtin_include_directories = cxx_builtin_include_directories,
+ toolchain_identifier = toolchain_identifier,
+ host_system_name = host_system_name,
+ target_system_name = target_system_name,
+ target_cpu = target_cpu,
+ target_libc = target_libc,
+ compiler = compiler,
+ abi_version = abi_version,
+ abi_libc_version = abi_libc_version,
+ tool_paths = tool_paths,
+ make_variables = make_variables,
+ builtin_sysroot = builtin_sysroot,
+ cc_target_os = cc_target_os
+ ),
+ DefaultInfo(
+ executable = out,
+ ),
+ ]
+cc_toolchain_config = rule(
+ implementation = _impl,
+ attrs = {
+ "cpu": attr.string(mandatory=True),
+ },
+ provides = [CcToolchainConfigInfo],
+ executable = True,
+)
diff --git a/recipes-framework/tensorflow/files/yocto_compiler_configure.bzl b/recipes-framework/tensorflow/files/yocto_compiler_configure.bzl
index 19c7cd1..403df06 100644
--- a/recipes-framework/tensorflow/files/yocto_compiler_configure.bzl
+++ b/recipes-framework/tensorflow/files/yocto_compiler_configure.bzl
@@ -9,11 +9,31 @@ def _tpl(repository_ctx, tpl, substitutions={}, out=None):
Label("//third_party/toolchains/yocto:%s.tpl" % tpl),
substitutions)

-
def _yocto_compiler_configure_impl(repository_ctx):
- _tpl(repository_ctx, "CROSSTOOL")
- repository_ctx.symlink(repository_ctx.attr.build_file, "BUILD")
+ # We need to find a cross-compilation include directory for Python, so look
+ # for an environment variable. Be warned, this crosstool template is only
+ # regenerated on the first run of Bazel, so if you change the variable after
+ # it may not be reflected in later builds. Doing a shutdown and clean of Bazel
+ # doesn't fix this, you'll need to delete the generated file at something like:
+ # external/local_config_arm_compiler/CROSSTOOL in your Bazel install.
+ if "CROSSTOOL_PYTHON_INCLUDE_PATH" in repository_ctx.os.environ:
+ python_include_path = repository_ctx.os.environ["CROSSTOOL_PYTHON_INCLUDE_PATH"]
+ else:
+ python_include_path = "/buildarea/raid5/hjia/wrlinux-20/build_master-wr_ts_intel_2020120722/build/tmp-glibc/work/corei7-64-wrs-linux/tensorflow/2.4.0-r0/recipe-sysroot/usr/include/python3.9"
+
+ if "CT_NAME" in repository_ctx.os.environ:
+ cross_tool_name = repository_ctx.os.environ["CT_NAME"]
+ else:
+ cross_tool_name = "x86_64-wrs-linux"

+ _tpl(repository_ctx, "cc_config.bzl", {
+ "%{YOCTO_COMPILER_PATH}%": str(repository_ctx.path(
+ repository_ctx.attr.remote_config_repo,
+ )),
+ "%{PYTHON_INCLUDE_PATH}%": python_include_path,
+ "%{CT_NAME}%": cross_tool_name,
+ })
+ repository_ctx.symlink(repository_ctx.attr.build_file, "BUILD")

yocto_compiler_configure = repository_rule(
implementation = _yocto_compiler_configure_impl,
diff --git a/recipes-framework/tensorflow/tensorflow-estimator_1.13.bb b/recipes-framework/tensorflow/tensorflow-estimator_2.4.bb
similarity index 100%
rename from recipes-framework/tensorflow/tensorflow-estimator_1.13.bb
rename to recipes-framework/tensorflow/tensorflow-estimator_2.4.bb
diff --git a/recipes-framework/tensorflow/tensorflow_2.4.0.bb b/recipes-framework/tensorflow/tensorflow_2.4.0.bb
index aeb1a80..ba441a7 100644
--- a/recipes-framework/tensorflow/tensorflow_2.4.0.bb
+++ b/recipes-framework/tensorflow/tensorflow_2.4.0.bb
@@ -6,9 +6,11 @@ SRC_URI += " \
file://0001-label_image-tweak-default-model-location.patch \
file://0001-label_image.lite-tweak-default-model-location.patch \
file://0001-CheckFeatureOrDie-use-warning-to-avoid-die.patch \
- file://BUILD \
+ file://0001-support-32-bit-x64-and-arm-for-yocto.patch \
+ file://BUILD.in \
file://BUILD.yocto_compiler \
file://CROSSTOOL.tpl \
+ file://cc_config.bzl.tpl \
file://yocto_compiler_configure.bzl \
"

@@ -33,6 +35,11 @@ RDEPENDS_${PN} += " \
python3-astunparse \
python3-gast \
python3-termcolor \
+ python3-wrapt \
+ python3-opt-einsum \
+ python3-google-pasta \
+ python3-typing-extensions \
+ flatbuffers-python3 \
tensorboard \
tensorflow-estimator \
"
@@ -40,8 +47,9 @@ RDEPENDS_${PN} += " \
export PYTHON_BIN_PATH="${PYTHON}"
export PYTHON_LIB_PATH="${STAGING_LIBDIR_NATIVE}/${PYTHON_DIR}/site-packages"

+export CROSSTOOL_PYTHON_INCLUDE_PATH="${STAGING_INCDIR}/python${PYTHON_BASEVERSION}${PYTHON_ABI}"
+
do_configure_append () {
- CROSSTOOL_PYTHON_INCLUDE_PATH="${STAGING_INCDIR}/python${PYTHON_BASEVERSION}${PYTHON_ABI}"
if [ ! -e ${CROSSTOOL_PYTHON_INCLUDE_PATH}/pyconfig-target.h ];then
mv ${CROSSTOOL_PYTHON_INCLUDE_PATH}/pyconfig.h ${CROSSTOOL_PYTHON_INCLUDE_PATH}/pyconfig-target.h
fi
@@ -61,8 +69,10 @@ do_configure_append () {
ENDOF

mkdir -p ${S}/third_party/toolchains/yocto/
- install -m 644 ${WORKDIR}/BUILD ${S}/third_party/toolchains/yocto/
+ sed "s#%%CPU%%#${BAZEL_TARGET_CPU}#g" ${WORKDIR}/BUILD.in > ${S}/third_party/toolchains/yocto/BUILD
+ chmod 644 ${S}/third_party/toolchains/yocto/BUILD
install -m 644 ${WORKDIR}/CROSSTOOL.tpl ${S}/third_party/toolchains/yocto/
+ install -m 644 ${WORKDIR}/cc_config.bzl.tpl ${S}/third_party/toolchains/yocto/
install -m 644 ${WORKDIR}/yocto_compiler_configure.bzl ${S}/third_party/toolchains/yocto/
install -m 644 ${WORKDIR}/BUILD.yocto_compiler ${S}

@@ -82,14 +92,16 @@ ENDOF
TF_ARGS_EXTRA ??= ""
TF_TARGET_EXTRA ??= ""
do_compile () {
+ export CT_NAME=$(echo ${HOST_PREFIX} | rev | cut -c 2- | rev)
unset CC
${BAZEL} build \
${TF_ARGS_EXTRA} \
-c opt \
- --cpu=armeabi \
+ --cpu=${BAZEL_TARGET_CPU} \
--subcommands --explain=${T}/explain.log \
--verbose_explanations --verbose_failures \
--crosstool_top=@local_config_yocto_compiler//:toolchain \
+ --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
--verbose_failures \
--copt -DTF_LITE_DISABLE_X86_NEON \
//tensorflow:libtensorflow.so \
@@ -159,6 +171,7 @@ do_install() {

FILES_${PN}-dev = ""
INSANE_SKIP_${PN} += "dev-so \
+ already-stripped \
"
FILES_${PN} += "${libdir}/* ${datadir}/*"

--
2.21.0


[meta-tensorflow][PATCH 10/25] bazel-native/bazel.bbclass: replace deprecated --local_resources

hongxu
 

1. Use --local_ram_resources and --local_cpu_resources to replace
deprecated --local_resources

2. Add options to bazel-native build

|ERROR: --local_resources is deprecated. Please use --local_ram_resources and/or --local_cpu_resources

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
classes/bazel.bbclass | 2 +-
recipes-devtools/bazel/bazel-native_3.1.0.bb | 12 +++++++++++-
2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/classes/bazel.bbclass b/classes/bazel.bbclass
index b4c2a7f..2a64156 100644
--- a/classes/bazel.bbclass
+++ b/classes/bazel.bbclass
@@ -75,7 +75,7 @@ bazel_do_configure () {
cat > "${S}/bazelrc" <<-EOF
build --verbose_failures
build --spawn_strategy=standalone --genrule_strategy=standalone
-build --jobs=${BAZEL_JOBS} --local_resources=4096,${BAZEL_JOBS},1.0
+buuld --jobs=${BAZEL_JOBS} --local_ram_resources=4096 --local_cpu_resources=${BAZEL_JOBS}
test --verbose_failures --verbose_test_summary
test --spawn_strategy=standalone --genrule_strategy=standalone

diff --git a/recipes-devtools/bazel/bazel-native_3.1.0.bb b/recipes-devtools/bazel/bazel-native_3.1.0.bb
index 0555f2f..1336da8 100644
--- a/recipes-devtools/bazel/bazel-native_3.1.0.bb
+++ b/recipes-devtools/bazel/bazel-native_3.1.0.bb
@@ -26,11 +26,21 @@ DEPENDS = "coreutils-native \
S="${WORKDIR}"

TS_DL_DIR ??= "${DL_DIR}"
+
+BAZEL_JOBS ??= "4"
+EXTRA_BAZEL_ARGS = " \
+ --host_javabase=@local_jdk//:jdk \
+ --python_path=python3 \
+ --jobs=${BAZEL_JOBS} \
+ --local_ram_resources=4096 \
+ --local_cpu_resources=${BAZEL_JOBS} \
+"
+
do_compile () {
export JAVA_HOME="${STAGING_LIBDIR_NATIVE}/jvm/openjdk-8-native"
TMPDIR="${TOPDIR}/bazel" \
VERBOSE=yes \
- EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk --python_path=python3" \
+ EXTRA_BAZEL_ARGS="${EXTRA_BAZEL_ARGS}" \
./compile.sh
}

--
2.21.0


[meta-tensorflow][PATCH 9/25] bazel-native/bazel.bbclass: use default Bazel toolchain to build Yocto native tools

hongxu
 

While using the default Bazel C++ toolchain to build Yocto native tools
(bazel build --host_crosstool_top=@bazel_tools//tools/cpp:toolchain),
it failed with `bazel references a path outside of the execution root',

Add Yocto native sysroot dir (YOCTO_NATIVE_SYSROOT) to
builtin_include_directories could fix the issue

If not set YOCTO_NATIVE_SYSROOT, use NOT_SET_YOCTO_NATIVE_SYSROOT
to replace as a warning

Set YOCTO_NATIVE_SYSROOT in bazel.bbclass

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
classes/bazel.bbclass | 2 +
recipes-devtools/bazel/bazel-native_3.1.0.bb | 1 +
...-sysroot-dir-to-the-default-Bazel-to.patch | 39 +++++++++++++++++++
3 files changed, 42 insertions(+)
create mode 100644 recipes-devtools/bazel/files/0001-add-Yocto-native-sysroot-dir-to-the-default-Bazel-to.patch

diff --git a/classes/bazel.bbclass b/classes/bazel.bbclass
index 65d2932..b4c2a7f 100644
--- a/classes/bazel.bbclass
+++ b/classes/bazel.bbclass
@@ -109,3 +109,5 @@ EXPORT_FUNCTIONS do_configure
CCACHE_DISABLE = "1"

inherit unsupportarch
+
+export YOCTO_NATIVE_SYSROOT="${BAZEL_OUTPUTBASE_DIR}/external/yocto_compiler/recipe-sysroot-native"
diff --git a/recipes-devtools/bazel/bazel-native_3.1.0.bb b/recipes-devtools/bazel/bazel-native_3.1.0.bb
index f3efde1..0555f2f 100644
--- a/recipes-devtools/bazel/bazel-native_3.1.0.bb
+++ b/recipes-devtools/bazel/bazel-native_3.1.0.bb
@@ -9,6 +9,7 @@ SRC_URI = "https://github.com/bazelbuild/bazel/releases/download/${PV}/bazel-${P
file://0001-HttpDownloader-save-download-tarball-to-distdir.patch \
file://0001-fix-unzip-command-not-found.patch \
file://0001-python3.patch \
+ file://0001-add-Yocto-native-sysroot-dir-to-the-default-Bazel-to.patch \
"

inherit native python3native
diff --git a/recipes-devtools/bazel/files/0001-add-Yocto-native-sysroot-dir-to-the-default-Bazel-to.patch b/recipes-devtools/bazel/files/0001-add-Yocto-native-sysroot-dir-to-the-default-Bazel-to.patch
new file mode 100644
index 0000000..b08c65a
--- /dev/null
+++ b/recipes-devtools/bazel/files/0001-add-Yocto-native-sysroot-dir-to-the-default-Bazel-to.patch
@@ -0,0 +1,39 @@
+From 707ba08068432262b3d02b29804c00afe7133ff6 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 10 Dec 2020 16:12:51 +0800
+Subject: [PATCH] add Yocto native sysroot dir to the default Bazel toolchain
+
+While using the default Bazel C++ toolchain to build Yocto native tools
+(bazel build --host_crosstool_top=@bazel_tools//tools/cpp:toolchain),
+it failed `bazel references a path outside of the execution root',
+
+Add Yocto native sysroot dir (YOCTO_NATIVE_SYSROOT) to
+builtin_include_directories could fix the issue
+
+If not set YOCTO_NATIVE_SYSROOT, use NOT_SET_YOCTO_NATIVE_SYSROOT
+to replace as a warning
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ tools/cpp/unix_cc_configure.bzl | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/tools/cpp/unix_cc_configure.bzl b/tools/cpp/unix_cc_configure.bzl
+index 84f5479..e17aa9d 100755
+--- a/tools/cpp/unix_cc_configure.bzl
++++ b/tools/cpp/unix_cc_configure.bzl
+@@ -424,6 +424,9 @@ def configure_unix_toolchain(repository_ctx, cpu_value, overriden_tools):
+ ),
+ )
+
++ # Customize for Yocto
++ builtin_include_directories.append(get_env_var(repository_ctx,"YOCTO_NATIVE_SYSROOT", "NOT_SET_YOCTO_NATIVE_SYSROOT"))
++
+ write_builtin_include_directory_paths(repository_ctx, cc, builtin_include_directories)
+ repository_ctx.template(
+ "BUILD",
+--
+2.18.2
+
--
2.21.0


[meta-tensorflow][PATCH 8/25] tensorflow-estimator: 1.13 -> 2.4

hongxu
 

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
.../0001-customize-for-yocto.patch | 28 +++++++++++++++++++
.../tensorflow/tensorflow-estimator_1.13.bb | 12 ++++++--
2 files changed, 37 insertions(+), 3 deletions(-)
create mode 100644 recipes-framework/tensorflow/tensorflow-estimator/0001-customize-for-yocto.patch

diff --git a/recipes-framework/tensorflow/tensorflow-estimator/0001-customize-for-yocto.patch b/recipes-framework/tensorflow/tensorflow-estimator/0001-customize-for-yocto.patch
new file mode 100644
index 0000000..e9b66d5
--- /dev/null
+++ b/recipes-framework/tensorflow/tensorflow-estimator/0001-customize-for-yocto.patch
@@ -0,0 +1,28 @@
+From a1bcf09a43fc44ad5e04c441ee45cc23d16cf7d2 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 9 Dec 2020 17:59:01 +0800
+Subject: [PATCH] customize for yocto
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ tensorflow_estimator/tools/pip_package/build_pip_package.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tensorflow_estimator/tools/pip_package/build_pip_package.sh b/tensorflow_estimator/tools/pip_package/build_pip_package.sh
+index d4953a6..e08cd8a 100755
+--- a/tensorflow_estimator/tools/pip_package/build_pip_package.sh
++++ b/tensorflow_estimator/tools/pip_package/build_pip_package.sh
+@@ -38,7 +38,7 @@ function prepare_src() {
+
+ # Verifies all expected files are in pip.
+ # Creates init files in all directory in pip.
+- python tensorflow_estimator/tools/pip_package/create_pip_helper.py --pip-root "${TMPDIR}/tensorflow_estimator/" --bazel-root "./tensorflow_estimator"
++ nativepython3 tensorflow_estimator/tools/pip_package/create_pip_helper.py --pip-root "${TMPDIR}/tensorflow_estimator/" --bazel-root "./tensorflow_estimator"
+ }
+
+ function build_wheel() {
+--
+2.18.2
+
diff --git a/recipes-framework/tensorflow/tensorflow-estimator_1.13.bb b/recipes-framework/tensorflow/tensorflow-estimator_1.13.bb
index f3a5098..5b2fe5d 100644
--- a/recipes-framework/tensorflow/tensorflow-estimator_1.13.bb
+++ b/recipes-framework/tensorflow/tensorflow-estimator_1.13.bb
@@ -3,9 +3,10 @@ learning programming."
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=01e86893010a1b87e69a213faa753ebd"

-SRC_URI = "git://github.com/tensorflow/estimator.git;branch=r1.13 \
+SRC_URI = "git://github.com/tensorflow/estimator.git;branch=r2.4 \
+ file://0001-customize-for-yocto.patch \
"
-SRCREV = "340703eed78ba4854862f749ed94f91598826e79"
+SRCREV = "c3e7f2b5bbcc35185ef71797955a28cadce28f60"
S = "${WORKDIR}/git"

inherit python3native bazel
@@ -19,12 +20,18 @@ DEPENDS += " \
python3-astor-native \
python3-gast-native \
python3-termcolor-native \
+ python3-wrapt-native \
+ python3-opt-einsum-native \
+ python3-astunparse-native \
+ flatbuffers-native \
tensorflow-native \
"

do_compile () {
unset CC
export TMPDIR="${WORKDIR}"
+ export PYTHON_BIN_PATH="${PYTHON}"
+
${BAZEL} build \
--subcommands --explain=${T}/explain.log \
--verbose_explanations --verbose_failures \
@@ -32,7 +39,6 @@ do_compile () {
--python_path="${PYTHON}" \
//tensorflow_estimator/tools/pip_package:build_pip_package

- PYTHON_BIN_PATH="${PYTHON}" \
${S}/bazel-bin/tensorflow_estimator/tools/pip_package/build_pip_package \
${WORKDIR}/estimator_pip
}
--
2.21.0


[meta-tensorflow][PATCH 7/25] python3-astunparse: add 1.6.3

hongxu
 

It is required by tensorflow 2.4

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
recipes-devtools/python/python3-astunparse_1.6.3.bb | 12 ++++++++++++
1 file changed, 12 insertions(+)
create mode 100644 recipes-devtools/python/python3-astunparse_1.6.3.bb

diff --git a/recipes-devtools/python/python3-astunparse_1.6.3.bb b/recipes-devtools/python/python3-astunparse_1.6.3.bb
new file mode 100644
index 0000000..c8977b8
--- /dev/null
+++ b/recipes-devtools/python/python3-astunparse_1.6.3.bb
@@ -0,0 +1,12 @@
+SUMMARY = "An AST unparser for Python"
+HOMEPAGE = "https://github.com/simonpercivall/astunparse"
+SECTION = "devel/python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7a7c771110c28a37480b73d07ad6d2a1"
+
+SRC_URI[md5sum] = "2cea4d8e49beba7684bac890e73d6a40"
+SRC_URI[sha256sum] = "5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
--
2.21.0


[meta-tensorflow][PATCH 6/25] python3-google-pasta: add 0.2.0

hongxu
 

It is required by tensorflow 2.4

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
.../python/python3-google-pasta_0.2.0.bb | 12 ++++++++++++
1 file changed, 12 insertions(+)
create mode 100644 recipes-devtools/python/python3-google-pasta_0.2.0.bb

diff --git a/recipes-devtools/python/python3-google-pasta_0.2.0.bb b/recipes-devtools/python/python3-google-pasta_0.2.0.bb
new file mode 100644
index 0000000..50a363c
--- /dev/null
+++ b/recipes-devtools/python/python3-google-pasta_0.2.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "The AST-based Python refactoring library"
+HOMEPAGE = "https://github.com/google/pasta"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=a10102394a800f3fa4a3df0934d57bb1"
+
+SRC_URI[md5sum] = "7c218a4a0d84303b9319352040fbfce6"
+SRC_URI[sha256sum] = "c9f2c8dfc8f96d0d5808299920721be30c9eec37f2389f28904f454565c8a16e"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
--
2.21.0


[meta-tensorflow][PATCH 5/25] python3-opt-einsum: add 3.3.0

hongxu
 

It is required by tensorflow 2.4

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
.../python/python3-opt-einsum_3.3.0.bb | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
create mode 100644 recipes-devtools/python/python3-opt-einsum_3.3.0.bb

diff --git a/recipes-devtools/python/python3-opt-einsum_3.3.0.bb b/recipes-devtools/python/python3-opt-einsum_3.3.0.bb
new file mode 100644
index 0000000..16f3a6d
--- /dev/null
+++ b/recipes-devtools/python/python3-opt-einsum_3.3.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "A tensor contraction order optimizer"
+HOMEPAGE = "https://github.com/dgasmith/opt_einsum"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5ab423c88cf3e69553decf93419f53ac"
+
+SRC_URI[md5sum] = "acf0a3997aab84b4e9a854296cc34971"
+SRC_URI[sha256sum] = "59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549"
+
+inherit pypi setuptools3
+
+SRCNAME = "opt_einsum"
+PYPI_SRC_URI = "https://files.pythonhosted.org/packages/source/o/${PYPI_PACKAGE}/${SRCNAME}-${PV}.tar.gz"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+BBCLASSEXTEND = "native"
--
2.21.0

2141 - 2160 of 53906