Coder Social home page Coder Social logo

Comments (1)

JakobDegen avatar JakobDegen commented on April 30, 2024

I wanted it to select the Linux execution platform automatically (since it's the only one with the "config//os/constraints:linux" constraint) but it tries to run it on the Windows platform, presumably because it is the first one declared

Correct.

How can I add constraints to the execution platform so that Buck2 automatically selects the correct execution platform for the selected target platform?

There is no general way to do that, but I'll explain how to solve your problem before I explain why.

You have a couple options and the best one depends on the particular situation. For this one, you have a :tests target that uses a bunch of cmd_args that assume things are running on Linux. In that case, it's appropriate to just set exec_compatible_with = ["config//os:linux"] on the target. This tells buck that that target can only be built on a Linux execution platform, and so it will not pick an execution platform that doesn't have the Linux constraint. This sort of case is somewhat common.

An equally common case is that someone has a build tool like a compiler that only supports running on a particular platform. This comes up particularly for things that don't support cross-compilation, where you end up with something like "I have to choose between three different compilers based on target platform, and all of them can only run on a specific execution platform." In that case, the preferred thing to do is to say target_compatible_with = ["config//os:windows"] on the compiler's target. Because the compiler's target should be an exec_dep of the target running the compiler (possibly via a toolchain), that target compatibility restriction will effect the execution platform of the target using the compiler.

Now getting back to why there's no way to express these restrictions on the platform definition: Note that in all of the above cases, the restrictions that we told buck about only apply to a specific target or a family of targets that all share some exec dep. This acknowledges the general principle that "which platform can this be built on" is a property that is local to a specific build step, and does not apply universally across a build, a target platform, or the repo. As a result, buck is in general happy to cross-compile only some parts of your build and not others. Coming from other build systems that might be surprising, but it is actually a good thing. It can help you make efficient use of resources by compiling things locally or using a cheaper remote execution platform (ie not mac). It also allows you to do things like have a single build which packages one component that must be built on Mac and one component that must be built on Windows.

from buck2.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.