Skip to content

Commit 1798576

Browse files
committed
create a Dockerfile to build libjson-rpc-cpp n Linux/Debian
1 parent c976c46 commit 1798576

File tree

3 files changed

+37
-193
lines changed

3 files changed

+37
-193
lines changed

docker/Dockerfile

Lines changed: 32 additions & 188 deletions
Original file line numberDiff line numberDiff line change
@@ -1,210 +1,54 @@
1-
# THIS DOCKERFILE TRIES TO COMPILE CURL, LIBMICROHTTPD, JSONCPP, ARGTABLE AND LIBJSON-RPC-CPP FOR ANDROID
1+
# THIS DOCKERFILE DOWNLOADS AND COMPILES CURL, LIBMICROHTTPD, JSONCPP, ARGTABLE AND LIBJSON-RPC-CPP FOR LINUX/DEBIAN
2+
3+
# 2015, author: Péricles Lopes Machado (gogo40) <[email protected]>
24
# Based on Victor Laskin Dockerfile (http://vitiy.info/dockerfile-example-to-compile-libcurl-for-android-inside-docker-container/)
35

46
FROM debian:sid
57

68
MAINTAINER Péricles Lopes Machado <[email protected]>
79

8-
ENV ANDROID_SDK_PACKAGE android-sdk_r24.2-linux.tgz
9-
ENV ANDROID_NDK_PACKAGE android-ndk-r10e-linux-x86_64.bin
10+
# Create output directories
11+
12+
# Directory to export generated files
13+
RUN mkdir /output
14+
15+
# Directory with generated files
16+
RUN mkdir /build && mkdir /build/include
1017

1118
# Install compilation tools
1219

13-
RUN apt-get update && apt-get install -y \
14-
automake \
15-
build-essential \
20+
RUN apt-get update
21+
22+
RUN apt-get install -y \
1623
wget \
17-
p7zip-full \
18-
bash \
24+
build-essential \
1925
cmake \
20-
git \
21-
libjsonrpccpp-dev \
22-
libjsonrpccpp-tools
26+
libjsoncpp-dev \
27+
libargtable2-dev \
28+
libcurl4-openssl-dev \
29+
libmicrohttpd-dev \
30+
git
2331

32+
# Clone and build libjson-rpc-cpp
2433

25-
# Download SDK / NDK
34+
RUN git clone https://github.com/cinemast/libjson-rpc-cpp.git
2635

27-
RUN mkdir /Android && cd Android && mkdir output
28-
WORKDIR /Android
29-
30-
RUN wget http://dl.google.com/android/$ANDROID_SDK_PACKAGE
31-
RUN wget http://dl.google.com/android/ndk/$ANDROID_NDK_PACKAGE
32-
33-
# Extracting ndk/sdk
36+
RUN cd /libjson-rpc-cpp && \
37+
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=ON \
38+
/libjson-rpc-cpp
3439

35-
RUN tar -xvzf $ANDROID_SDK_PACKAGE && \
36-
chmod a+x $ANDROID_NDK_PACKAGE && \
37-
7z x $ANDROID_NDK_PACKAGE
40+
RUN cd /libjson-rpc-cpp && \
41+
make -j $(nproc) && \
42+
make install
3843

39-
# Set ENV variables
40-
41-
ENV ANDROID_HOME /Android/android-sdk-linux
42-
ENV NDK_ROOT /Android/android-ndk-r10e
43-
44-
ENV PATH $PATH:$ANDROID_HOME/tools
45-
ENV PATH $PATH:$ANDROID_HOME/platform-tools
46-
47-
# Make stand alone toolchain (Modify platform / arch here)
48-
49-
RUN mkdir=toolchain-arm && \
50-
bash $NDK_ROOT/build/tools/make-standalone-toolchain.sh \
51-
--verbose --platform=android-14 --install-dir=toolchain-arm \
52-
--arch=arm --toolchain=arm-linux-androideabi-4.9 --system=linux-x86_64
53-
54-
ENV TOOLCHAIN /Android/toolchain-arm
55-
ENV SYSROOT $TOOLCHAIN/sysroot
56-
ENV PATH $PATH:$TOOLCHAIN/bin:$SYSROOT/usr/local/bin
57-
58-
# Configure toolchain path
59-
60-
ENV ARCH armv7
61-
62-
ENV CROSS_COMPILE arm-linux-androideabi
63-
ENV CC arm-linux-androideabi-gcc
64-
ENV CXX arm-linux-androideabi-g++
65-
ENV AR arm-linux-androideabi-ar
66-
ENV AS arm-linux-androideabi-as
67-
ENV LD arm-linux-androideabi-ld
68-
ENV RANLIB arm-linux-androideabi-ranlib
69-
ENV NM arm-linux-androideabi-nm
70-
ENV STRIP arm-linux-androideabi-strip
71-
ENV CHOST arm-linux-androideabi
72-
73-
ENV CPPFLAGS -std=c++11
74-
75-
# Download and extract curl
76-
77-
ENV CFLAGS \
78-
-v -DANDROID --sysroot=$SYSROOT -mandroid -march=$ARCH -mfloat-abi=softfp -mfpu=vfp -mthumb
79-
80-
ENV CPPFLAGS $CPPFLAGS $CFLAGS \
81-
-Wno-psabi -march=armv7-a \
82-
-mfloat-abi=softfp -mfpu=vfp -ffunction-sections \
83-
-funwind-tables -fstack-protector -fno-short-enums \
84-
-DANDROID -Wa,--noexecstack -fno-builtin-memmove \
85-
-std=gnu++0x -O2 -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -mthumb -std=c++1y -Wall -Wno-psabi -W -D_REENTRANT -fPIE
86-
87-
ENV LDFLAGS -L${TOOLCHAIN}/include
88-
89-
RUN wget http://curl.haxx.se/download/curl-7.38.0.tar.gz && \
90-
tar -xzf curl-7.38.0.tar.gz
91-
RUN cd curl-7.38.0 && ./configure --host=arm-linux-androideabi \
92-
--enable-shared --disable-static \
93-
--disable-dependency-tracking \
94-
--with-zlib=/Android/zlib --without-ca-bundle --without-ca-path \
95-
--enable-ipv6 --disable-ftp --disable-file --disable-ldap \
96-
--disable-ldaps --disable-rtsp --disable-proxy --disable-dict \
97-
--disable-telnet --disable-tftp --disable-pop3 --disable-imap \
98-
--disable-smtp --disable-gopher --disable-sspi --disable-manual \
99-
--target=arm-linux-androideabi --build=x86_64-unknown-linux-gnu
100-
101-
# Make curl
102-
103-
RUN cd curl-7.38.0 && \
104-
make \
105-
CC=arm-linux-androideabi-gcc \
106-
CXX=arm-linux-androideabi-g++ && \
107-
ls lib/.libs/ && \
108-
cp lib/.libs/libcurl.so /Android/output && \
109-
ls -hs /Android/output && \
110-
mkdir /output
111-
112-
#clone android-cmake-toolchain
113-
RUN git clone https://github.com/taka-no-me/android-cmake.git
114-
115-
#clone and build jsoncpp project
116-
RUN git clone https://github.com/gogo40/jsoncpp.git
117-
118-
RUN mkdir jsoncpp-dev && \
119-
cd jsoncpp-dev && \
120-
cmake -DCMAKE_TOOLCHAIN_FILE=/Android/android-cmake/android.toolchain.cmake \
121-
-DANDROID_NDK=$NDK_ROOT \
122-
-DCMAKE_BUILD_TYPE=Release \
123-
-DANDROID_ABI="armeabi-v7a" \
124-
-DANDROID_NATIVE_API_LEVEL=14 \
125-
-DJSONCPP_WITH_TESTS=NO \
126-
-DBUILD_STATIC_LIBS=OFF -DBUILD_SHARED_LIBS=ON \
127-
/Android/jsoncpp && \
128-
make \
129-
CC=arm-linux-androideabi-gcc \
130-
CXX=arm-linux-androideabi-g++ && \
131-
ls
132-
133-
134-
#get and build argtable
135-
RUN wget http://prdownloads.sourceforge.net/argtable/argtable2-13.tar.gz && \
136-
tar -xzf argtable2-13.tar.gz
137-
138-
RUN mkdir argtable-dev && \
139-
cd argtable-dev && \
140-
cmake -DCMAKE_TOOLCHAIN_FILE=/Android/android-cmake/android.toolchain.cmake \
141-
-DANDROID_NDK=$NDK_ROOT \
142-
-DCMAKE_BUILD_TYPE=Release \
143-
-DANDROID_ABI="armeabi-v7a" \
144-
-DANDROID_NATIVE_API_LEVEL=14 \
145-
/Android/argtable2-13 && \
146-
make \
147-
CC=arm-linux-androideabi-gcc \
148-
CXX=arm-linux-androideabi-g++ && \
149-
ls
150-
151-
#get and build libmicrohttpd
152-
RUN wget http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.42.tar.gz && \
153-
tar -xzf libmicrohttpd-0.9.42.tar.gz
154-
155-
RUN cd libmicrohttpd-0.9.42 && \
156-
./configure --host=arm-linux-androideabi \
157-
--enable-shared --disable-static \
158-
--disable-dependency-tracking \
159-
--target=arm-linux-androideabi \
160-
--build=x86_64-unknown-linux-gnu || cat config.log && \
161-
make \
162-
CC=arm-linux-androideabi-gcc \
163-
CXX=arm-linux-androideabi-g++ && \
164-
ls
165-
166-
167-
RUN cp /Android/jsoncpp-dev/src/lib_json/libjsoncpp.so /Android/output
168-
RUN cp /Android/argtable-dev/src/libargtable2.a /Android/output
169-
RUN cp /Android/libmicrohttpd-0.9.42/src/microhttpd/.libs/libmicrohttpd.so /Android/output
170-
171-
#get and build libjson-rpc-cpp-android
172-
RUN git clone https://github.com/cinemast/libjson-rpc-cpp.git
44+
# Copy to output generated files
17345

174-
RUN cd /Android/libjson-rpc-cpp && \
175-
cmake -DCMAKE_TOOLCHAIN_FILE=/Android/android-cmake/android.toolchain.cmake \
176-
-DANDROID_NDK=$NDK_ROOT \
177-
-DCMAKE_BUILD_TYPE=Release \
178-
-DANDROID_ABI="armeabi-v7a" \
179-
-DANDROID_NATIVE_API_LEVEL=14 \
180-
-DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=ON \
181-
-DCURL_INCLUDE_DIR=/Android/curl-7.38.0/include \
182-
-DCURL_LIBRARY=/Android/curl-7.38.0/lib/.libs/libcurl.so \
183-
-DARGTABLE_INCLUDE_DIR=/Android/argtable2-13/src \
184-
-DARGTABLE_LIBRARY=/Android/argtable-dev/src/libargtable2.a \
185-
-DJSONCPP_INCLUDE_DIR=/Android/jsoncpp/include \
186-
-DJSONCPP_LIBRARY=/Android/jsoncpp-dev/src/lib_json/libjsoncpp.so \
187-
-DMHD_INCLUDE_DIR=/Android/libmicrohttpd-0.9.42/src/include \
188-
-DMHD_LIBRARY=/Android/libmicrohttpd-0.9.42/src/microhttpd/.libs/libmicrohttpd.so \
189-
/Android/libjson-rpc-cpp
190-
191-
RUN \
192-
ls /Android/argtable2-13/src && \
193-
cp -r /Android/curl-7.38.0/include/curl /Android/libjson-rpc-cpp/src && \
194-
cd /Android/libjson-rpc-cpp && \
195-
make \
196-
CC=arm-linux-androideabi-gcc \
197-
CXX=arm-linux-androideabi-g++
198-
199-
RUN cp /Android/libjson-rpc-cpp/lib/*.so /Android/output
200-
RUN cp -r /Android/argtable2-13 /Android/output
201-
RUN cp -r /Android/libmicrohttpd-0.9.42 /Android/output
202-
RUN cp -r /Android/jsoncpp /Android/output
203-
RUN cp -r /Android/curl-7.38.0 /Android/output
204-
RUN cp -r /Android/libjson-rpc-cpp /Android/output
46+
RUN cp -r /libjson-rpc-cpp/lib /build
47+
RUN cp -r /usr/local/include/jsonrpccpp /build/include/jsonrpccpp
20548

20649
# To get the results run container with output folder
20750
# Example: docker run -v HOSTFOLDER:/output --rm=true IMAGENAME
20851

209-
ENTRYPOINT cp -r /Android/output/* /output
52+
ENTRYPOINT cp -r /build/* /output
53+
21054

docker/build_android_libs.sh

Lines changed: 0 additions & 5 deletions
This file was deleted.

docker/build_linux_debian_libs.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
3+
docker build -t debian/libjson-rpc-cpp .
4+
docker run -v $PWD/output:/output --rm=true debian/libjson-rpc-cpp
5+

0 commit comments

Comments
 (0)