basic_allocator 0.1.6

A very simple global allocator written in pure Rust
Documentation
FROM rustlang/rust:nightly as base
# This mostly just works without the Dockerfile:
# docker  run  -v `pwd`:/$(basename $PWD) -w /$(basename $PWD) -it  rustlang/rust:nightly
#
# Alternatively, you can use this Dockerfile.
# For development:
# docker build --target dev -t basicallocdev . && docker run -v `pwd`:/usr/src/basicalloc -it basicallocdev
# For use:
# docker build -t basicalloc . && docker run -it basicalloc

# We don't really need strace, but it is useful for this
RUN apt-get update -y
RUN apt-get install -y strace
RUN cargo install cargo-build-deps


FROM base as builder
WORKDIR /usr/src/basicalloc
COPY Cargo.toml Cargo.lock ./

# Fetch dependencies to create docker cache layer.
# Workaround with empty main to pass the build, which must be purged after.
# https://github.com/rust-lang/cargo/issues/2644
RUN  mkdir -p ./src \
    && echo 'fn main() { println!("Dummy") }' > ./src/main.rs \
    && cargo build \
    && cargo build --release \
    && cargo build --features "use_libc" \
    && cargo build --release --features "use_libc" \
    && cargo test \
    && cargo test --features "use_libc" \
    && rm -r src/main.rs target/debug/.fingerprint/basic_allocator-* target/release/.fingerprint/basic_allocator-*

# Cache layer with only my code
COPY ./ ./

# The real build.
RUN cargo build --frozen
RUN cargo build --frozen --release
RUN cargo build --frozen --tests
RUN cargo build --frozen --features "use_libc"
RUN cargo build --frozen --release --features "use_libc"
RUN cargo build --frozen --tests --features "use_libc"


FROM base as dev
WORKDIR /usr/src/basicalloc
COPY --from=builder /usr/src/basicalloc/target /usr/src/basicalloc/target


# Fetch and build dependencies using cargo-build-deps
# https://github.com/nacardin/cargo-build-deps
# RUN cd /tmp && USER=root cargo new --bin basicalloc
# WORKDIR /tmp/basicalloc
# COPY Cargo.toml Cargo.lock ./
# RUN cargo build-deps --release
# RUN cargo build-deps
# COPY src /tmp/basicalloc/src
# RUN cargo build  --release
# RUN cargo build

FROM dev as default
COPY ./src ./src
COPY ./examples ./examples
COPY ./tests ./tests