4 ms·
> Once you learn how to use it (which doesn’t take long) Bazel is pretty darn nice. I've spent a few hundred hours integrating bits of CMake build scripts in t
by krona 9y ago
> Once you learn how to use it (which doesn’t take long) Bazel is pretty darn nice.
I've spent a few hundred hours integrating bits of CMake build scripts in to various Bazel builds.
If you're doing something which is explicitly catered for by Bazel itself then it works well, so long as you avoid the bugs.
Otherwise, you'll have to confront the hermetic build abstractions which prevent otherwise simple operations. Bazel toolchain files are just as bad as CMake, if not worse.
I'll give Bazel another try in a few years. For now, I still prefer CMake+Ninja, worts and all.
- 0xbear 9y agoHermetic is good though. Hermetic means reproducible.
- krona 9y agoUse Docker?
- 0xbear 9y agoBazel is on its way to be more like Google’s internal implementation: distributed builds, object file cache, distributed tests. That means your C++ build and test runs will take barely any time at all, same as they do at Google. That, in turn, enables the kind of velocity unachievable through other means.
- dekhn 9y agoI'm sorry but, "bwahahahha". C++ build and test times at Google are astronomical. It's one of the reasons go exists: they built it to compile and link faster.
- 0xbear 9y agoIf a minute to build and link half a million lines of C++ is “astronomical”, then sure. Try to build that on your local box, then get back to me. Go exists solely because Rob Pike had nothing better to do, and a lot of googlers hate Java.
- dekhn 9y agoYeah, I actually build locally. It takes a while up front (about half an hour) to build Hello World but incrementals are fast.
- candiodari 9y agoI seem to find many sources that Googlers spend heaps of time waiting for test runs. Apparently they're required for about everything you do with code at Google and are the but of dozens of jokes. All of which makes me think that maybe Google's internal building of code isn't that fast. Or perhaps it's fast, but only in relative terms (as in you're still waiting a few minutes for hello world, but huge programs build "fast", as in a few dozen minutes) I did test it on hello world, and euhm ... It's not fast. The first build of it is horribly slow (double digit minutes, wtf is it doing ?). Second build is "fast" which should be understood to still be double digit seconds. Running the same program in VSCode and just compiling it with the system-installed compiler is so fast you see the output before the VSCode has finished drawing the terminal window. Reading the site I also get the impression that Bazel's singular focus is correctness. They don't mind things being ridiculously slow if it increases the odds of being a correct build.
- paulddraper 9y agoBazel does use namespaces on Linux. It's how it can prevent you from accessing files you didn't declare as dependencies.
- pgeorgi 9y ago> Hermetic means reproducible. Hermetic is a subset of reproducible builds (bit-identical results). You can have a hermetic build and it calls getrandom() as a side-effect that ends up in the binary. The only thing that bazel prevents is that your build rules do something like that accidentally, without it being glaringly obvious (eg. accessing $RANDOM, $$, /dev/urandom, time, ... in a shell script)