OpenModelica: Difference between revisions

DoggoBit (talk | contribs)
No edit summary
building OpenModelica from source for NixOS 25.05 improved
 
Line 26: Line 26:


== Build from source ==
== Build from source ==
Here is a <code>shell.nix</code> that nearly works for NixOS 25.05<syntaxhighlight lang="nix" line="1">
See here (working for NixOS 25.05 as of 2025-06-10): https://github.com/MBanucu/NixOS2505BuildOpenModelicaFromSource
{
  pkgs ? import <nixpkgs> {
    config.permittedInsecurePackages = [
      "python-2.7.18.8"
    ];
  },
}:
 
let
  qtVersion = pkgs.qt5.qtbase.version;
in
 
pkgs.mkShell {
  nativeBuildInputs = with pkgs; [
    autoconf
    automake
    cmake
    ccache
    gcc
    gnumake
    pkg-config
    libtool
    git
  ];
 
  buildInputs = with pkgs; [
    boost
    curl
    expat
    fontconfig
    freetype
    gdb
    gfortran
    gfortran.cc.lib
    glibc
    hdf5
    libffi
    libGL
    libGL.dev
    libxml2
    libuuid
    lp_solve
    openjdk
    openblas
    openssl
    python2
    python3
    qt5.full
    readline
    readline.dev
    sundials
    zlib
    openscenegraph
    stdenv.cc.libc_dev
    icu
    xorg.libX11
    xorg.libXrandr
    xorg.libXinerama
    xorg.libXcursor
    asciidoc
    doxygen
    python3Packages.sphinx
    flex
    opencl-clhpp
    ocl-icd
  ];
 
  shellHook = ''
    export LD_LIBRARY_PATH=${
      pkgs.lib.makeLibraryPath [
        pkgs.boost
        pkgs.boost.dev
        pkgs.curl
        pkgs.curl.dev
        pkgs.expat
        pkgs.expat.dev
        pkgs.fontconfig
        pkgs.freetype
        pkgs.gfortran.cc.lib
        pkgs.glibc.dev
        pkgs.hdf5
        pkgs.icu.dev
        pkgs.libffi
        pkgs.libGL
        pkgs.libGL.dev
        pkgs.libxml2
        pkgs.libuuid
        pkgs.libuuid.dev
        pkgs.lp_solve
        pkgs.openblas
        pkgs.openssl
        pkgs.qt5.full
        pkgs.readline
        pkgs.readline.dev
        pkgs.sundials
        pkgs.zlib
        pkgs.openscenegraph
        pkgs.stdenv.cc.libc_dev
        pkgs.xorg.libX11
        pkgs.xorg.libXrandr
        pkgs.xorg.libXinerama
        pkgs.xorg.libXcursor
      ]
    }:$LD_LIBRARY_PATH
 
    # Replace -isystem with -I in NIX_CFLAGS_COMPILE
    export NIX_CFLAGS_COMPILE=$(echo "$NIX_CFLAGS_COMPILE" | sed 's/-isystem/-I/g')
    export CMAKE_C_FLAGS=$NIX_CFLAGS_COMPILE
    export CMAKE_CXX_FLAGS=$NIX_CFLAGS_COMPILE
 
    export CPATH=${pkgs.glibc.dev}/include:${pkgs.stdenv.cc.libc_dev}/include:${pkgs.boost.dev}/include:${pkgs.libuuid.dev}/include:${pkgs.curl.dev}/include:${pkgs.icu.dev}/include:${pkgs.qt5.full}/include:${pkgs.qt5.qtsvg.dev}/include:${pkgs.libGL.dev}/include:${pkgs.readline.dev}/include:${pkgs.openscenegraph}/include:${pkgs.qt5.qtwebengine.dev}/include:${pkgs.expat.dev}/include:$CPATH
 
    # Set QT_PLUGIN_PATH to include Qt plugins
    export QT_PLUGIN_PATH=${pkgs.qt5.full}/lib/qt-${qtVersion}/plugins:$QT_PLUGIN_PATH
 
    # Force Qt to use the xcb plugin (X11) by default
    export QT_QPA_PLATFORM=xcb
 
    # Clone or update OpenModelica repository to v1.25.0
    if [ ! -d "OpenModelica" ]; then
      git clone --recurse-submodules https://github.com/OpenModelica/OpenModelica.git
      cd OpenModelica
      git checkout v1.25.0
      git submodule update --force --init --recursive
    else
      cd OpenModelica
    fi
 
    export OPENMODELICAHOME=$(pwd)/build_cmake/install_cmake
 
    echo ""
    echo "OpenModelica build environment ready!"
    echo "To build OpenModelica with CMake and QT WebEngine, run:"
    mkdir -p build_cmake
    echo "cmake -S . -B build_cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DOM_OMC_ENABLE_FORTRAN=OFF -DOM_OMC_ENABLE_IPOPT=OFF -DOM_OMEDIT_ENABLE_QTWEBENGINE=ON > build_cmake/\$(date +%Y%m%d_%H%M%S)_cmake.txt 2> build_cmake/\$(date +%Y%m%d_%H%M%S)_cmake_error.txt"
    echo "cmake --build build_cmake --target install --parallel \$(nproc) > build_cmake/\$(date +%Y%m%d_%H%M%S)_build.txt 2> build_cmake/\$(date +%Y%m%d_%H%M%S)_build_error.txt"
    echo ""
    echo "Copy libraries from lib64 to lib because omc expects them there"
    echo "cp -r $OPENMODELICAHOME/lib64/* $OPENMODELICAHOME/lib"
    echo ""
    echo "To run OpenModelica, use the command"
    echo "$OPENMODELICAHOME/bin/OMEdit"
  '';
}
</syntaxhighlight>
[[Category:Scientific applications]]
[[Category:Scientific applications]]