fairmath / openfhe-rs

OpenFHE-rs - a Rust interface for the OpenFHE library; documentation https://openfhe-rust-wrapper.readthedocs.io/
https://crates.io/crates/openfhe
BSD 2-Clause "Simplified" License
28 stars 6 forks source link

Dockerfile for developing this library on MAC M-Chip #7

Open HaroldGin931 opened 1 week ago

HaroldGin931 commented 1 week ago

Hey, I am trying to deploy this project on my Mac. Because the chip architecture is different, I can not build this project on my laptop. So I write a dockerfile to simulate the X86 env and now it works well, hope this can help you guys.

FROM --platform=linux/amd64 ubuntu:22.04

# Set environment variables
ENV CARGO_TERM_COLOR always

# Install necessary dependencies
RUN apt-get update && apt-get install -y \
    cmake \
    git \
    curl \
    build-essential \
    libssl-dev \
    pkg-config \
    sudo \
    gdb \
    lldb \
    libgmp-dev \
    libomp-dev

# Clone OpenFHE, build and install
RUN git clone https://github.com/openfheorg/openfhe-development.git && \
    cd openfhe-development && \
    git checkout v1.2.0 && \
    mkdir build && \
    cd build && \
    cmake -DBUILD_SHARED=ON .. && \
    make -j$(nproc) && \
    make install && \
    ldconfig

# Install Rust and debugging tools
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
ENV PATH="/root/.cargo/bin:${PATH}"

# Clone OpenFHE-rs and build
RUN git clone https://github.com/fairmath/openfhe-rs.git && \
    cd openfhe-rs && \
    cargo build

# Set working directory
WORKDIR /workspace

# Add alias commands
RUN echo 'alias check-rust="rustc --version && cargo --version"' >> ~/.bashrc && \
    echo 'alias check-openfhe="make -C /openfhe-development/build/ testall"' >> ~/.bashrc && \
    echo 'alias check-openfhe-rs="cargo test --manifest-path /openfhe-rs/Cargo.toml -- --test-threads=1"' >> ~/.bashrc

# Make aliases effective immediately
RUN . ~/.bashrc

CMD ["bash"]
JacomoJ commented 5 days ago

Hey thanks @HaroldGin931 for providing the dockerfile, I added line ENV DEBIAN_FRONTEND noninteractive otherwise it would stuck on asking the geographic area. I can build the image, but unfortunately it gives me linking error when I try to build openfhe-rs/crate_usage:

CXX include path:
    /openfhe-rs/crate_usage/target/debug/build/openfhe-54143b84db2888a8/out/cxxbridge/include
    /openfhe-rs/crate_usage/target/debug/build/openfhe-54143b84db2888a8/out/cxxbridge/crate

  error occurred: Command "c++" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-gdwarf-4" "-fno-omit-frame-pointer" "-m64" "-I" "/openfhe-rs/crate_usage/target/debug/build/openfhe-54143b84db2888a8/out/cxxbridge/include" "-I" "/openfhe-rs/crate_usage/target/debug/build/openfhe-54143b84db2888a8/out/cxxbridge/crate" "-I" "/usr/local/include/openfhe" "-I" "/usr/local/include/openfhe/third-party/include" "-I" "/usr/local/include/openfhe/core" "-I" "/usr/local/include/openfhe/pke" "-I" "/usr/local/include/openfhe/binfhe" "-I" "./openfhe-development/install/include" "-I" "./openfhe-development/install/include/openfhe" "-I" "./openfhe-development/install/include/openfhe/third-party/include" "-I" "./openfhe-development/install/include/openfhe/core" "-I" "./openfhe-development/install/include/openfhe/pke" "-I" "./openfhe-development/install/include/openfhe/binfhe" "-Wall" "-Wextra" "-std=c++17" "-Wall" "-Werror" "-O3" "-fopenmp" "-Wno-parentheses" "-Wno-unused-parameter" "-Wno-missing-field-initializers" "-Wno-unused-function" "-o" "/openfhe-rs/crate_usage/target/debug/build/openfhe-54143b84db2888a8/out/75f31f28ec7a553a-lib.rs.o" "-c" "/openfhe-rs/crate_usage/target/debug/build/openfhe-54143b84db2888a8/out/cxxbridge/sources/openfhe/src/lib.rs.cc" with args c++ did not execute successfully (status code exit status: 1).

Do you know what might be the problem? Thanks in advance!

HaroldGin931 commented 5 days ago

@JacomoJ

I am not sure about your issue, can you provide me the setting of your docker engine and you laptops' chip arch? If using an M1 Mac, ensure Rosetta 2 is enabled to support x86_64 emulation Here is how I use this docker file, I hope it will help you.

  1. build the docker images docker build -t openfhe-rs -f .devcontainer/Dockerfile .
  2. Run the docker container docker run -it --rm --platform linux/amd64 -v $(pwd):/workspace -w /workspace openfhe-rs bash

The repo which commitment is"445bc396d77fc838e1c599b1fc4d2badd71fa931" is working well on my M1 chip, you can find it in the commit history.

JacomoJ commented 2 days ago

@HaroldGin931 Thanks for the tips, unfortunately it does not work. I have an M1 Pro chip, and the docker has been configured with the following:

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false
}

I tried to use the same commit with the same commands, still the crate crate_usage won't compile.

Btw, I saw that you are doing some cool stuff, if you want you can add me on discord by searching jacomoj and we can have some discussions about crypto.