80 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			3.6 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
 | 
						|
ENV CXXSTDLIB_arm_linux_androideabi ""
 | 
						|
ENV CXXSTDLIB_armv7_linux_androideabi ""
 |