-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDockerfile
More file actions
190 lines (138 loc) · 6.9 KB
/
Copy pathDockerfile
File metadata and controls
190 lines (138 loc) · 6.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# syntax=docker/dockerfile:1
FROM ubuntu:latest AS base
LABEL authors="Isaac Weingarten, Yehuda Goldshtein"
ENV ANDROID_TARGET_ABI_ARMV8=arm64-v8a
ENV VCPKG_TARGET_PLATFORM_ARMV8=arm64-android
ENV ANDROID_TARGET_ABI_ARMV7=armeabi-v7a
ENV VCPKG_TARGET_PLATFORM_ARMV7=arm-neon-android
ENV ANDROID_TARGET_ABI_AMD64=x86_64
ENV VCPKG_TARGET_PLATFORM_AMD64=x64-android
ENV DOCKER_DEFAULT_PLATFORM=linux/amd64
ARG CONF_DEBUG=false
RUN apt search openjdk
RUN apt update && \
apt upgrade -y
ARG DEBIAN_FRONTEND=noninteractive
#set video max resolution values
ARG MAX_RX_WIDTH=3840
ARG MAX_RX_HEIGHT=2160
RUN apt -y --no-install-recommends install git g++ wget curl zip vim pkg-config tar cmake unzip ca-certificates
RUN apt install -y git gcc build-essential make openjdk-11-jdk dos2unix
RUN apt install -y swig tzdata automake autoconf libtool rsync pv
ARG TZ=New_York
ENV TZ=${TZ}
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime
RUN dpkg-reconfigure --frontend noninteractive tzdata
RUN apt clean
FROM base AS builder
ENV ANDROID_NDK_VERSION=r27c
ENV ANDROID_NDK_ROOT=/pjsip/android-ndk-${ANDROID_NDK_VERSION}
ENV ANDROID_NDK_HOME=${ANDROID_NDK_ROOT}
ENV ANDROID_TARGET_API=30
ENV GCC_VERSION=11.4
ARG ANDROID_NDK_PLATFORM=android-30
ENV APP_PLATFORM=${ANDROID_NDK_PLATFORM}
ENV WORK_PATH=/pjsip/openssl_for_android
ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64
RUN java -version
RUN swig -version
WORKDIR /pjsip
RUN git clone https://github.com/pjsip/pjproject.git
WORKDIR /pjsip/pjproject
RUN mv user.mak.sample user.mak && \
echo >> user.mak && \
echo 'export CFLAGS += -g' >> user.mak
# to run other vesions of pjsip use the tag 2.15.1 or master
ARG PJSIP_VERSION=
#RUN git checkout ${PJSIP_VERSION}
RUN git fetch --tags
RUN if [ -z "$PJSIP_VERSION" ]; then \
echo "pjsip using tags $(git describe --tags $(git rev-list --tags --max-count=1))" \
echo "pjsip using tags $(git describe --tags $(git rev-list --tags --max-count=1))" | tee -a /pjsip/build_pjsip.log \
git checkout $(git describe --tags $(git rev-list --tags --max-count=1)); \
else \
echo "pjsip using PJSIP_VERSION=${PJSIP_VERSION}" \
echo "pjsip using PJSIP_VERSION=${PJSIP_VERSION}" | tee -a /pjsip/build_pjsip.log\
git checkout "$PJSIP_VERSION"; \
fi
WORKDIR /pjsip
# Modify MAX_RX_WIDTH and MAX_RX_HEIGHT in openh264.cpp and and_vid_mediacodec.cpp
RUN sed -i "s/#define MAX_RX_WIDTH\s\+[0-9]\+/#define MAX_RX_WIDTH ${MAX_RX_WIDTH}/" /pjsip/pjproject/pjmedia/src/pjmedia-codec/openh264.cpp && \
sed -i "s/#define MAX_RX_HEIGHT\s\+[0-9]\+/#define MAX_RX_HEIGHT ${MAX_RX_HEIGHT}/" /pjsip/pjproject/pjmedia/src/pjmedia-codec/openh264.cpp && \
sed -i "s/#define MAX_RX_WIDTH\s\+[0-9]\+/#define MAX_RX_WIDTH ${MAX_RX_WIDTH}/" /pjsip/pjproject/pjmedia/src/pjmedia-codec/and_vid_mediacodec.cpp && \
sed -i "s/#define MAX_RX_HEIGHT\s\+[0-9]\+/#define MAX_RX_HEIGHT ${MAX_RX_HEIGHT}/" /pjsip/pjproject/pjmedia/src/pjmedia-codec/and_vid_mediacodec.cpp
# Log the results to verify the changes
RUN echo "Verifying changes in openh264.cpp:" && \
grep '#define MAX_RX_WIDTH' /pjsip/pjproject/pjmedia/src/pjmedia-codec/openh264.cpp && \
grep '#define MAX_RX_HEIGHT' /pjsip/pjproject/pjmedia/src/pjmedia-codec/openh264.cpp && \
echo "Verifying changes in and_vid_mediacodec.cpp:" && \
grep '#define MAX_RX_WIDTH' /pjsip/pjproject/pjmedia/src/pjmedia-codec/and_vid_mediacodec.cpp && \
grep '#define MAX_RX_HEIGHT' /pjsip/pjproject/pjmedia/src/pjmedia-codec/and_vid_mediacodec.cpp
ADD https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip .
RUN unzip android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \
rm android-ndk-${ANDROID_NDK_VERSION}-linux.zip
RUN chmod -R +x ${ANDROID_NDK_ROOT}
ENV PATH=$PATH:$ANDROID_NDK_ROOT
ENV PATH="${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}"
#installing vcpkg
WORKDIR /
RUN git clone https://github.com/microsoft/vcpkg.git
WORKDIR /vcpkg
RUN git fetch --tags
RUN echo "latest tag $(git describe --tags $(git rev-list --tags --max-count=1))"
RUN git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
RUN ./bootstrap-vcpkg.sh
ENV VCPKG_ROOT=/vcpkg
ENV VCPKG_INSTALLED_DIR=${VCPKG_ROOT}/installed
ENV PATH="${VCPKG_ROOT}:${PATH}"
WORKDIR /pjsip/pjproject
COPY ./vcpkg.json .
RUN dos2unix ./vcpkg.json
# run it only if the baseline is not created yet
#RUN #vcpkg x-update-baseline --add-initial-baseline
RUN vcpkg version
RUN ndk-build --version
# Checkout the specific tag
#RUN git checkout tags/${PJ_SIP_VERSION} -b stable-${PJ_SIP_VERSION}
COPY config_site.h /pjsip/pjproject/pjlib/include/pj/.
RUN dos2unix /pjsip/pjproject/pjlib/include/pj/config_site.h
RUN chmod +x /pjsip/pjproject/pjlib/include/pj/config_site.h
COPY build_pjsip.sh /pjsip/pjproject
RUN dos2unix /pjsip/pjproject/build_pjsip.sh
RUN chmod +x /pjsip/pjproject/build_pjsip.sh
FROM builder AS build-armv8
ENV TARGET_ABI=${ANDROID_TARGET_ABI_ARMV8}
WORKDIR /pjsip/pjproject
RUN vcpkg install --triplet ${VCPKG_TARGET_PLATFORM_ARMV8}
ENV CFLAGS=
RUN ./build_pjsip.sh ${ANDROID_TARGET_ABI_ARMV8} ${VCPKG_TARGET_PLATFORM_ARMV8}
FROM builder AS build-armv7
ENV TARGET_ABI=${ANDROID_TARGET_ABI_ARMV7}
WORKDIR /pjsip/pjproject
RUN vcpkg install --triplet ${VCPKG_TARGET_PLATFORM_ARMV7}
ENV CFLAGS=
RUN ./build_pjsip.sh ${ANDROID_TARGET_ABI_ARMV7} ${VCPKG_TARGET_PLATFORM_ARMV7}
FROM builder AS build-amd64
ENV TARGET_ABI=${ANDROID_TARGET_ABI_AMD64}
WORKDIR /pjsip/pjproject
RUN vcpkg install --triplet ${VCPKG_TARGET_PLATFORM_AMD64}
ENV CFLAGS=
RUN ./build_pjsip.sh ${ANDROID_TARGET_ABI_AMD64} ${VCPKG_TARGET_PLATFORM_AMD64}
FROM base AS final
# from=build-armv8 copy the whole sample app and from the other only the jniLibs
COPY --from=build-armv8 /pjsip/pjproject/pjsip-apps/src/swig/java /pjsip/releases/java/
COPY --from=build-armv8 /pjsip/pjproject/ /pjsip/releases/pjproject/${ANDROID_TARGET_ABI_ARMV8}
COPY --from=build-armv8 /pjsip/build_pjsip.log /pjsip/releases/build_pjsip_${ANDROID_TARGET_ABI_ARMV8}.log
COPY --from=build-armv7 /pjsip/pjproject/pjsip-apps/src/swig/java/android/pjsua2/src/main/jniLibs/ /pjsip/releases/java/android/pjsua2/src/main/jniLibs/
COPY --from=build-armv7 /pjsip/pjproject/ /pjsip/releases/pjproject/${ANDROID_TARGET_ABI_ARMV7}
COPY --from=build-armv7 /pjsip/build_pjsip.log /pjsip/releases/build_pjsip_${ANDROID_TARGET_ABI_ARMV7}.log
COPY --from=build-amd64 /pjsip/pjproject/pjsip-apps/src/swig/java/android/pjsua2/src/main/jniLibs/ /pjsip/releases/java/android/pjsua2/src/main/jniLibs/
COPY --from=build-amd64 /pjsip/pjproject/ /pjsip/releases/pjproject/${ANDROID_TARGET_ABI_AMD64}
COPY --from=build-amd64 /pjsip/build_pjsip.log /pjsip/releases/build_pjsip_${ANDROID_TARGET_ABI_AMD64}.log
WORKDIR /pjsip
COPY ./copy_results.sh /pjsip/.
RUN dos2unix /pjsip/copy_results.sh
RUN chmod +x ./copy_results.sh
ENV CONF_DEBUG=${CONF_DEBUG} \
PJSIP_VERSION=${PJSIP_VERSION}
ENTRYPOINT [ "/bin/sh", "-c", "./copy_results.sh"]