Kenneth Bruen
3 years ago
16 changed files with 679 additions and 41 deletions
@ -1 +1,2 @@ |
|||||||
workspace.code-workspace |
workspace.code-workspace |
||||||
|
samples |
||||||
|
@ -0,0 +1,17 @@ |
|||||||
|
{ |
||||||
|
// Use IntelliSense to learn about possible attributes. |
||||||
|
// Hover to view descriptions of existing attributes. |
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 |
||||||
|
"version": "0.2.0", |
||||||
|
"configurations": [ |
||||||
|
{ |
||||||
|
"cwd": "${workspaceRoot}", |
||||||
|
"name": "Listen for rdebug-ide", |
||||||
|
"type": "Ruby", |
||||||
|
"request": "attach", |
||||||
|
"remoteHost": "127.0.0.1", |
||||||
|
"remotePort": "1234", |
||||||
|
"remoteWorkspaceRoot": "${workspaceRoot}" |
||||||
|
}, |
||||||
|
] |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
{ |
||||||
|
"files.exclude": { |
||||||
|
"alpine": true, |
||||||
|
"debian": true, |
||||||
|
"ubuntu": true |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
ARG ALPINE_VERSION |
||||||
|
FROM alpine:${ALPINE_VERSION} AS builder |
||||||
|
WORKDIR /tdlib |
||||||
|
RUN apk update && apk upgrade && apk add --update alpine-sdk linux-headers git zlib-dev openssl-dev gperf php cmake |
||||||
|
RUN git clone https://github.com/tdlib/td.git . |
||||||
|
ARG TDLIB_TAG |
||||||
|
ARG TDLIB_COMMIT |
||||||
|
RUN if [ "$TDLIB_TAG" ]; then \ |
||||||
|
git checkout "tags/${TDLIB_TAG}"; \ |
||||||
|
else \ |
||||||
|
git checkout "${TDLIB_COMMIT}"; \ |
||||||
|
fi |
||||||
|
RUN rm -rf build && mkdir build |
||||||
|
WORKDIR /tdlib/build |
||||||
|
RUN cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=../tdlib .. |
||||||
|
RUN cmake --build . --target prepare_cross_compiling |
||||||
|
WORKDIR /tdlib |
||||||
|
RUN php SplitSource.php |
||||||
|
WORKDIR /tdlib/build |
||||||
|
RUN cmake --build . --target install |
||||||
|
WORKDIR /tdlib |
||||||
|
RUN php SplitSource.php --undo |
||||||
|
|
||||||
|
FROM alpine:${ALPINE_VERSION} |
||||||
|
WORKDIR /tdlib |
||||||
|
COPY --from=builder /tdlib/tdlib /tdlib |
@ -0,0 +1,10 @@ |
|||||||
|
ARG ALPINE_VERSION |
||||||
|
ARG TDLIB_IMAGE |
||||||
|
FROM ${TDLIB_IMAGE} AS tdlib |
||||||
|
RUN mkdir /tdlib-so |
||||||
|
WORKDIR /tdlib-so |
||||||
|
RUN find /tdlib/lib -regex '.*\.so.*' -print0 | xargs -0 -I % cp -P % . |
||||||
|
|
||||||
|
FROM alpine:${ALPINE_VERSION} |
||||||
|
WORKDIR /tdlib-so |
||||||
|
COPY --from=tdlib /tdlib-so . |
@ -1,16 +1,117 @@ |
|||||||
#! /usr/bin/env sh |
#! /usr/bin/env sh |
||||||
|
|
||||||
if [ -z $ALPINE_VERSION ] |
# Parse arguments |
||||||
|
|
||||||
|
help () { |
||||||
|
echo 'build.sh -- Alpine image' |
||||||
|
echo |
||||||
|
echo ' -v --alpine $ALPINE_VERSION:' |
||||||
|
echo ' specify version of Alpine Docker image' |
||||||
|
echo ' -t --tag $TDLIB_TAG:' |
||||||
|
echo ' specify the tdlib repository tag' |
||||||
|
echo ' -c --commit $TDLIB_COMMIT:' |
||||||
|
echo ' specify the tdlib repository commit hash' |
||||||
|
exit 0 |
||||||
|
} |
||||||
|
|
||||||
|
unknown_param () { |
||||||
|
echo 'build.sh: Unknown parameter $1' |
||||||
|
exit 1 |
||||||
|
} |
||||||
|
|
||||||
|
while [ $# -gt 0 ] |
||||||
|
do |
||||||
|
|
||||||
|
param="$1" |
||||||
|
shift |
||||||
|
case "$param" in |
||||||
|
"-v") |
||||||
|
;& |
||||||
|
"--alpine") |
||||||
|
export ALPINE_VERSION=$1 |
||||||
|
echo "ALPINE_VERSION=$ALPINE_VERSION" |
||||||
|
shift |
||||||
|
;; |
||||||
|
"-h") |
||||||
|
;& |
||||||
|
"--help") |
||||||
|
help |
||||||
|
;; |
||||||
|
"-t") |
||||||
|
;& |
||||||
|
"--tag") |
||||||
|
export TDLIB_TAG=$1 |
||||||
|
echo "TDLIB_TAG=$TDLIB_TAG" |
||||||
|
shift |
||||||
|
;; |
||||||
|
"-c") |
||||||
|
;& |
||||||
|
"--commit") |
||||||
|
export TDLIB_COMMIT=$1 |
||||||
|
echo "TDLIB_COMMIT=$TDLIB_COMMIT" |
||||||
|
shift |
||||||
|
;; |
||||||
|
*) |
||||||
|
unknown_param "$param" |
||||||
|
;; |
||||||
|
esac |
||||||
|
done |
||||||
|
|
||||||
|
if [ -z "$ALPINE_VERSION" ] |
||||||
then |
then |
||||||
echo "Please specify a version by setting the ALPINE_VERSION env var" |
echo "build.sh: Please specify a version using -v" |
||||||
exit 1 |
exit 1 |
||||||
fi |
fi |
||||||
|
|
||||||
if [ $# -eq 1 ] |
ram=$(free -m | grep -oP '\d+' | head -n 1) |
||||||
|
if [ $ram -lt 3584 ] # 3.5 GB RAM = 3584 MB |
||||||
|
then |
||||||
|
dockerfile=Dockerfile-low-ram |
||||||
|
else |
||||||
|
dockerfile=Dockerfile |
||||||
|
fi |
||||||
|
|
||||||
|
if [ "$TDLIB_TAG" ] |
||||||
|
then |
||||||
|
if [ -z "$IMAGE_TAG" ] |
||||||
|
then |
||||||
|
export IMAGE_TAG="tdlib:$TDLIB_TAG-alpine-$ALPINE_VERSION" |
||||||
|
echo "IMAGE_TAG=$IMAGE_TAG" |
||||||
|
fi |
||||||
|
docker build \ |
||||||
|
-t "$IMAGE_TAG" \ |
||||||
|
--build-arg TDLIB_TAG \ |
||||||
|
--build-arg ALPINE_VERSION \ |
||||||
|
-f $dockerfile \ |
||||||
|
$(dirname $0) |
||||||
|
elif [ "$TDLIB_COMMIT" ] |
||||||
|
then |
||||||
|
if [ -z "$IMAGE_TAG" ] |
||||||
then |
then |
||||||
export TDLIB_VER="$1" |
export IMAGE_TAG="tdlib:$TDLIB_COMMIT-alpine-$ALPINE_VERSION" |
||||||
|
echo "IMAGE_TAG=$IMAGE_TAG" |
||||||
|
fi |
||||||
|
docker build \ |
||||||
|
-t "$IMAGE_TAG" \ |
||||||
|
--build-arg TDLIB_COMMIT \ |
||||||
|
--build-arg ALPINE_VERSION \ |
||||||
|
-f $dockerfile \ |
||||||
|
$(dirname $0) |
||||||
else |
else |
||||||
export TDLIB_VER="1.7.0" |
echo 'build.sh: no commit or tag supplied' |
||||||
|
echo ' TIP: Find tags here: https://github.com/tdlib/td/tags' |
||||||
|
echo ' TIP: Find commits here: https://github.com/tdlib/td/commits/master' |
||||||
|
exit 1 |
||||||
fi |
fi |
||||||
|
|
||||||
docker build -t "tdlib:$TDLIB_VER-alpine-$ALPINE_VERSION" --build-arg TDLIB_VER --build-arg ALPINE_VERSION $(dirname $0) |
if [ -z $SO_IMAGE_TAG ] |
||||||
|
then |
||||||
|
export SO_IMAGE_TAG="$IMAGE_TAG-so" |
||||||
|
fi |
||||||
|
echo "SO_IMAGE_TAG=$SO_IMAGE_TAG" |
||||||
|
docker build \ |
||||||
|
-t "$SO_IMAGE_TAG" \ |
||||||
|
--build-arg "TDLIB_IMAGE=$IMAGE_TAG" \ |
||||||
|
--build-arg ALPINE_VERSION \ |
||||||
|
-f Dockerfile-so \ |
||||||
|
. |
||||||
|
@ -0,0 +1,203 @@ |
|||||||
|
#! /usr/bin/env ruby |
||||||
|
|
||||||
|
os_versions = { |
||||||
|
alpine: [], |
||||||
|
debian: [], |
||||||
|
ubuntu: [], |
||||||
|
} |
||||||
|
|
||||||
|
tdlib_versions = [] |
||||||
|
|
||||||
|
image_names = [] |
||||||
|
|
||||||
|
puts 'Alpine versions? (end with empty line)' |
||||||
|
loop do |
||||||
|
line = gets |
||||||
|
if line.nil? |
||||||
|
break |
||||||
|
end |
||||||
|
|
||||||
|
version, *aliases = line.strip.split('|') |
||||||
|
if version.nil? |
||||||
|
break |
||||||
|
end |
||||||
|
if aliases.empty? |
||||||
|
aliases.append "alpine-#{version}" |
||||||
|
end |
||||||
|
os_versions[:alpine].append({ |
||||||
|
version: version, |
||||||
|
aliases: aliases, |
||||||
|
}) |
||||||
|
end |
||||||
|
|
||||||
|
puts 'Debian versions? (end with empty line)' |
||||||
|
loop do |
||||||
|
line = gets |
||||||
|
if line.nil? |
||||||
|
break |
||||||
|
end |
||||||
|
version, *aliases = line.strip.split('|') |
||||||
|
if version.nil? |
||||||
|
break |
||||||
|
end |
||||||
|
if aliases.empty? |
||||||
|
aliases.append "debian-#{version}" |
||||||
|
end |
||||||
|
os_versions[:debian].append({ |
||||||
|
version: version, |
||||||
|
aliases: aliases, |
||||||
|
}) |
||||||
|
end |
||||||
|
|
||||||
|
puts 'Ubuntu versions? (end with empty line)' |
||||||
|
loop do |
||||||
|
line = gets |
||||||
|
if line.nil? |
||||||
|
break |
||||||
|
end |
||||||
|
version, *aliases = line.strip.split('|') |
||||||
|
if version.nil? |
||||||
|
break |
||||||
|
end |
||||||
|
if aliases.empty? |
||||||
|
aliases.append "ubuntu-#{version}" |
||||||
|
end |
||||||
|
os_versions[:ubuntu].append({ |
||||||
|
version: version, |
||||||
|
aliases: aliases, |
||||||
|
}) |
||||||
|
end |
||||||
|
|
||||||
|
puts 'tdlib commits? (end with empty line; tag:XXX to insert tag name)' |
||||||
|
loop do |
||||||
|
line = gets |
||||||
|
if line.nil? |
||||||
|
break |
||||||
|
end |
||||||
|
commit, *aliases = line.strip.split('|') |
||||||
|
if commit.nil? |
||||||
|
break |
||||||
|
end |
||||||
|
if commit.start_with? 'tag:' |
||||||
|
tag = commit[4..] |
||||||
|
commit = nil |
||||||
|
end |
||||||
|
if aliases.empty? |
||||||
|
if commit.nil? |
||||||
|
aliases.append tag |
||||||
|
else |
||||||
|
aliases.append commit |
||||||
|
end |
||||||
|
end |
||||||
|
tdlib_versions.append({ |
||||||
|
tag: tag, |
||||||
|
commit: commit, |
||||||
|
aliases: aliases, |
||||||
|
}) |
||||||
|
end |
||||||
|
|
||||||
|
puts 'Image names? (end with empty line)' |
||||||
|
loop do |
||||||
|
line = gets |
||||||
|
if line.nil? |
||||||
|
break |
||||||
|
end |
||||||
|
image_names.append(line.strip) |
||||||
|
end |
||||||
|
if image_names.empty? |
||||||
|
image_names.append "tdlib" |
||||||
|
end |
||||||
|
|
||||||
|
def get_script os |
||||||
|
case os |
||||||
|
when :alpine |
||||||
|
'./alpine/build.sh' |
||||||
|
when :debian |
||||||
|
'./debian/build.sh' |
||||||
|
when :ubuntu |
||||||
|
'./ubuntu/build.sh' |
||||||
|
else |
||||||
|
fail "Unknown OS: #{os}" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def get_tdlib_ver_print tdlib_ver |
||||||
|
if not tdlib_ver[:tag].nil? |
||||||
|
"tags/#{tdlib_ver[:tag]}" |
||||||
|
else |
||||||
|
tdlib_ver[:commit] |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
failures = 0 |
||||||
|
os_versions.each_pair do |os, os_versions| |
||||||
|
script = get_script os |
||||||
|
os_versions.each do |os_version| |
||||||
|
tdlib_versions.each do |tdlib_version| |
||||||
|
puts "\x1b[94mNow building \x1b[92m#{os}:#{os_version[:version]}\x1b[94m, TDLIB: \x1b[92m#{get_tdlib_ver_print(tdlib_version)}\x1b[39m" |
||||||
|
if not tdlib_version[:tag].nil? |
||||||
|
success = system( |
||||||
|
{"IMAGE_TAG" => "tdlib:ruby_temp_img", "SO_IMAGE_TAG" => "tdlib:ruby_temp_img_so"}, |
||||||
|
"./#{File.basename("./build.sh")}", |
||||||
|
"-v", |
||||||
|
os_version[:version], |
||||||
|
"-t", |
||||||
|
tdlib_version[:tag], |
||||||
|
chdir: File.dirname(File.realpath(script)), |
||||||
|
exception: true, |
||||||
|
) |
||||||
|
else |
||||||
|
success = system( |
||||||
|
{"IMAGE_TAG" => "tdlib:ruby_temp_img", "SO_IMAGE_TAG" => "tdlib:ruby_temp_img_so"}, |
||||||
|
"./#{File.basename("./build.sh")}", |
||||||
|
"-v", |
||||||
|
os_version[:version], |
||||||
|
"-c", |
||||||
|
tdlib_version[:commit], |
||||||
|
chdir: File.dirname(File.realpath(script)), |
||||||
|
exception: true, |
||||||
|
) |
||||||
|
end |
||||||
|
if success |
||||||
|
puts "Image build, tagging..." |
||||||
|
image_names.each do |img_name| |
||||||
|
os_version[:aliases].each do |os_alias| |
||||||
|
tdlib_version[:aliases].each do |tdlib_alias| |
||||||
|
tag = "#{img_name}:#{tdlib_alias}-#{os_alias}" |
||||||
|
system( |
||||||
|
"docker", |
||||||
|
"tag", |
||||||
|
"tdlib:ruby_temp_img", |
||||||
|
tag |
||||||
|
) |
||||||
|
puts "\x1b[37m- \x1b[92m#{tag}\x1b[39m" |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
image_names.each do |img_name| |
||||||
|
os_version[:aliases].each do |os_alias| |
||||||
|
tdlib_version[:aliases].each do |tdlib_alias| |
||||||
|
tag = "#{img_name}:so-#{tdlib_alias}-#{os_alias}" |
||||||
|
system( |
||||||
|
"docker", |
||||||
|
"tag", |
||||||
|
"tdlib:ruby_temp_img_so", |
||||||
|
tag |
||||||
|
) |
||||||
|
puts "\x1b[37m- \x1b[92m#{tag}\x1b[39m" |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
system("docker", "image", "rm", "tdlib:ruby_temp_img") |
||||||
|
system("docker", "image", "rm", "tdlib:ruby_temp_img_so") |
||||||
|
else |
||||||
|
$stderr.puts "Failed!" |
||||||
|
failures += 1 |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
if failures != 0 |
||||||
|
exit 1 |
||||||
|
end |
@ -0,0 +1,27 @@ |
|||||||
|
ARG DEBIAN_VERSION |
||||||
|
FROM debian:${DEBIAN_VERSION} AS builder |
||||||
|
WORKDIR /tdlib |
||||||
|
ARG DEBIAN_FRONTEND=noninteractive |
||||||
|
RUN apt-get -y update && apt-get -y upgrade && apt-get -y install make git zlib1g-dev libssl-dev gperf php-cli cmake clang libc++-dev libc++abi-dev |
||||||
|
RUN git clone https://github.com/tdlib/td.git . |
||||||
|
ARG TDLIB_TAG |
||||||
|
ARG TDLIB_COMMIT |
||||||
|
RUN if [ "$TDLIB_TAG" ]; then \ |
||||||
|
git checkout "tags/${TDLIB_TAG}"; \ |
||||||
|
else \ |
||||||
|
git checkout "${TDLIB_COMMIT}"; \ |
||||||
|
fi |
||||||
|
RUN rm -rf build && mkdir build |
||||||
|
WORKDIR /tdlib/build |
||||||
|
RUN CXXFLAGS="-stdlib=libc++" CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=../tdlib .. |
||||||
|
RUN cmake --build . --target prepare_cross_compiling |
||||||
|
WORKDIR /tdlib |
||||||
|
RUN php SplitSource.php |
||||||
|
WORKDIR /tdlib/build |
||||||
|
RUN cmake --build . --target install |
||||||
|
WORKDIR /tdlib |
||||||
|
RUN php SplitSource.php --undo |
||||||
|
|
||||||
|
FROM debian:${DEBIAN_VERSION} |
||||||
|
WORKDIR /tdlib |
||||||
|
COPY --from=builder /tdlib/tdlib /tdlib |
@ -0,0 +1,10 @@ |
|||||||
|
ARG DEBIAN_VERSION |
||||||
|
ARG TDLIB_IMAGE |
||||||
|
FROM ${TDLIB_IMAGE} AS tdlib |
||||||
|
RUN mkdir /tdlib-so |
||||||
|
WORKDIR /tdlib-so |
||||||
|
RUN find /tdlib/lib -regex '.*\.so.*' -print0 | xargs -0 -I % cp -P % . |
||||||
|
|
||||||
|
FROM debian:${DEBIAN_VERSION} |
||||||
|
WORKDIR /tdlib-so |
||||||
|
COPY --from=tdlib /tdlib-so . |
@ -1,16 +1,117 @@ |
|||||||
#! /usr/bin/env sh |
#! /usr/bin/env sh |
||||||
|
|
||||||
|
# Parse arguments |
||||||
|
|
||||||
|
help () { |
||||||
|
echo 'build.sh -- Ubuntu image' |
||||||
|
echo |
||||||
|
echo ' -v --debian $DEBIAN_VERSION:' |
||||||
|
echo ' specify version of Debian Docker image' |
||||||
|
echo ' -t --tag $TDLIB_TAG:' |
||||||
|
echo ' specify the tdlib repository tag' |
||||||
|
echo ' -c --commit $TDLIB_COMMIT:' |
||||||
|
echo ' specify the tdlib repository commit hash' |
||||||
|
exit 0 |
||||||
|
} |
||||||
|
|
||||||
|
unknown_param () { |
||||||
|
echo 'build.sh: Unknown parameter $1' |
||||||
|
exit 1 |
||||||
|
} |
||||||
|
|
||||||
|
while [ $# -gt 0 ] |
||||||
|
do |
||||||
|
|
||||||
|
param="$1" |
||||||
|
shift |
||||||
|
case "$param" in |
||||||
|
"-v") |
||||||
|
;& |
||||||
|
"--debian") |
||||||
|
export DEBIAN_VERSION=$1 |
||||||
|
echo "DEBIAN_VERSION=$DEBIAN_VERSION" |
||||||
|
shift |
||||||
|
;; |
||||||
|
"-h") |
||||||
|
;& |
||||||
|
"--help") |
||||||
|
help |
||||||
|
;; |
||||||
|
"-t") |
||||||
|
;& |
||||||
|
"--tag") |
||||||
|
export TDLIB_TAG=$1 |
||||||
|
echo "TDLIB_TAG=$TDLIB_TAG" |
||||||
|
shift |
||||||
|
;; |
||||||
|
"-c") |
||||||
|
;& |
||||||
|
"--commit") |
||||||
|
export TDLIB_COMMIT=$1 |
||||||
|
echo "TDLIB_COMMIT=$TDLIB_COMMIT" |
||||||
|
shift |
||||||
|
;; |
||||||
|
*) |
||||||
|
unknown_param "$param" |
||||||
|
;; |
||||||
|
esac |
||||||
|
done |
||||||
|
|
||||||
if [ -z $DEBIAN_VERSION ] |
if [ -z $DEBIAN_VERSION ] |
||||||
then |
then |
||||||
echo "Please specify a version by setting the DEBIAN_VERSION env var" |
echo "build.sh: Please specify a version using -v" |
||||||
exit 1 |
exit 1 |
||||||
fi |
fi |
||||||
|
|
||||||
if [ $# -eq 1 ] |
ram=$(free -m | grep -oP '\d+' | head -n 1) |
||||||
|
if [ $ram -lt 3584 ] # 3.5 GB RAM = 3584 MB |
||||||
|
then |
||||||
|
dockerfile=Dockerfile-low-ram |
||||||
|
else |
||||||
|
dockerfile=Dockerfile |
||||||
|
fi |
||||||
|
|
||||||
|
if [ "$TDLIB_TAG" ] |
||||||
|
then |
||||||
|
if [ -z "$IMAGE_TAG" ] |
||||||
|
then |
||||||
|
export IMAGE_TAG="tdlib:$TDLIB_TAG-$DEBIAN_VERSION" |
||||||
|
echo "IMAGE_TAG=$IMAGE_TAG" |
||||||
|
fi |
||||||
|
docker build \ |
||||||
|
-t "$IMAGE_TAG" \ |
||||||
|
--build-arg TDLIB_TAG \ |
||||||
|
--build-arg DEBIAN_VERSION \ |
||||||
|
-f $dockerfile \ |
||||||
|
$(dirname $0) |
||||||
|
elif [ "$TDLIB_COMMIT" ] |
||||||
|
then |
||||||
|
if [ -z "$IMAGE_TAG" ] |
||||||
then |
then |
||||||
export TDLIB_VER="$1" |
export IMAGE_TAG="tdlib:$TDLIB_COMMIT-$DEBIAN_VERSION" |
||||||
|
echo "IMAGE_TAG=$IMAGE_TAG" |
||||||
|
fi |
||||||
|
docker build \ |
||||||
|
-t "$IMAGE_TAG" \ |
||||||
|
--build-arg TDLIB_COMMIT \ |
||||||
|
--build-arg DEBIAN_VERSION \ |
||||||
|
-f $dockerfile \ |
||||||
|
$(dirname $0) |
||||||
else |
else |
||||||
export TDLIB_VER="1.7.0" |
echo 'build.sh: no commit or tag supplied' |
||||||
|
echo ' TIP: Find tags here: https://github.com/tdlib/td/tags' |
||||||
|
echo ' TIP: Find commits here: https://github.com/tdlib/td/commits/master' |
||||||
|
exit 1 |
||||||
fi |
fi |
||||||
|
|
||||||
docker build -t "tdlib:$TDLIB_VER-$DEBIAN_VERSION" --build-arg TDLIB_VER --build-arg DEBIAN_VERSION $(dirname $0) |
if [ -z $SO_IMAGE_TAG ] |
||||||
|
then |
||||||
|
export SO_IMAGE_TAG="$IMAGE_TAG-so" |
||||||
|
fi |
||||||
|
echo "SO_IMAGE_TAG=$SO_IMAGE_TAG" |
||||||
|
docker build \ |
||||||
|
-t "$SO_IMAGE_TAG" \ |
||||||
|
--build-arg "TDLIB_IMAGE=$IMAGE_TAG" \ |
||||||
|
--build-arg DEBIAN_VERSION \ |
||||||
|
-f Dockerfile-so \ |
||||||
|
. |
||||||
|
@ -0,0 +1,27 @@ |
|||||||
|
ARG UBUNTU_VERSION |
||||||
|
FROM ubuntu:${UBUNTU_VERSION} AS builder |
||||||
|
WORKDIR /tdlib |
||||||
|
ARG DEBIAN_FRONTEND=noninteractive |
||||||
|
RUN apt-get -y update && apt-get -y upgrade && apt-get -y install make git zlib1g-dev libssl-dev gperf php-cli cmake clang-10 libc++-dev libc++abi-dev |
||||||
|
RUN git clone https://github.com/tdlib/td.git . |
||||||
|
ARG TDLIB_TAG |
||||||
|
ARG TDLIB_COMMIT |
||||||
|
RUN if [ "$TDLIB_TAG" ]; then \ |
||||||
|
git checkout "tags/${TDLIB_TAG}"; \ |
||||||
|
else \ |
||||||
|
git checkout "${TDLIB_COMMIT}"; \ |
||||||
|
fi |
||||||
|
RUN rm -rf build && mkdir build |
||||||
|
WORKDIR /tdlib/build |
||||||
|
RUN CXXFLAGS="-stdlib=libc++" CC=/usr/bin/clang-10 CXX=/usr/bin/clang++-10 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=../tdlib -DTD_ENABLE_LTO=ON -DCMAKE_AR=/usr/bin/llvm-ar-10 -DCMAKE_NM=/usr/bin/llvm-nm-10 -DCMAKE_OBJDUMP=/usr/bin/llvm-objdump-10 -DCMAKE_RANLIB=/usr/bin/llvm-ranlib-10 .. |
||||||
|
RUN cmake --build . --target prepare_cross_compiling |
||||||
|
WORKDIR /tdlib |
||||||
|
RUN php SplitSource.php |
||||||
|
WORKDIR /tdlib/build |
||||||
|
RUN cmake --build . --target install |
||||||
|
WORKDIR /tdlib |
||||||
|
RUN php SplitSource.php --undo |
||||||
|
|
||||||
|
FROM ubuntu:${UBUNTU_VERSION} |
||||||
|
WORKDIR /tdlib |
||||||
|
COPY --from=builder /tdlib/tdlib /tdlib |
@ -0,0 +1,10 @@ |
|||||||
|
ARG UBUNTU_VERSION |
||||||
|
ARG TDLIB_IMAGE |
||||||
|
FROM ${TDLIB_IMAGE} AS tdlib |
||||||
|
RUN mkdir /tdlib-so |
||||||
|
WORKDIR /tdlib-so |
||||||
|
RUN find /tdlib/lib -regex '.*\.so.*' -print0 | xargs -0 -I % cp -P % . |
||||||
|
|
||||||
|
FROM ubuntu:${UBUNTU_VERSION} |
||||||
|
WORKDIR /tdlib-so |
||||||
|
COPY --from=tdlib /tdlib-so . |
@ -1,16 +1,117 @@ |
|||||||
#! /usr/bin/env sh |
#! /usr/bin/env sh |
||||||
|
|
||||||
|
# Parse arguments |
||||||
|
|
||||||
|
help () { |
||||||
|
echo 'build.sh -- Ubuntu image' |
||||||
|
echo |
||||||
|
echo ' -v --ubuntu $UBUNTU_VERSION:' |
||||||
|
echo ' specify version of Ubuntu Docker image' |
||||||
|
echo ' -t --tag $TDLIB_TAG:' |
||||||
|
echo ' specify the tdlib repository tag' |
||||||
|
echo ' -c --commit $TDLIB_COMMIT:' |
||||||
|
echo ' specify the tdlib repository commit hash' |
||||||
|
exit 0 |
||||||
|
} |
||||||
|
|
||||||
|
unknown_param () { |
||||||
|
echo 'build.sh: Unknown parameter $1' |
||||||
|
exit 1 |
||||||
|
} |
||||||
|
|
||||||
|
while [ $# -gt 0 ] |
||||||
|
do |
||||||
|
|
||||||
|
param="$1" |
||||||
|
shift |
||||||
|
case "$param" in |
||||||
|
"-v") |
||||||
|
;& |
||||||
|
"--ubuntu") |
||||||
|
export UBUNTU_VERSION=$1 |
||||||
|
echo "UBUNTU_VERSION=$UBUNTU_VERSION" |
||||||
|
shift |
||||||
|
;; |
||||||
|
"-h") |
||||||
|
;& |
||||||
|
"--help") |
||||||
|
help |
||||||
|
;; |
||||||
|
"-t") |
||||||
|
;& |
||||||
|
"--tag") |
||||||
|
export TDLIB_TAG=$1 |
||||||
|
echo "TDLIB_TAG=$TDLIB_TAG" |
||||||
|
shift |
||||||
|
;; |
||||||
|
"-c") |
||||||
|
;& |
||||||
|
"--commit") |
||||||
|
export TDLIB_COMMIT=$1 |
||||||
|
echo "TDLIB_COMMIT=$TDLIB_COMMIT" |
||||||
|
shift |
||||||
|
;; |
||||||
|
*) |
||||||
|
unknown_param "$param" |
||||||
|
;; |
||||||
|
esac |
||||||
|
done |
||||||
|
|
||||||
if [ -z $UBUNTU_VERSION ] |
if [ -z $UBUNTU_VERSION ] |
||||||
then |
then |
||||||
echo "Please specify a version by setting the UBUNTU_VERSION env var" |
echo "build.sh: Please specify a version using -v" |
||||||
exit 1 |
exit 1 |
||||||
fi |
fi |
||||||
|
|
||||||
if [ $# -eq 1 ] |
ram=$(free -m | grep -oP '\d+' | head -n 1) |
||||||
|
if [ $ram -lt 3584 ] # 3.5 GB RAM = 3584 MB |
||||||
|
then |
||||||
|
dockerfile=Dockerfile-low-ram |
||||||
|
else |
||||||
|
dockerfile=Dockerfile |
||||||
|
fi |
||||||
|
|
||||||
|
if [ "$TDLIB_TAG" ] |
||||||
|
then |
||||||
|
if [ -z "$IMAGE_TAG" ] |
||||||
|
then |
||||||
|
export IMAGE_TAG="tdlib:$TDLIB_TAG-$UBUNTU_VERSION" |
||||||
|
fi |
||||||
|
echo "IMAGE_TAG=$IMAGE_TAG" |
||||||
|
docker build \ |
||||||
|
-t "$IMAGE_TAG" \ |
||||||
|
--build-arg TDLIB_TAG \ |
||||||
|
--build-arg UBUNTU_VERSION \ |
||||||
|
-f $dockerfile \ |
||||||
|
$(dirname $0) |
||||||
|
elif [ "$TDLIB_COMMIT" ] |
||||||
|
then |
||||||
|
if [ -z "$IMAGE_TAG" ] |
||||||
then |
then |
||||||
export TDLIB_VER="$1" |
export IMAGE_TAG="tdlib:$TDLIB_COMMIT-$UBUNTU_VERSION" |
||||||
|
fi |
||||||
|
echo "IMAGE_TAG=$IMAGE_TAG" |
||||||
|
docker build \ |
||||||
|
-t "$IMAGE_TAG" \ |
||||||
|
--build-arg TDLIB_COMMIT \ |
||||||
|
--build-arg UBUNTU_VERSION \ |
||||||
|
-f $dockerfile \ |
||||||
|
$(dirname $0) |
||||||
else |
else |
||||||
export TDLIB_VER="1.7.0" |
echo 'build.sh: no commit or tag supplied' |
||||||
|
echo ' TIP: Find tags here: https://github.com/tdlib/td/tags' |
||||||
|
echo ' TIP: Find commits here: https://github.com/tdlib/td/commits/master' |
||||||
|
exit 1 |
||||||
fi |
fi |
||||||
|
|
||||||
docker build -t "tdlib:$TDLIB_VER-$UBUNTU_VERSION" --build-arg TDLIB_VER --build-arg UBUNTU_VERSION $(dirname $0) |
if [ -z $SO_IMAGE_TAG ] |
||||||
|
then |
||||||
|
export SO_IMAGE_TAG="$IMAGE_TAG-so" |
||||||
|
fi |
||||||
|
echo "SO_IMAGE_TAG=$SO_IMAGE_TAG" |
||||||
|
docker build \ |
||||||
|
-t "$SO_IMAGE_TAG" \ |
||||||
|
--build-arg "TDLIB_IMAGE=$IMAGE_TAG" \ |
||||||
|
--build-arg UBUNTU_VERSION \ |
||||||
|
-f Dockerfile-so \ |
||||||
|
. |
||||||
|
Loading…
Reference in new issue