- Shell script Select all
cd $HOME
mkdir -p dockcross
cd dockcross
cat >$HOME/dockcross/dockcross_ql_1.21 <<'HEREEOF'
# dockcross_ql_1.21
# docker build -f dockcross_ql_1.21 -t dockcross/linux-armv7/quantlib:1.21 .
# Build Quantlib libraries for armv7
ARG tag=latest
FROM dockcross/linux-armv7
ENV DEFAULT_DOCKCROSS_IMAGE dockcross/linux-armv7/quantlib:1.21
ENV CROSS_PREFIX /usr/xcc/armv7-unknown-linux-gnueabi/armv7-unknown-linux-gnueabi/sysroot/usr
LABEL Description="Provide a building environment dockcross/linux/armv7 for the QuantLib"
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential wget vim git
ENV boost_version=1.67.0
ENV boost_dir=boost_1_67_0
# Install boost dependencies
RUN echo 'Building boost and required packages ...'
RUN dpkg --add-architecture armhf \
&& apt-get update \
&& apt-get download libbz2-1.0:armhf libbz2-dev:armhf liblzma-dev:armhf \
&& dpkg-deb -x libbz2-1*armhf.deb ./x \
&& dpkg-deb -x libbz2-dev_*armhf.deb ./x \
&& dpkg-deb -x liblzma-dev_*armhf.deb ./x \
&& mv ./x/usr/lib/arm-linux-gnueabihf/* ${CROSS_PREFIX}/lib/ \
&& mv ./x/usr/bin/* ${CROSS_PREFIX}/bin/ \
&& mv ./x/usr/include/* ${CROSS_PREFIX}/include/ \
&& mv ./x/usr/share/* ${CROSS_PREFIX}/share/ \
&& mv ./x/lib/arm-linux-gnueabihf/* ${CROSS_PREFIX}/lib/ \
&& rm -fr ./x *.deb && ldconfig
RUN wget https://sourceforge.net/projects/libpng/files/zlib/1.2.11/zlib-1.2.11.tar.gz/download -O zlib-1.2.11.tar.gz \
&& tar xfz zlib-1.2.11.tar.gz \
&& rm zlib-1.2.11.tar.gz \
&& cd zlib-1.2.11 \
&& ./configure --prefix=${CROSS_PREFIX} && make && make install \
&& cd .. && rm -rf zlib-1.2.11 && ldconfig
# Build boost
RUN wget https://dl.bintray.com/boostorg/release/${boost_version}/source/${boost_dir}.tar.gz \
&& tar xfz ${boost_dir}.tar.gz \
&& rm ${boost_dir}.tar.gz \
&& cd ${boost_dir} \
&& ./bootstrap.sh --with-toolset=gcc --prefix=${CROSS_PREFIX} \
&& touch user-config.jam \
&& echo "using gcc : armv7 : ${CXX} ;" > user-config.jam \
&& echo "using mpi ;" >> user-config.jam \
&& ./b2 --toolset=gcc-armv7 --address-model=32 --architecture=arm --user-config=./user-config.jam --without-python --prefix=${CROSS_PREFIX} -j 4 link=shared runtime-link=shared install \
&& cd .. && rm -rf ${boost_dir} && ldconfig
# Build Quantlib C++
RUN echo 'Building Quantlib C++ ...'
ENV quantlib_version=1.21
RUN wget https://dl.bintray.com/quantlib/releases/QuantLib-${quantlib_version}.tar.gz \
&& tar xfz QuantLib-${quantlib_version}.tar.gz \
&& rm QuantLib-${quantlib_version}.tar.gz \
&& cd QuantLib-${quantlib_version} \
&& ./configure --host=x86_64-linux-gnu --target=armv7-unknown-linux-gnueabi --with-boost-include=${CROSS_PREFIX}/include/boost --with-boost-lib=${CROSS_PREFIX}/lib --prefix=${CROSS_PREFIX} --disable-static CXXFLAGS=-O3 \
&& make -j 4 && make install \
&& make clean \
&& cd .. && ldconfig
HEREEOF
# build image
docker build -f dockcross_ql_1.21 -t dockcross/linux-armv7/quantlib:1.21 .
# Test dockcross compile
docker run --rm dockcross/linux-armv7/quantlib:1.21 > dockcross-quantlib-armv7
chmod +x dockcross-quantlib-armv7
./dockcross-quantlib-armv7 bash -c '$CXX -v'
# Copy example cpp file from image
docker run -v $PWD:/opt/mount --rm --entrypoint cp dockcross/linux-armv7/quantlib:1.21 /work/QuantLib-1.21/Examples/Bonds/Bonds.cpp /opt/mount/Bonds.cpp
# Use this command to copy whole directory recursively
# docker run -v $PWD:/opt/mount --rm --entrypoint cp dockcross/linux-armv7/quantlib:1.21 -r /work/QuantLib-1.21/Examples /opt/mount/QLExamples
# Compile and check binary
./dockcross-quantlib-armv7 bash -c '$CXX Bonds.cpp -lQuantLib -o Bonds -static'
file Bonds
# install qemu and run in host
sudo apt update
sudo apt install -y qemu-user
qemu-arm Bonds
# Or test run it in armv7 machine e.g. RaspberryPi 3B+
scp Bonds mypi3b:~/.
ssh mypi3b '~/Bonds'
No comments:
Post a Comment