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

Can't generate crossbuild FMU with CVODE on Windows #12855

Open
bilderbuchi opened this issue Sep 9, 2024 · 6 comments
Open

Can't generate crossbuild FMU with CVODE on Windows #12855

bilderbuchi opened this issue Sep 9, 2024 · 6 comments
Assignees

Comments

@bilderbuchi
Copy link

bilderbuchi commented Sep 9, 2024

Another "fun" aspect concerning the FMU out-of-the-box experience (#10174) is that the crossbuild image is based on such an old Debian that it ships an ancient CMake, with the consequence of clashing with current default flags

CMake Error at CMakeLists.txt:31 (message):
--fmuRuntimeDepends=modelica requires CMake version 3.21 or higher. You are running version 3.7.2. Use OpenModelica compiler flag '--fmuRuntimeDepends=none' to disable

Frustratingly, using --fmuRuntimeDepends=none as a workaround recommended by the docs causes a subsequent failure

CVODE_DIRECTORY: C:/OpenModelica1.24.0-dev-64bit/lib/x86_64-linux-gnu/omc
CMake Error at CMakeLists.txt:162 (message):
Couldn't find library sundials_cvode in
C:/OpenModelica1.24.0-dev-64bit/lib/x86_64-linux-gnu/omc
-- Configuring incomplete, errors occurred!

Which is no surprise, I guess, because we had to not include runtime dependencies!

In effect, I can't see a way to compile a Linux FMU (e.g. for use in a Docker container) from Windows, while avoiding the Euler solver.

How to work around that? Find another appropriate image with newer versions somehow? Is something that could be used instead of multiarch/crossbuild hosted on the OM docker repo?
@AnHeuermann, any ideas?

Originally posted by @bilderbuchi in #10174 (comment)

@bilderbuchi
Copy link
Author

Ref to the upstream (crossbuild) update request: multiarch/crossbuild#61. I don't think this will be updated any time soon, judging from the activity level on that repo.

@bilderbuchi
Copy link
Author

CVODE_DIRECTORY: C:/OpenModelica1.24.0-dev-64bit/lib/x86_64-linux-gnu/omc

Which is no surprise, I guess, because we had to not include runtime dependencies!

Is maybe some path machinery going wrong here? That CVODE_DIRECTORY path does not exist on my machine, but C:\OpenModelica1.24.0-dev-64bit\lib\omc (i.e. without the arch triplet) does exist, and contains sundials libraries.

@casella
Copy link
Contributor

casella commented Sep 13, 2024

@adrpo could you please take care of that?

@sevoigt
Copy link

sevoigt commented Jan 18, 2025

Seems to be an issue with cmake and how the path to the sundials lib is assembled. Just had a similar issue on Fedora 41. The CMakeLists to build the fmu contains

`set(CVODE_DIRECTORY

"/opt/openmodelica-nightly/bin/../lib/${CMAKE_LIBRARY_ARCHITECTURE}/omc"`

CMAKE_LIBRARY_ARCHITECTURE is the problem here. On may machine it returns "x86_64-redhat-linux-gnu", whereas the omc directory is just "x86_64-linux-gnu". I created a symlink and it works fine.

Why not just hardcode the lib-paths for win and linux? You'll never know what cmake comes up with on any OS...

@bilderbuchi
Copy link
Author

bilderbuchi commented Jan 20, 2025

You'll never know what cmake comes up with on any OS...

It seems like it's actually the compiler that CMake gets differing folder names from, and not an issue with CMake? Presumably on your Redhat the location of that "system library search directory" is different?

Target architecture library directory name detected for <LANG>.

If the <LANG> compiler passes to the linker an architecture-specific system library search directory such as <prefix>/lib/<arch> this variable contains the <arch> name if/as detected by CMake.

https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_LIBRARY_ARCHITECTURE.html#variable:CMAKE_%3CLANG%3E_LIBRARY_ARCHITECTURE

Why not just hardcode the lib-paths for win and linux? You'll never know what cmake comes up with on any OS...

I'm not sure if that would solve the original problem, though: this inserts a Linux arch string (x86_64-linux-gnu) on a Windows machine/OM installation, and thus fails. I suspect this is because some part of the build config does not correctly account for cross-compilation? Or the cross-build Docker image erroneously being fed Windows paths (C:\...) 🤷

@sevoigt
Copy link

sevoigt commented Jan 20, 2025

Ah ok, thanks for ponting that out.

I'm not sure if that would solve the original problem, though: this inserts a Linux arch string (x86_64-linux-gnu) on a Windows machine/OM installation, and thus fails.

My naive idea was not to use CMAKE_LIBRARY_ARCHITECTURE at all in the paths, so that nothing is inserted no matter if from cmake or the compiler. Just use C:/OpenModelica/lib on win and /openmodelica/lib/x86_64-linux-gnu/ on linux. But I'm certainly lacking some background here. And this would probably fail as soon as someone tries to build e.g. for arm64

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

5 participants