[project]
name = "DART"
version = "6.15.0"
description = "Dynamic Animation and Robotics Toolkit"
authors = ["Jeongseok Lee <jslee02@gmail.com>"]
channels = ["conda-forge"]
platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"]

[build-dependencies]
benchmark = ">=1.9.1,<2"
black = ">=24.10.0,<25"
cmake = ">=3.31.5,<4"
doxygen = ">=1.13.2,<2"
gtest = ">=1.15.2,<2"
isort = ">=6.0.0,<7"
ninja = ">=1.12.1,<2"
pip = ">=25.0,<26"
pipx = ">=1.7.1,<2"
pkg-config = ">=0.29.2,<0.30"
pytest = ">=8.3.4,<9"
setuptools = ">=75.8.0,<76"
tracy-profiler-gui = ">=0.11.1,<0.12"

[dependencies]
assimp = ">=5.4.3,<6"
bullet-cpp = ">=3.25,<4"
console_bridge = ">=1.0.2,<2"
eigen = ">=3.4.0,<4"
fcl = ">=0.7.0,<0.8"
fmt = ">=11.0.2,<12"
imgui = ">=1.91.6,<2"
ipopt = ">=3.14.17,<4"
libboost-devel = ">=1.86.0,<2"
libode = ">=0.16.5,<0.17"
nlopt = ">=2.9.0,<3"
numpy = ">=1.26.4,<3"
octomap = ">=1.10.0,<2"
openscenegraph = ">=3.6.5,<4"
pagmo-devel = ">=2.19.1,<3"
spdlog = ">=1.15.0,<2"
tinyxml2 = ">=10.0.0,<11"
tracy-profiler-client = ">=0.11.1,<0.12"
urdfdom = ">=4.0.1,<5"

[tasks]
clean = { cmd = "rm -rf build && rm -rf .deps && rm -rf .pixi && rm pixi.lock" }

config = { cmd = """
    cmake \
        -G Ninja \
        -S . \
        -B build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX \
        -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
        -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
        -DDART_BUILD_PROFILE=ON \
        -DDART_USE_SYSTEM_GOOGLEBENCHMARK=ON \
        -DDART_USE_SYSTEM_GOOGLETEST=ON \
        -DDART_USE_SYSTEM_IMGUI=ON \
        -DDART_USE_SYSTEM_TRACY=ON \
        -DDART_VERBOSE=$DART_VERBOSE
""", env = { DART_VERBOSE = "OFF", BUILD_TYPE = "Release" } }

lint-cpp = { cmd = """
    cmake \
    --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
    --target format
""", depends-on = ["config"] }

lint-py = { cmd = """
    black . --exclude '\\..*' \
    && isort . --skip-glob '.*'
""", depends-on = ["config"] }

lint = { depends-on = ["lint-cpp", "lint-py"] }

check-lint-cpp = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target check-format
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

check-lint-py = { cmd = """
    black . --check --exclude '\\..*' \
    && isort . --check --skip-glob '.*'
""", depends-on = ["config"] }

check-lint = { depends-on = ["check-lint-cpp", "check-lint-py"] }

build = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        -j \
        --target all
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

build-tests = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        -j \
        --target tests
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

build-dartpy = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        -j \
        --target dartpy
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

test = { cmd = """
    ctest \
        --test-dir build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --output-on-failure
""", depends-on = ["build-tests"], env = { BUILD_TYPE = "Release" } }

test-dartpy = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        -j \
        --target pytest
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

test-all = { cmd = """
    cmake --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE -j --target ALL
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

ex = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target $EXE \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/$EXE
""", depends-on = [
    "config",
], env = { EXE = "hello_world", BUILD_TYPE = "Release" } }

ex-atlas-puppet = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target atlas_puppet \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/atlas_puppet
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

ex-atlas-simbicon = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target atlas_simbicon \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/atlas_simbicon
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

ex-hello-world = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target hello_world \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/hello_world
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

bm = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target BM_INTEGRATION_$EXE \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/BM_INTEGRATION_$EXE
""", depends-on = ["config"], env = { EXE = "empty", BUILD_TYPE = "Release" } }

bm-boxes = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target BM_INTEGRATION_boxes \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/BM_INTEGRATION_boxes
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

bm-empty = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target BM_INTEGRATION_empty \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/BM_INTEGRATION_empty
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

bm-kinematics = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target BM_INTEGRATION_kinematics \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/BM_INTEGRATION_kinematics
""", depends-on = [
    "config",
], env = { BUILD_TYPE = "Release" } }

tu-biped = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target tutorial_biped \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/tutorial_biped
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tu-biped-fi = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target tutorial_biped_finished \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/tutorial_biped_finished
""", depends-on = [
    "config",
], env = { BUILD_TYPE = "Release" } }

tu-collisions = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target tutorial_collisions \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/tutorial_collisions
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tu-collisions-fi = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target tutorial_collisions_finished \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/tutorial_collisions_finished
""", depends-on = [
    "config",
], env = { BUILD_TYPE = "Release" } }

tu-dominoes = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target tutorial_dominoes \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/tutorial_dominoes
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tu-dominoes-fi = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target tutorial_dominoes_finished \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/tutorial_dominoes_finished
""", depends-on = [
    "config",
], env = { BUILD_TYPE = "Release" } }

tu-multi-pendulum = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target tutorial_multi_pendulum \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/tutorial_multi_pendulum
""", depends-on = [
    "config",
], env = { BUILD_TYPE = "Release" } }

tu-multi-pendulum-fi = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target tutorial_multi_pendulum_finished \
        --parallel \
    && ./build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE/bin/tutorial_multi_pendulum_finished
""", depends-on = [
    "config",
], env = { BUILD_TYPE = "Release" } }

install = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp/$BUILD_TYPE \
        --target install \
        --parallel \
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tracy = { cmd = "tracy-profiler" }

################################################################################
# linux-64
################################################################################

[target.linux-64.build-dependencies]
clang-format-14 = ">=14.0.6,<15"

[target.linux-64.dependencies]
freeglut = ">=3.2.2,<3.3"

################################################################################
# osx-64
################################################################################

[target.osx-64.build-dependencies]
clang-format-14 = ">=14.0.6,<15"

[target.osx-64.dependencies]

[target.osx-64.tasks]

################################################################################
# osx-arm64
################################################################################

[target.osx-arm64.build-dependencies]
clang-format-14 = ">=14.0.6,<15"

[target.osx-arm64.dependencies]

[target.osx-arm64.tasks]

################################################################################
# win-64
################################################################################

[target.win-64.dependencies]
freeglut = ">=3.2.2"

[target.win-64.tasks]
config = { cmd = """
    cmake \
        -S . \
        -B build/$PIXI_ENVIRONMENT_NAME/cpp \
        -G 'Visual Studio 17 2022' \
        -DBUILD_SHARED_LIBS=OFF \
        -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX \
        -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
        -DDART_BUILD_PROFILE=ON \
        -DDART_MSVC_DEFAULT_OPTIONS=ON \
        -DDART_USE_SYSTEM_GOOGLEBENCHMARK=ON \
        -DDART_USE_SYSTEM_GOOGLETEST=ON \
        -DDART_USE_SYSTEM_IMGUI=ON \
        -DDART_USE_SYSTEM_TRACY=ON \
        -DDART_VERBOSE=$DART_VERBOSE
""", env = { DART_VERBOSE = "OFF" } }

lint-py = { cmd = """
    black . --exclude '\\..*' && isort . --skip-glob '.*'
""", depends-on = ["config"] }

lint = { depends-on = ["lint-py"] }

check-lint-py = { cmd = """
    black . --check --exclude '\\..*' && isort . --check --skip-glob '.*'
""", depends-on = ["config"] }

check-lint = { depends-on = ["check-lint-py"] }

build = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        -j
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

build-tests = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        -j \
        --target tests
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

build-dartpy = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        -j \
        --target dartpy
""", depends-on = ["config"] }

test = { cmd = """
    ctest \
        --test-dir build/$PIXI_ENVIRONMENT_NAME/cpp \
        --build-config $BUILD_TYPE \
        --output-on-failure
""", depends-on = ["build-tests"], env = { BUILD_TYPE = "Release" } }

test-dartpy = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        -j \
        --target pytest
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

test-all = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        -j \
        --target ALL
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tu-biped = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        --target tutorial_biped \
        --parallel \
    && build/$BUILD_TYPE/tutorial_biped.exe
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tu-biped-fi = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        --target tutorial_biped_finished \
        --parallel \
    && build/$BUILD_TYPE/tutorial_biped.exe
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tu-collisions = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        --target tutorial_collisions \
        --parallel \
    && build/$BUILD_TYPE/tutorial_collisions.exe
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tu-collisions-fi = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        --target tutorial_collisions_finished \
        --parallel \
    && build/$BUILD_TYPE/tutorial_collisions.exe
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tu-dominoes = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        --target tutorial_dominoes \
        --parallel \
    && build/$BUILD_TYPE/tutorial_dominoes.exe
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tu-dominoes-fi = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        --target tutorial_dominoes_finished \
        --parallel \
    && build/$BUILD_TYPE/tutorial_dominoes.exe
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tu-multi-pendulum = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        --target tutorial_multi_pendulum \
        --parallel \
    && build/$BUILD_TYPE/tutorial_multi_pendulum.exe
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

tu-multi-pendulum-fi = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        --target tutorial_multi_pendulum_finished \
        --parallel \
    && build/$BUILD_TYPE/tutorial_multi_pendulum.exe
""", depends-on = ["config"], env = { BUILD_TYPE = "Release" } }

install = { cmd = """
    cmake \
        --build build/$PIXI_ENVIRONMENT_NAME/cpp \
        --config $BUILD_TYPE \
        -j \
        --target install
""", depends-on = ["build"], env = { BUILD_TYPE = "Release" } }

tracy = { cmd = "tracy-profiler.exe" }