Giter Club home page Giter Club logo

cbc-src's Introduction

Cbc-src

Package Documentation License

cbc-src crate is a *-src crate. This links Cbc libraries to executable build by cargo, but does not provide Rust bindings. Cbc build with CoinUtils (CoinUtils-src), Osi (Clp-src), Cgl (Cgl-src) and Clp (Clp-src) support.

By this package, you don't need to worry about installing CBC in the system, and it can be built for all platforms.

Cbc (Coin-or branch and cut) is an open-source mixed integer linear programming solver written in C++. It can be used as a callable library or using a stand-alone executable. It can be used in a wide variety of ways through various modeling systems, packages, etc.

Usage

  1. Add the following to your Cargo.toml:
[dependencies]
cbc-src = "0.2"
  1. Add the following to your lib.rs:
extern crate cbc_src;

This package does not provide bindings. Please use coincbc-sys, coinclp-sys to use Cbc, Clp, e.g.

[dependencies]
coincbc-sys = { version = "0.2" }

Configuration

The following Cargo features are supported:

  • default to osicbc and cbcsolver feature;
  • osicbc to build with Osi supported. However the Osi is always built, by which the Cbc call the Clp solver and Cgl library;
  • cbcsolver to build CbcSolver lib and crate the api for Rust. If you do not use Cbc directly, you can disable this feature to reduce the build time;

The package build from the source and link statically by default. It also provide the following environment variables to allow users to link to system library customly:

  • CARGO_COINUTILS_STATIC to link to CoinUtils statically;
  • CARGO_COINUTILS_SYSTEM to link to CoinUtils system library;
  • CARGO_OSI_STATIC to link to Osi statically;
  • CARGO_OSI_SYSTEM to link to Osi system library;
  • CARGO_CLP_STATIC to link to Clp statically if with_clp feature is enabled;
  • CARGO_CLP_SYSTEM to link to Clp system library if with_clp feature is enabled;
  • CARGO_CGL_STATIC to link to Cgl statically;
  • CARGO_CGL_SYSTEM to link to Cgl system library;

Set the environment variable to 1 to enable the feature. For example, to link to system library dynamically, set CARGO_${LIB_NAME}_SYSTEM to 1; to link to system library statically, set both CARGO_${LIB_NAME}_SYSTEM and CARGO_${LIB_NAME}_STATIC to 1.

Windows and vcpkg

On Windows, if ${LIB_NAME}_SYSTEM is set to 1, cbc-src will use vcpkg to find Cbc. Before building, you must have the correct Cbc installed for your target triplet and kind of linking. For instance, to link dynamically for the x86_64-pc-windows-msvc toolchain, install cbc for the x64-windows triplet:

vcpkg install cbc --triplet x64-windows

To link Cbc statically, install cbc for the x64-windows-static-md triplet:

vcpkg install cbc --triplet x64-windows-static-md

To link Cbc and C Runtime (CRT) statically, install cbc for the x64-windows-static triplet:

vcpkg install cbc --triplet x64-windows-static

and build with +crt-static option

RUSTFLAGS='-C target-feature=+crt-static' cargo build --target x86_64-pc-windows-msvc

Please see the "Static and dynamic C runtimes" in The Rust reference for detail.

Cross Compilation

you can compile it for the other target by providing the --target option to cargo build.

Target supported
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf
armv7-linux-androideabi
armv7-unknown-linux-gnueabi
armv7-unknown-linux-gnueabihf
armv7-unknown-linux-musleabi
armv7-unknown-linux-musleabihf
riscv64gc-unknown-linux-gnu
x86_64-pc-windows-gnu
x86_64-unknown-linux-gnu

Contribution

Your contribution is highly appreciated. Do not hesitate to open an issue or a pull request. Note that any contribution submitted for inclusion in the project will be licensed according to the terms given in LICENSE.

cbc-src's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar maroon502 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.