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

C++ build modernization (overview) #418

Open
1 of 11 tasks
marktsuchida opened this issue Dec 14, 2023 · 1 comment
Open
1 of 11 tasks

C++ build modernization (overview) #418

marktsuchida opened this issue Dec 14, 2023 · 1 comment

Comments

@marktsuchida
Copy link
Member

marktsuchida commented Dec 14, 2023

This is intended as the parent issue for the C++ parts (i.e., parts in this repository) of the build system improvement plan previously described in micro-manager/micro-manager#1392.

The following plan (which will no doubt change over time) is slightly modified from the previous one. The end goals are largely the same. I'm also keeping the goal of avoiding moving source code until the last stages (with the exception of MMCoreJ).

Needless to say, comments, questions, and suggestions are welcome.


Phase 1: Finish severing mmCoreAndDevices.git from micro-manager.git by extracting MMCoreJ as an independent project

  • Add minimal Meson build for MMDevice and MMCore (Experimental Meson build for MMDevice and MMCore #416)
    • This will probably need to be refined, informed by the next steps
  • Convert pymmcore build to use Meson (replacing setuptools)
    • This is easier to start with than MMCoreJ because it is already decoupled from this repo
    • mmCoreAndDevices will remain a Git submodule of pymmcore
    • Tell Meson to use mmCoreAndDevices/ as its subproject directory (project(subproject_dir: 'mmCoreAndDevices'))
    • Meson build, replacing setuptools pymmcore#109
  • Set up an "experimental" MMCoreJ repository and set up Meson build
    • The MMCoreJ in mmCoreAndDevices remains official at this stage; code changes are synced
    • MMCoreJ.git has mmCoreAndDevices.git as submodule
    • Produce MMCoreJ JARs that embed the C++ JNI libraries for all platforms (use scijava/native-lib-loader or similar)
    • Publish to Maven Central
  • Sever the Ant/Autoconf/Automake build systems of micro-manager.git and mmCoreAndDevices.git
    • Create parent/overview issue for Java build modernization and go from there
      • micro-manager.git fetches MMCoreJ from Maven repo
    • Remove MMCoreJ_wrap/ from mmCoreAndDevices.git; make MMCoreJ.git the official repo
    • Eliminate Ant from mmCoreAndDevices.git (only used on Windows to copy DLLs; replace with interim script?)
    • mmCoreAndDevices.git still has Autoconf/Automake build for macOS/Linux but can be built without micro-manager.git
    • Nightly build needs to combine micro-manager and mmCoreAndDevices artifacts

Phase 2: Convert device adapters to build with Meson, with individual management of dependencies

Details to be fleshed out (but see the previous plan for the general idea). 3rdparty and 3rdpartypublic will be eliminated as part of this.

@henrypinkard
Copy link
Member

This all sounds great!

Let me know if I can help with any parts. In particular, I spent a lot of time getting the maven artifacts to automatically build and trigger each other across repos, so perhaps some of that is reusable for pieces here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants