name 'float' is not defined : Starklark / Bazel

Viewed 191

I'm trying to add floating-point operations to my .bzl file. According to the Bazel globals specification, the float() function should be defined, as per the Starlark specification. However, when I try to add float(), I get the following error,

ERROR: /home/username/code/project/foo.bzl:4:3: name 'float' is not defined

Is there anything else I have to import? I assume that since the float() keyword is defined in the global namespace I wouldn't need to import it. According to the starlark spec page on the Bazel site page, floats are not supported, but this directly conflicts with the float() specification on the global page.

update: running Bazel 3.7.1

2 Answers

A version of Bazel supporting floating point numbers has not been released yet. Presumably, the version after 4.0 will support them.

If you build Bazel from master it does already support float. I added Bazel from master to my system via the alias potato. Bazel 3.7.2 (and earlier) does not support the float type. I guess we won't see any float support in 3.7.x.

If you need floating point math for Bazel 3.7.2 and earlier you have to implement floating-point math using integer tricks. See for instance here.

Maybe you can achieve your goal without requiring float as shown here or by falling back to a "normal" Python script.

BTW: In the documentation, you can switch to the current used Bazel version - which will give you 404 for float and Bazel 3.7.2 and earlier. Only for master, there is documentation available.

Related