|
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]> |
2 | 4 | # Based on Victor Laskin Dockerfile (http://vitiy.info/dockerfile-example-to-compile-libcurl-for-android-inside-docker-container/)
|
3 | 5 |
|
4 | 6 | FROM debian:sid
|
5 | 7 |
|
6 | 8 | MAINTAINER Péricles Lopes Machado < [email protected]>
|
7 | 9 |
|
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 |
10 | 17 |
|
11 | 18 | # Install compilation tools
|
12 | 19 |
|
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 \ |
16 | 23 | wget \
|
17 |
| -p7zip-full \ |
18 |
| -bash \ |
| 24 | +build-essential \ |
19 | 25 | cmake \
|
20 |
| -git \ |
21 |
| -libjsonrpccpp-dev \ |
22 |
| -libjsonrpccpp-tools |
| 26 | +libjsoncpp-dev \ |
| 27 | +libargtable2-dev \ |
| 28 | +libcurl4-openssl-dev \ |
| 29 | +libmicrohttpd-dev \ |
| 30 | +git |
23 | 31 |
|
| 32 | +# Clone and build libjson-rpc-cpp |
24 | 33 |
|
25 |
| -# Download SDK / NDK |
| 34 | +RUN git clone https://github.com/cinemast/libjson-rpc-cpp.git |
26 | 35 |
|
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 |
34 | 39 |
|
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 |
38 | 43 |
|
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 |
173 | 45 |
|
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 |
205 | 48 |
|
206 | 49 | # To get the results run container with output folder
|
207 | 50 | # Example: docker run -v HOSTFOLDER:/output --rm=true IMAGENAME
|
208 | 51 |
|
209 |
| -ENTRYPOINT cp -r /Android/output/* /output |
| 52 | +ENTRYPOINT cp -r /build/* /output |
| 53 | + |
210 | 54 |
|
0 commit comments