-
-
Notifications
You must be signed in to change notification settings - Fork 7
Working IDAKLU standalone build and wheels #3
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
Closed
Closed
Changes from 5 commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
4949fc8
build commit
santacodes 5ecc6d4
fixing build
santacodes 98083e7
change to has_idaklu
santacodes 55f4cb5
final idaklu working build
santacodes 754543b
added uv backend to noxfile
santacodes 36e1d81
refactored .gitignore
santacodes d5fc30a
remove scikit
santacodes File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,139 @@ | ||
.idea | ||
.vscode | ||
*.txt | ||
*.tmp | ||
*.png | ||
*.gif | ||
/local/ | ||
*.DS_Store | ||
*.mat | ||
*.csv | ||
*.hidden | ||
*.pkl | ||
|
||
# don't ignore important .txt and .csv files | ||
!requirements* | ||
!LICENSE.txt | ||
!CMakeLists.txt | ||
!src/pybamm/CITATIONS.bib | ||
!src/pybamm/input/**/*.csv | ||
!tests/unit/test_parameters/*.csv | ||
!benchmarks/benchmark_images/*.png | ||
|
||
# running files | ||
*.pyc | ||
*.py~ | ||
.~lock* | ||
*.swp | ||
|
||
# Python cache | ||
*__pycache__/ | ||
*.cache | ||
.ipynb_checkpoints/ | ||
|
||
# Sphinx build files | ||
docs/_build/ | ||
docs/build/ | ||
build/ | ||
|
||
# inputs except parameters and comsol data needed for scripts and notebooks | ||
input/* | ||
!input/parameters | ||
!input/comsol_results/ | ||
!input/drive_cycles | ||
|
||
# keep images required by notebooks | ||
!docs/examples/notebooks/creating_models/SEI.png | ||
|
||
# simulation outputs | ||
out/ | ||
config.py | ||
matplotlibrc | ||
*.pickle | ||
*.sav | ||
|
||
# ideas | ||
ideas/ | ||
.idea/ | ||
|
||
# setup.py files | ||
*.egg-info | ||
__pycache__ | ||
dist/ | ||
|
||
# coverage | ||
.coverage | ||
coverage.xml | ||
htmlcov/ | ||
|
||
# virtual environment | ||
env/ | ||
venv/ | ||
venv3.5/ | ||
PyBaMM-env/ | ||
bin/ | ||
etc/ | ||
lib/ | ||
lib64 | ||
share/ | ||
pyvenv.cfg | ||
.vscode | ||
.ruff_cache/ | ||
|
||
# sundials | ||
sundials | ||
sundials4 | ||
sundials-* | ||
SuiteSparse-* | ||
build_sundials | ||
KLU_module_deps | ||
|
||
# downloads | ||
*.gz | ||
|
||
# third party | ||
third-party | ||
|
||
# cmakefiles | ||
CMakeFiles | ||
Makefile | ||
cmake_install.cmake | ||
*.so | ||
|
||
third-party/pybind11 | ||
pybind11/ | ||
|
||
# Build dependencies/ | ||
KLU_module_deps | ||
|
||
# setup | ||
setup.log | ||
|
||
# test | ||
test.c | ||
test.json | ||
.pytest_cache/ | ||
|
||
# tox | ||
.tox/ | ||
|
||
# nox | ||
.nox/ | ||
|
||
# vcpkg | ||
vcpkg_installed/ | ||
|
||
# benchmarks | ||
html/ | ||
results/ | ||
|
||
# expression tree images for notebooks in docs | ||
!docs/source/examples/notebooks/expression_tree/*.png | ||
|
||
# do not ignore SPM images for notebooks in docs | ||
!docs/source/examples/notebooks/models/*.png | ||
|
||
# do not ignore images in _static folder in docs | ||
!docs/_static/favicon/favicon.png | ||
!docs/_static/*.png | ||
|
||
# tests | ||
test_callback.log |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,171 @@ | ||
cmake_minimum_required(VERSION 3.13) | ||
cmake_policy(SET CMP0074 NEW) | ||
set(CMAKE_VERBOSE_MAKEFILE ON) | ||
|
||
if(DEFINED ENV{VCPKG_ROOT_DIR} AND NOT DEFINED VCPKG_ROOT_DIR) | ||
set(VCPKG_ROOT_DIR "$ENV{VCPKG_ROOT_DIR}" | ||
CACHE STRING "Vcpkg root directory") | ||
endif() | ||
|
||
if(DEFINED VCPKG_ROOT_DIR) | ||
set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT_DIR}/scripts/buildsystems/vcpkg.cmake | ||
CACHE STRING "Vcpkg toolchain file") | ||
endif() | ||
|
||
if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET) | ||
set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" | ||
CACHE STRING "Vcpkg target triplet") | ||
endif() | ||
|
||
project(idaklu) | ||
|
||
set(CMAKE_CXX_STANDARD 14) | ||
set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||
set(CMAKE_CXX_EXTENSIONS OFF) | ||
set(CMAKE_EXPORT_COMPILE_COMMANDS 1) | ||
set(CMAKE_POSITION_INDEPENDENT_CODE ON) | ||
if(NOT MSVC) | ||
# MSVC does not support variable length arrays (vla) | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=vla") | ||
endif() | ||
|
||
# casadi seems to compile without the newer versions of std::string | ||
add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0) | ||
|
||
if(NOT PYBIND11_DIR) | ||
set(PYBIND11_DIR pybind11) | ||
endif() | ||
add_subdirectory(${PYBIND11_DIR}) | ||
|
||
# Check Casadi build flag | ||
if(NOT DEFINED PYBAMM_IDAKLU_EXPR_CASADI) | ||
set(PYBAMM_IDAKLU_EXPR_CASADI ON) | ||
endif() | ||
message("PYBAMM_IDAKLU_EXPR_CASADI: ${PYBAMM_IDAKLU_EXPR_CASADI}") | ||
|
||
# Casadi PyBaMM source files | ||
set(IDAKLU_EXPR_CASADI_SOURCE_FILES "") | ||
if(${PYBAMM_IDAKLU_EXPR_CASADI} STREQUAL "ON" ) | ||
add_compile_definitions(CASADI_ENABLE) | ||
set(IDAKLU_EXPR_CASADI_SOURCE_FILES | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/Casadi/CasadiFunctions.cpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/Casadi/CasadiFunctions.hpp | ||
) | ||
endif() | ||
|
||
# Check IREE build flag | ||
if(NOT DEFINED PYBAMM_IDAKLU_EXPR_IREE) | ||
set(PYBAMM_IDAKLU_EXPR_IREE OFF) | ||
endif() | ||
message("PYBAMM_IDAKLU_EXPR_IREE: ${PYBAMM_IDAKLU_EXPR_IREE}") | ||
|
||
# IREE (MLIR expression evaluation) PyBaMM source files | ||
set(IDAKLU_EXPR_IREE_SOURCE_FILES "") | ||
if(${PYBAMM_IDAKLU_EXPR_IREE} STREQUAL "ON" ) | ||
add_compile_definitions(IREE_ENABLE) | ||
# Source file list | ||
set(IDAKLU_EXPR_IREE_SOURCE_FILES | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/IREE/iree_jit.cpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/IREE/iree_jit.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/IREE/IREEFunctions.cpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/IREE/IREEFunctions.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/IREE/ModuleParser.cpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/IREE/ModuleParser.hpp | ||
) | ||
endif() | ||
|
||
# The complete (all dependencies) sources list should be mirrored in setup.py | ||
pybind11_add_module(idaklu | ||
# pybind11 interface | ||
src/pybammsolvers/solvers/c_solvers/idaklu.cpp | ||
# IDAKLU solver (SUNDIALS) | ||
src/pybammsolvers/solvers/c_solvers/idaklu/idaklu_solver.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/IDAKLUSolver.cpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/IDAKLUSolver.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/IDAKLUSolverOpenMP.inl | ||
src/pybammsolvers/solvers/c_solvers/idaklu/IDAKLUSolverOpenMP.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/IDAKLUSolverOpenMP_solvers.cpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/IDAKLUSolverOpenMP_solvers.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/sundials_functions.inl | ||
src/pybammsolvers/solvers/c_solvers/idaklu/sundials_functions.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/IdakluJax.cpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/IdakluJax.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/common.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/common.cpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Solution.cpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Solution.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Options.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Options.cpp | ||
# IDAKLU expressions / function evaluation [abstract] | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/Expressions.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/Base/Expression.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/Base/ExpressionSet.hpp | ||
src/pybammsolvers/solvers/c_solvers/idaklu/Expressions/Base/ExpressionTypes.hpp | ||
# IDAKLU expressions - concrete implementations | ||
${IDAKLU_EXPR_CASADI_SOURCE_FILES} | ||
${IDAKLU_EXPR_IREE_SOURCE_FILES} | ||
) | ||
|
||
if (NOT DEFINED USE_PYTHON_CASADI) | ||
set(USE_PYTHON_CASADI TRUE) | ||
endif() | ||
|
||
# Use importlib to find the casadi path without importing it. This is useful | ||
# to find the path for the build-time dependency, not the run-time dependency. | ||
execute_process( | ||
COMMAND "${PYTHON_EXECUTABLE}" -c | ||
"import importlib.util; print(next(iter(importlib.util.find_spec('casadi').submodule_search_locations)))" | ||
OUTPUT_VARIABLE CASADI_DIR | ||
OUTPUT_STRIP_TRAILING_WHITESPACE) | ||
|
||
if (CASADI_DIR) | ||
file(TO_CMAKE_PATH ${CASADI_DIR} CASADI_DIR) | ||
message("Found Python casadi path: ${CASADI_DIR}") | ||
endif() | ||
|
||
if(${USE_PYTHON_CASADI}) | ||
message("Trying to link against Python casadi package") | ||
find_package(casadi CONFIG PATHS ${CASADI_DIR} REQUIRED NO_DEFAULT_PATH) | ||
else() | ||
message("Trying to link against any casadi package apart from the Python one") | ||
set(CMAKE_IGNORE_PATH "${CASADI_DIR}/cmake") | ||
find_package(casadi CONFIG REQUIRED) | ||
endif() | ||
|
||
set_target_properties( | ||
idaklu PROPERTIES | ||
INSTALL_RPATH "${CASADI_DIR}" | ||
INSTALL_RPATH_USE_LINK_PATH TRUE | ||
) | ||
|
||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}) | ||
# Sundials | ||
find_package(SUNDIALS REQUIRED) | ||
message("SUNDIALS found in ${SUNDIALS_INCLUDE_DIR}: ${SUNDIALS_LIBRARIES}") | ||
target_include_directories(idaklu PRIVATE ${SUNDIALS_INCLUDE_DIR}) | ||
target_link_libraries(idaklu PRIVATE ${SUNDIALS_LIBRARIES} casadi) | ||
|
||
# link suitesparse | ||
# if using vcpkg, use config mode to | ||
# find suitesparse. Otherwise, use FindSuiteSparse module | ||
if(DEFINED VCPKG_ROOT_DIR) | ||
find_package(SuiteSparse CONFIG REQUIRED) | ||
else() | ||
find_package(SuiteSparse REQUIRED) | ||
message("SuiteSparse found in ${SuiteSparse_INCLUDE_DIRS}: ${SuiteSparse_LIBRARIES}") | ||
endif() | ||
include_directories(${SuiteSparse_INCLUDE_DIRS}) | ||
target_link_libraries(idaklu PRIVATE ${SuiteSparse_LIBRARIES}) | ||
|
||
# IREE (MLIR compiler and runtime library) build settings | ||
if(${PYBAMM_IDAKLU_EXPR_IREE} STREQUAL "ON" ) | ||
set(IREE_BUILD_COMPILER ON) | ||
set(IREE_BUILD_TESTS OFF) | ||
set(IREE_BUILD_SAMPLES OFF) | ||
add_subdirectory(iree EXCLUDE_FROM_ALL) | ||
set(IREE_COMPILER_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/iree/compiler") | ||
target_include_directories(idaklu SYSTEM PRIVATE "${IREE_COMPILER_ROOT}/bindings/c/iree/compiler") | ||
target_compile_options(idaklu PRIVATE ${IREE_DEFAULT_COPTS}) | ||
target_link_libraries(idaklu PRIVATE iree_compiler_bindings_c_loader) | ||
target_link_libraries(idaklu PRIVATE iree_runtime_runtime) | ||
endif() |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.