Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build: Use workspace to group rust sub-projects #559

Merged
merged 1 commit into from
Aug 25, 2024
Merged

Commits on Aug 25, 2024

  1. build: Use workspace to group rust sub-projects

    meson build script was building each rust sub-project under rust/ and
    scheds/rust/ separately. This means that each rust project is built
    independently which leads to a couple problems - 1. There are a lot of
    shared dependencies but they have to be built over and over again for each
    proejct. 2. Concurrency management becomes sad - we either have to unleash
    multiple cargo builds at the same time possibly thrashing the system or
    build one by one.
    
    We've been trying to solve this from meson side in vain. Thankfully, in
    issue #546, @vimproved suggested using cargo workspace which makes the
    sub-projects share the same target directory and built together by the same
    cargo instance while still allowing each project to behave independently for
    development and publishing purposes.
    
    Make the following changes:
    
    - Create two cargo workspaces - one under rust/, the other under
      scheds/rust/. Each contains all rust projects underneath it.
    
    - Don't let meson descend into rust/. These are libraries used by the rust
      schedulers. No need to build them from meson. Cargo will build them as
      needed.
    
    - Change the rust_scheds build target to invoke `cargo build` in
      scheds/rust/ and let cargo do its thing.
    
    - Remove per-scheduler meson.build files and instead generate custom_targets
      in scheds/rust/meson.build which invokes `cargo build -p $SCHED`.
    
    - This changes rust binary directory. Update README and
      meson-scripts/install_rust_user_scheds accordingly.
    
    - Remove per-scheduler Cargo.lock as scheds/rust/Cargo.lock is shared by all
      schedulers now.
    
    - Unify .gitignore handling.
    
    The followings are build times on Ryzen 3975W:
    
    Before:
      ________________________________________________________
      Executed in  165.93 secs    fish           external
         usr time   40.55 mins    2.71 millis   40.55 mins
         sys time    3.34 mins   36.40 millis    3.34 mins
    
    After:
      ________________________________________________________
      Executed in   36.04 secs    fish           external
         usr time  336.42 secs    0.00 millis  336.42 secs
         sys time   36.65 secs   43.95 millis   36.61 secs
    
    Wallclock time is reduced 5x and CPU time 7x.
    htejun committed Aug 25, 2024
    Configuration menu
    Copy the full SHA
    43950c6 View commit details
    Browse the repository at this point in the history