Skip to content

Commit

Permalink
Fix build for armv6 (#688)
Browse files Browse the repository at this point in the history
* use ffmpeg configure for armv6

* update docker

* update ffmpeg file copy

* remove docker build from circleci
  • Loading branch information
mpromonet authored Apr 14, 2024
1 parent c81b483 commit b5d7c0f
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 119 deletions.
104 changes: 1 addition & 103 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -197,86 +197,6 @@ jobs:
name: "Deploy to Github"
command: $HOME/go/bin/ghr -t $GITHUB_TOKEN -u $CIRCLE_PROJECT_USERNAME -r $CIRCLE_PROJECT_REPONAME $CIRCLE_TAG /distrib

# -------------------------------------
# publish docker amd64
# -------------------------------------
publish_docker_linuxamd64:
<<: *defaults

steps:
- checkout
- run: git submodule update --init
- setup_remote_docker:
version: 20.10.12
- run:
command: |
export TAG=${CIRCLE_TAG:-circle-latest}
docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
docker build --pull -t $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-amd64 -f Dockerfile .
docker push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-amd64
no_output_timeout: 30m

# -------------------------------------
# publish docker arm
# -------------------------------------
publish_docker_linuxarm32v7:
<<: *defaults

environment:
CROSSCOMPILER: https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.2.0-pi_2-3.tar.gz
steps:
- checkout
- run: git submodule update --init
- setup_remote_docker:
version: 20.10.12
- run:
command: |
export TAG=${CIRCLE_TAG:-circle-latest}
docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
docker build --build-arg ARCH=armv7l --build-arg CROSSCOMPILER=${CROSSCOMPILER} --build-arg IMAGE=balenalib/raspberry-pi2 --pull -t $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v7 -f Dockerfile.rpi .
docker push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v7
no_output_timeout: 30m

# -------------------------------------
# publish docker arm
# -------------------------------------
publish_docker_linuxarm32v6:
<<: *defaults

steps:
- checkout
- run: git submodule update --init
- setup_remote_docker:
version: 20.10.12
- run:
command: |
export TAG=${CIRCLE_TAG:-circle-latest}
docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
docker build --pull -t $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v6 -f Dockerfile.rpi .
docker push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v6
no_output_timeout: 30m

# -------------------------------------
# publish docker manifest
# -------------------------------------
publish_docker_multiarch:
<<: *defaults

steps:
- setup_remote_docker:
version: 20.10.12
- run:
command: |
mkdir $HOME/.docker
sh -c 'echo "{ \"experimental\": \"enabled\" }" >> $HOME/.docker/config.json'
#
docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
export TAG=${CIRCLE_TAG:-circle-latest}
docker manifest create --amend $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-amd64 $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v7 $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v6
docker manifest annotate $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v7 --os linux --arch arm --variant v7
docker manifest annotate $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v6 --os linux --arch arm --variant v6
docker manifest push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} -p
workflows:
version: 2
build:
Expand Down Expand Up @@ -338,26 +258,4 @@ workflows:
ignore: /.*/
tags:
only: /.*/
docker:
jobs:
- publish_docker_linuxamd64:
filters:
tags:
only: /.*/
- publish_docker_linuxarm32v6:
filters:
tags:
only: /.*/
- publish_docker_linuxarm32v7:
filters:
tags:
only: /.*/
- publish_docker_multiarch:
requires:
- publish_docker_linuxamd64
- publish_docker_linuxarm32v6
- publish_docker_linuxarm32v7
filters:
tags:
only: /.*/


25 changes: 15 additions & 10 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,21 @@ if (NOT EXISTS ${WEBRTCOBJS}/${CMAKE_STATIC_LIBRARY_PREFIX}webrtc${CMAKE_STATIC_
set (WEBRTCARGS is_chrome_branded=true\n${WEBRTCARGS})
if (CMAKE_SYSTEM_PROCESSOR MATCHES "armv6.*")
set(ENV{PATH} "${WEBRTCROOT}/src/third_party/llvm-build/Release+Asserts/bin:$ENV{PATH}")
file(READ ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/scripts/build_ffmpeg.py filecontent)
string(REPLACE "--enable-armv6t2" "--disable-armv6t2" filecontent "${filecontent}")
string(REPLACE "--enable-thumb" "--disable-thumb" filecontent "${filecontent}")
string(REPLACE "--extra-cflags=-march=armv7-a" "--extra-cflags=-march=armv6" filecontent "${filecontent}")
file(WRITE ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/scripts/build_ffmpeg.py "${filecontent}")
file(READ ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/scripts/robo_lib/config.py filecontent)
string(REPLACE "rodete" "" filecontent "${filecontent}")
file(WRITE ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/scripts/robo_lib/config.py "${filecontent}")
EXECUTE_PROCESS(WORKING_DIRECTORY ${WEBRTCROOT}/src/third_party/ffmpeg COMMAND python3 chromium/scripts/build_ffmpeg.py linux arm --config-only)
EXECUTE_PROCESS(WORKING_DIRECTORY ${WEBRTCROOT}/src/third_party/ffmpeg COMMAND chromium/scripts/copy_config.sh)

set (CONFIGURE_ARGS --disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-static --enable-libopus --disable-debug --disable-bzlib --disable-iconv --disable-network --disable-schannel --disable-sdl2 --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-faan --disable-alsa --disable-autodetect --disable-error-resilience --enable-decoder=vorbis,libopus,flac --enable-decoder=pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le,mp3 --enable-decoder=pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw --enable-demuxer=ogg,matroska,wav,flac,mp3,mov --enable-parser=opus,vorbis,flac,mpegaudio,vp9 --extra-cflags=-I${WEBRTCROOT}/src/third_party/opus/src/include --disable-linux-perf --x86asmexe=nasm --optflags="-O2" --arch=arm --enable-armv6 --disable-armv6t2 --enable-vfp --disable-thumb --extra-cflags=-march=armv6 --enable-cross-compile --target-os=linux --extra-cflags=--target=arm-linux-gnueabihf --extra-ldflags=--target=arm-linux-gnueabihf --sysroot=${WEBRTCROOT}/src/build/linux/debian_bullseye_armhf-sysroot --extra-cflags=-mtune=cortex-a8 --extra-cflags=-mfloat-abi=hard --extra-cflags=-O2 --disable-neon --extra-cflags=-mfpu=vfpv3-d16 --enable-pic --cc=clang --cxx=clang++ --ld=clang --extra-ldflags=-fuse-ld=lld --enable-decoder=aac,h264 --enable-demuxer=aac --enable-parser=aac,h264)
MESSAGE("CONFIGURE_ARGS = ${CONFIGURE_ARGS}")
EXECUTE_PROCESS(WORKING_DIRECTORY ${WEBRTCROOT}/src/third_party/ffmpeg COMMAND ./configure ${CONFIGURE_ARGS})

file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/config.h DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/)
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/config_components.h DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/)
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/libavutil/avconfig.h DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/libavutil/)
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/libavfilter/filter_list.c DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/libavutil/)
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/libavcodec/codec_list.c DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/libavcodec/)
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/libavcodec/parser_list.c DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/libavcodec/)
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/libavcodec/bsf_list.c DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/libavcodec/)
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/libavformat/demuxer_list.c DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/libavformat/)
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/libavformat/muxer_list.c DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/libavformat/)
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/libavformat/protocol_list.c DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/libavformat/)
endif()

#patch
Expand Down
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# build
FROM ubuntu:22.04 as builder
FROM ubuntu:24.04 as builder
LABEL maintainer=michel.promonet@free.fr
ARG USERNAME=dev
WORKDIR /webrtc-streamer
Expand All @@ -25,12 +25,12 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-ins
&& apt-get clean && rm -rf /var/lib/apt/lists/

# run
FROM ubuntu:22.04
FROM ubuntu:24.04

WORKDIR /app
COPY --from=builder /app/ /app/

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends libssl-dev libasound2 libgtk-3-0 libxtst6 libpulse0 librtmp1 avahi-utils \
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends libssl-dev libasound2-dev libgtk-3-0 libxtst6 libpulse0 librtmp1 avahi-utils \
&& useradd -M user -G video,audio \
&& apt-get clean && rm -rf /var/lib/apt/lists/ \
&& ./webrtc-streamer -V
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.arm64
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ARG IMAGE=arm64v8/ubuntu

# build
FROM ubuntu:22.04 as builder
FROM ubuntu:24.04 as builder
LABEL maintainer=michel.promonet@free.fr

ARG ARCH=arm64
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile.rpi
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ARG IMAGE=balenalib/raspberry-pi

# build
FROM ubuntu:22.04 as builder
FROM ubuntu:24.04 as builder
LABEL maintainer=michel.promonet@free.fr

ARG ARCH=armv6l
Expand All @@ -10,7 +10,7 @@ ARG CROSSCOMPILER=https://sourceforge.net/projects/raspberry-pi-cross-compilers/
WORKDIR /webrtc-streamer
COPY . /webrtc-streamer

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ca-certificates wget git python3 python3-pkg-resources xz-utils cmake make pkg-config \
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ca-certificates build-essential gcc wget git python3 python3-pkg-resources xz-utils cmake make pkg-config \
&& mkdir /webrtc \
&& wget -qO- ${CROSSCOMPILER} | tar xz -C /webrtc \
&& export PATH=$(ls -d /webrtc/cross-pi-gcc-*/bin):$PATH \
Expand Down

0 comments on commit b5d7c0f

Please sign in to comment.