1
+ FROM docker.io/ubuntu:22.04
2
+
3
+ ARG KDF_BRANCH=main
4
+ ENV KDF_DIR=/kdf
5
+ ENV FLUTTER_VERSION="3.22.3"
6
+ ENV FLUTTER_HOME="/home/komodo/.flutter-sdk"
7
+ ENV USER="komodo"
8
+ ENV USER_ID=1000
9
+ ENV PATH=$PATH:$FLUTTER_HOME/bin
10
+ ENV AR=/usr/bin/llvm-ar-16
11
+ ENV CC=/usr/bin/clang-16
12
+ ENV PATH="$HOME/.cargo/bin:$PATH"
13
+ ENV PATH=$PATH:/android-ndk/bin
14
+ ENV ANDROID_HOME=/opt/android-sdk-linux \
15
+ LANG=en_US.UTF-8 \
16
+ LC_ALL=en_US.UTF-8 \
17
+ LANGUAGE=en_US:en
18
+
19
+ # Libz is distributed in the android ndk, but for some unknown reason it is not
20
+ # found in the build process of some crates, so we explicit set the DEP_Z_ROOT
21
+ ENV CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=x86_64-linux-android-clang \
22
+ CARGO_TARGET_X86_64_LINUX_ANDROID_RUNNER="qemu-x86_64 -cpu qemu64,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt" \
23
+ CC_x86_64_linux_android=x86_64-linux-android-clang \
24
+ CXX_x86_64_linux_android=x86_64-linux-android-clang++ \
25
+ CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=armv7a-linux-androideabi21-clang \
26
+ CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_RUNNER=qemu-arm \
27
+ CC_armv7_linux_androideabi=armv7a-linux-androideabi21-clang \
28
+ CXX_armv7_linux_androideabi=armv7a-linux-androideabi21-clang++ \
29
+ CC_aarch64_linux_android=aarch64-linux-android21-clang \
30
+ CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=aarch64-linux-android21-clang \
31
+ CC_armv7_linux_androideabi=armv7a-linux-androideabi21-clang \
32
+ CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=armv7a-linux-androideabi21-clang \
33
+ DEP_Z_INCLUDE=/android-ndk/sysroot/usr/include/ \
34
+ OPENSSL_STATIC=1 \
35
+ OPENSSL_DIR=/openssl \
36
+ OPENSSL_INCLUDE_DIR=/openssl/include \
37
+ OPENSSL_LIB_DIR=/openssl/lib \
38
+ RUST_TEST_THREADS=1 \
39
+ HOME=/home/komodo/ \
40
+ TMPDIR=/tmp/ \
41
+ ANDROID_DATA=/ \
42
+ ANDROID_DNS_MODE=local \
43
+ ANDROID_ROOT=/system
44
+
45
+ ENV ANDROID_SDK_ROOT=$ANDROID_HOME \
46
+ PATH=${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/emulator
47
+
48
+ # comes from https://developer.android.com/studio/#command-tools
49
+ ENV ANDROID_SDK_TOOLS_VERSION=11076708
50
+
51
+ # https://developer.android.com/studio/releases/build-tools
52
+ ENV ANDROID_PLATFORM_VERSION=34
53
+ ENV ANDROID_BUILD_TOOLS_VERSION=34.0.0
54
+
55
+ # https://developer.android.com/ndk/downloads
56
+ ENV ANDROID_NDK_VERSION=26.3.11579264
57
+
58
+ RUN apt update && apt install -y sudo && \
59
+ useradd -u $USER_ID -m $USER && \
60
+ usermod -aG sudo $USER && \
61
+ echo "$USER ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
62
+
63
+ USER $USER
64
+
65
+ RUN sudo apt-get update -y && \
66
+ sudo apt-get install -y --no-install-recommends \
67
+ ca-certificates \
68
+ build-essential \
69
+ libssl-dev \
70
+ cmake \
71
+ llvm-dev \
72
+ libclang-dev \
73
+ lld \
74
+ gcc \
75
+ libc6-dev \
76
+ jq \
77
+ make \
78
+ pkg-config \
79
+ git \
80
+ automake \
81
+ libtool \
82
+ m4 \
83
+ autoconf \
84
+ make \
85
+ file \
86
+ curl \
87
+ wget \
88
+ gnupg \
89
+ software-properties-common \
90
+ lsb-release \
91
+ libudev-dev \
92
+ zip unzip \
93
+ nodejs npm \
94
+ binutils && \
95
+ sudo apt-get clean
96
+
97
+ RUN sudo ln -s /usr/bin/python3 /bin/python &&\
98
+ sudo curl --output llvm.sh https://apt.llvm.org/llvm.sh && \
99
+ sudo chmod +x llvm.sh && \
100
+ sudo ./llvm.sh 16 && \
101
+ sudo rm ./llvm.sh && \
102
+ sudo ln -s /usr/bin/clang-16 /usr/bin/clang && \
103
+ PROTOC_ZIP=protoc-25.3-linux-x86_64.zip && \
104
+ sudo curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v25.3/$PROTOC_ZIP && \
105
+ sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc && \
106
+ sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*' && \
107
+ sudo rm -f $PROTOC_ZIP && \
108
+ sudo mkdir $KDF_DIR && \
109
+ sudo chown -R $USER:$USER $KDF_DIR
110
+
111
+ RUN PATH="$HOME/.cargo/bin:$PATH" && \
112
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \
113
+ export PATH="$HOME/.cargo/bin:$PATH" && \
114
+ sudo chown -R $USER:$USER $HOME/.cargo && \
115
+ rustup toolchain install nightly-2023-06-01 --no-self-update --profile=minimal && \
116
+ rustup default nightly-2023-06-01 && \
117
+ rustup target add aarch64-linux-android && \
118
+ rustup target add armv7-linux-androideabi && \
119
+ rustup target add wasm32-unknown-unknown && \
120
+ sudo apt install -y python3 python3-pip git curl nodejs python3-venv sudo && \
121
+ git clone https://github.com/KomodoPlatform/komodo-defi-framework.git $KDF_DIR && \
122
+ cd $KDF_DIR && \
123
+ git fetch --all && \
124
+ git checkout origin/$KDF_BRANCH && \
125
+ if [ "$(uname -m)" = "x86_64" ]; then \
126
+ bash ./scripts/ci/android-ndk.sh x86 23; \
127
+ elif [ "$(uname -m)" = "aarch64" ]; then \
128
+ bash ./scripts/ci/android-ndk.sh arm64 23; \
129
+ else \
130
+ echo "Unsupported architecture: $(uname -m)" ; \
131
+ exit 1; \
132
+ fi
133
+
134
+ RUN set -e -o xtrace \
135
+ && cd /opt \
136
+ && sudo chown -R $USER:$USER /opt \
137
+ && sudo apt-get update \
138
+ && sudo apt-get install -y jq \
139
+ openjdk-17-jdk \
140
+ # For Linux build
141
+ clang cmake git \
142
+ ninja-build pkg-config \
143
+ libgtk-3-dev liblzma-dev \
144
+ libstdc++-12-dev \
145
+ xz-utils \
146
+ wget zip unzip git openssh-client curl bc software-properties-common build-essential \
147
+ ruby-full ruby-bundler libstdc++6 libpulse0 libglu1-mesa locales lcov \
148
+ libsqlite3-dev --no-install-recommends \
149
+ # for x86 emulators
150
+ libxtst6 libnss3-dev libnspr4 libxss1 libatk-bridge2.0-0 libgtk-3-0 libgdk-pixbuf2.0-0 \
151
+ && sudo rm -rf /var/lib/apt/lists/* \
152
+ && sudo sh -c 'echo "en_US.UTF-8 UTF-8" > /etc/locale.gen' \
153
+ && sudo locale-gen \
154
+ && sudo update-locale LANG=en_US.UTF-8 \
155
+ && wget -q https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS_VERSION}_latest.zip -O android-sdk-tools.zip \
156
+ && mkdir -p ${ANDROID_HOME}/cmdline-tools/ \
157
+ && unzip -q android-sdk-tools.zip -d ${ANDROID_HOME}/cmdline-tools/ \
158
+ && mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest \
159
+ && sudo chown -R $USER:$USER $ANDROID_HOME \
160
+ && rm android-sdk-tools.zip \
161
+ && yes | sdkmanager --licenses \
162
+ && sdkmanager platform-tools \
163
+ && git config --global user.email
"[email protected] " \
164
+ && git config --global user.name "Komodo Platform" \
165
+ && yes | sdkmanager \
166
+ "platforms;android-$ANDROID_PLATFORM_VERSION" \
167
+ "build-tools;$ANDROID_BUILD_TOOLS_VERSION"
168
+
169
+ RUN git clone https://github.com/flutter/flutter.git ${FLUTTER_HOME} \
170
+ && cd ${FLUTTER_HOME} \
171
+ && git fetch \
172
+ && git checkout tags/$FLUTTER_VERSION \
173
+ && flutter config --no-analytics \
174
+ && flutter precache \
175
+ && yes "y" | flutter doctor --android-licenses \
176
+ && flutter doctor \
177
+ && flutter update-packages
0 commit comments