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

Split makie support into a separate JlCxx module so it can be wrapped by a separate package #23

Merged
merged 2 commits into from
Sep 8, 2024

Conversation

steffenhaug
Copy link
Contributor

This is probably not quite ready for a merge, but I'm starting a PR so we have a place to discuss where to go from here, and for visibility in case someone wants to play around with it or help out.

This PR supports JuliaGraphics/QML.jl#207.

I opted to keep the C++ code backing QMLMakie in here for now. In the long term it might be interesting to separate it into its own JLL if it becomes huge, but I couldn't quite figure out the logistics of making a new JLL that links to this one so the Makie component can extend the generic OpenGL component.

@barche barche merged commit db93458 into JuliaGraphics:main Sep 8, 2024
5 of 9 checks passed
@barche
Copy link
Collaborator

barche commented Sep 8, 2024

Thanks, I fully agree to keep the C++ code in one place, it doesn't add any special dependencies here and keeping two C++ JLLs in sync would be difficult. I also don't expect we will need to add much here, I prefer to implement as much as possible on the Julia side.

@steffenhaug
Copy link
Contributor Author

I noticed CI failed on macOS. Is that normal?

I didn't think much more about it, seeing as you got it working, but now that I'm trying to move the application I'm developing at work over to use QMLMakie, I'm having some trouble compiling jlqml on macOS myself.

Or rather, I can compile it just fine at first glance, but when i then import jlqml_jll, I get an error at runtime about StdFill not being defined. I see that StdFill is only conditionally defined if JLCXX_HAS_RANGES, so I'm assuming that this isn't the case in whatever setup Yggdrasil is building libjlcxx_jll for macOS.

If I modify the cmake flags with sed as you have done to build jlqml in Yggdrasil, compilation fails because std::ranges, which is used in the headers for JlCxx, is not defined, which i suppose means that the checks in JlCxx to determine JLCXX_HAS_RANGES fails to catch that Apple Clang 15.0 with gnu++17 in fact doesn't have ranges.

If I manually #undef JLCXX_HAS_RANGES before I #include "jlcxx/stl.hpp" it actually does compile, but I can't see this in the Yggdrasil build, so I'm assuming its not normal to do that, and I wouldn't be surprised if it has some adverse effects.

I think the reason this ultimately happens, is that __has_include (<ranges>) succeeds, but ranges is defined in the namespace q20. Maybe that's an issue for libjlcxxwrap.

@barche
Copy link
Collaborator

barche commented Sep 9, 2024

Ah, yes, there have been many additions to libcxxwrap during this year's Google Summer of Code. I think you need to build libcxxwrap from source for this to work, but we triggered a bug in clang and it literally takes hours to compile now, so this is cumbersome. I have tested your code only on my Linux machine, but there is no inherent reason why it should cause problems, so any issues on Mac are undoubdetly related to libcxxwrap changes.

@steffenhaug
Copy link
Contributor Author

I tried, and I noticed that. So is it effectively impossible to build on macOS for the time being? I guess I can leave it compiling overnight :-p

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

Successfully merging this pull request may close these issues.

2 participants