78 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
| FROM ubuntu:xenial
 | |
| LABEL maintainer="Parity Technologies <devops@parity.io>"
 | |
| 
 | |
| RUN apt-get update && \
 | |
|     apt-get install -yq sudo curl file build-essential wget git g++ cmake pkg-config bison flex \
 | |
|                         unzip lib32stdc++6 lib32z1 python autotools-dev automake autoconf libtool \
 | |
|                         gperf xsltproc docbook-xsl
 | |
| 
 | |
| # Rust & Cargo
 | |
| RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
 | |
| ENV PATH /root/.cargo/bin:$PATH
 | |
| RUN rustup toolchain install stable
 | |
| RUN rustup target add --toolchain stable arm-linux-androideabi
 | |
| RUN rustup target add --toolchain stable armv7-linux-androideabi
 | |
| 
 | |
| # Android NDK and toolchain
 | |
| RUN cd /usr/local && \
 | |
|     wget -q https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip && \
 | |
|     unzip -q android-ndk-r16b-linux-x86_64.zip && \
 | |
|     rm android-ndk-r16b-linux-x86_64.zip
 | |
| ENV NDK_HOME /usr/local/android-ndk-r16b
 | |
| RUN /usr/local/android-ndk-r16b/build/tools/make-standalone-toolchain.sh \
 | |
|     --arch=arm --install-dir=/opt/ndk-standalone --stl=libc++ --platform=android-26
 | |
| ENV PATH $PATH:/opt/ndk-standalone/bin
 | |
| 
 | |
| # Compiling OpenSSL for Android
 | |
| RUN cd /root && \
 | |
|     git clone git://git.openssl.org/openssl.git && \
 | |
|     cd openssl && \
 | |
|     git checkout OpenSSL_1_1_0-stable
 | |
| ENV CROSS_SYSROOT /opt/ndk-standalone/sysroot
 | |
| RUN cd /root/openssl && \
 | |
|     ./Configure android-armeabi --cross-compile-prefix=arm-linux-androideabi- \
 | |
|     -static no-stdio no-ui \
 | |
|     -I/usr/local/android-ndk-r16b/sysroot/usr/include \
 | |
|     -I/usr/local/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi \
 | |
|     -L/usr/local/android-ndk-r16b/sysroot/usr/lib \
 | |
|     --prefix=/opt/ndk-standalone/sysroot/usr
 | |
| RUN cd /root/openssl && \
 | |
|     make build_libs && \
 | |
|     make install_dev
 | |
| RUN rm -rf /root/openssl
 | |
| 
 | |
| # Compiling libudev for Android
 | |
| # This is the most hacky part of the process, as we need to apply a patch and pass specific
 | |
| # options that the compiler environment doesn't define.
 | |
| RUN cd /root && \
 | |
|     git clone https://github.com/gentoo/eudev.git
 | |
| ADD libudev.patch /root
 | |
| RUN cd /root/eudev && \
 | |
|     git checkout 83d918449f22720d84a341a05e24b6d109e6d3ae && \
 | |
|     ./autogen.sh && \
 | |
|     ./configure --disable-introspection --disable-programs --disable-hwdb \
 | |
|                 --host=arm-linux-androideabi --prefix=/opt/ndk-standalone/sysroot/usr/ \
 | |
|                 --enable-shared=false CC=arm-linux-androideabi-clang \
 | |
|                 CFLAGS="-D LINE_MAX=2048 -D RLIMIT_NLIMITS=15 -D IPTOS_LOWCOST=2 -std=gnu99" \
 | |
|                 CXX=arm-linux-androideabi-clang++ && \
 | |
|     git apply - < /root/libudev.patch && \
 | |
|     make && \
 | |
|     make install
 | |
| RUN rm -rf /root/eudev
 | |
| RUN rm /root/libudev.patch
 | |
| 
 | |
| # Rust-related configuration
 | |
| ADD cargo-config.toml /root/.cargo/config
 | |
| ENV ARM_LINUX_ANDROIDEABI_OPENSSL_DIR /opt/ndk-standalone/sysroot/usr
 | |
| ENV ARMV7_LINUX_ANDROIDEABI_OPENSSL_DIR /opt/ndk-standalone/sysroot/usr
 | |
| ENV CC_arm_linux_androideabi arm-linux-androideabi-clang
 | |
| ENV CC_armv7_linux_androideabi arm-linux-androideabi-clang
 | |
| ENV CXX_arm_linux_androideabi arm-linux-androideabi-clang++
 | |
| ENV CXX_armv7_linux_androideabi arm-linux-androideabi-clang++
 | |
| ENV AR_arm_linux_androideabi arm-linux-androideabi-ar
 | |
| ENV AR_armv7_linux_androideabi arm-linux-androideabi-ar
 | |
| ENV CFLAGS_arm_linux_androideabi -std=gnu11 -fPIC -D OS_ANDROID
 | |
| ENV CFLAGS_armv7_linux_androideabi -std=gnu11 -fPIC -D OS_ANDROID
 | |
| ENV CXXFLAGS_arm_linux_androideabi -std=gnu++11 -fPIC -fexceptions -frtti -static-libstdc++ -D OS_ANDROID
 | |
| ENV CXXFLAGS_armv7_linux_androideabi -std=gnu++11 -fPIC -fexceptions -frtti -static-libstdc++ -D OS_ANDROID
 |