diff --git a/trunk/Dockerfile b/trunk/Dockerfile index de93874da20..01050d7e2e4 100644 --- a/trunk/Dockerfile +++ b/trunk/Dockerfile @@ -16,7 +16,7 @@ ENV DEBIAN_FRONTEND noninteractive SHELL ["/bin/bash", "-c"] # Install depends tools. -RUN apt-get update && apt-get install -y gcc make g++ patch unzip perl git +RUN apt-get update && apt-get install -y gcc make g++ patch unzip perl git libasan5 # Copy source code to docker. COPY . /srs @@ -24,7 +24,7 @@ WORKDIR /srs/trunk # Build and install SRS. # Note that SRT is enabled by default, so we configure without --srt=on. -RUN ./configure --jobs=${JOBS} && make -j${JOBS} && make install +RUN ./configure --jobs=${JOBS} --sanitizer-static=on && make -j${JOBS} && make install # All config files for SRS. RUN cp -R conf /usr/local/srs/conf && \ diff --git a/trunk/Dockerfile.builds b/trunk/Dockerfile.builds index 97d74b070fe..ee30d974142 100644 --- a/trunk/Dockerfile.builds +++ b/trunk/Dockerfile.builds @@ -22,11 +22,11 @@ RUN cd /srs/trunk && ./configure --jobs=2 --srt=off --cxx11=off --cxx14=off --ff ######################################################## FROM ossrs/srs:dev6-cache AS centos6-baseline COPY . /srs -RUN cd /srs/trunk && ./configure --jobs=2 --srt=off --cxx11=off --cxx14=off && make -j2 +RUN cd /srs/trunk && ./configure --jobs=2 --srt=off --gb28181=off --cxx11=off --cxx14=off --sanitizer=off && make -j2 FROM ossrs/srs:dev6-cache AS centos6-srt COPY . /srs -RUN cd /srs/trunk && ./configure --jobs=2 --srt=on --cxx11=off --cxx14=off && make -j2 +RUN cd /srs/trunk && ./configure --jobs=2 --srt=on --gb28181=off --cxx11=off --cxx14=off --sanitizer=off && make -j2 ######################################################## FROM ossrs/srs:ubuntu16-cache AS ubuntu16-baseline diff --git a/trunk/Dockerfile.cov b/trunk/Dockerfile.cov index 6a745d29f93..54efdb007ae 100644 --- a/trunk/Dockerfile.cov +++ b/trunk/Dockerfile.cov @@ -8,5 +8,5 @@ COPY . /srs WORKDIR /srs/trunk # Note that we must enable the gcc7 or link failed. -RUN scl enable devtoolset-7 -- ./configure --srt=on --utest=on --gcov=on --jobs=2 +RUN scl enable devtoolset-7 -- ./configure --srt=on --gb28181=off --utest=on --gcov=on --sanitizer=off --jobs=2 RUN scl enable devtoolset-7 -- make -j2 utest diff --git a/trunk/Dockerfile.test b/trunk/Dockerfile.test index cd12950f784..a0915612420 100644 --- a/trunk/Dockerfile.test +++ b/trunk/Dockerfile.test @@ -8,7 +8,7 @@ COPY . /srs WORKDIR /srs/trunk # Note that we must enable the gcc7 or link failed. -RUN scl enable devtoolset-7 -- ./configure --srt=on --utest=on --jobs=2 +RUN scl enable devtoolset-7 -- ./configure --srt=on --gb28181=off --utest=on --sanitizer=off --jobs=2 RUN scl enable devtoolset-7 -- make -j2 utest # Build benchmark tool. diff --git a/trunk/auto/depends.sh b/trunk/auto/depends.sh index 4a68e49066e..444e6512f1a 100755 --- a/trunk/auto/depends.sh +++ b/trunk/auto/depends.sh @@ -317,7 +317,8 @@ OSX_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "OSX prepare failed, ret=$re OS_IS_LOONGARCH64=$(g++ -dM -E - > ${SRS_OBJS}/${SRS_MAKEFILE} GCC = ${SRS_TOOL_CC} @@ -211,6 +221,15 @@ if [[ $SRS_BACKTRACE == YES ]]; then SrsLinkOptions="${SrsLinkOptions} -rdynamic"; fi +# For address sanitizer +# @doc: https://github.com/google/sanitizers/wiki/AddressSanitizer +if [[ $SRS_SANITIZER == YES && $OS_IS_X86_64 == YES ]]; then + SrsLinkOptions="${SrsLinkOptions} -fsanitize=address -fno-omit-frame-pointer"; + if [[ $SRS_SANITIZER_STATIC == YES ]]; then + SrsLinkOptions="${SrsLinkOptions} -static-libasan"; + fi +fi + ##################################################################################### # Modules, compile each module, then link to binary # diff --git a/trunk/scripts/docker_test.sh b/trunk/scripts/docker_test.sh new file mode 100755 index 00000000000..065d39bb96c --- /dev/null +++ b/trunk/scripts/docker_test.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# cd ~/git/srs +work_dir=$(cd -P $(dirname $0) && cd ../.. && pwd) && cd $work_dir && echo "Run script in ${work_dir}" +if [[ ! -d trunk ]]; then echo "no ./trunk found"; exit 1; fi + +echo "For trunk/Dockerfile.test" +docker build --tag srs:test -f trunk/Dockerfile.test . && +docker build --tag srs:cov -f trunk/Dockerfile.cov . +if [[ $? -ne 0 ]]; then echo "Docker for test failed"; exit 1; fi + +echo "For trunk/Dockerfile" +docker buildx build --platform linux/arm/v7 --output "type=image,push=false" --build-arg IMAGE=ossrs/srs:ubuntu20-cache -f trunk/Dockerfile . && +docker buildx build --platform linux/arm64/v8 --output "type=image,push=false" --build-arg IMAGE=ossrs/srs:ubuntu20-cache -f trunk/Dockerfile . && +docker buildx build --platform linux/amd64 --output "type=image,push=false" --build-arg IMAGE=ossrs/srs:ubuntu20-cache -f trunk/Dockerfile . +if [[ $? -ne 0 ]]; then echo "Docker for release failed"; exit 1; fi + +echo "For trunk/Dockerfile.pkg" +docker build --tag srs:pkg --build-arg version=1.2.3 -f trunk/Dockerfile.pkg . +if [[ $? -ne 0 ]]; then echo "Docker for pkg failed"; exit 1; fi + +echo "For trunk/Dockerfile.builds" +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos7-baseline . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos7-all . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos7-no-webrtc . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos7-no-asm . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos7-ansi-no-ffmpeg . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos6-baseline . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos6-all . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu16-baseline . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu16-all . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu18-baseline . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu18-all . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu20-baseline . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu20-all . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu16-cross-armv7 . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu20-cross-armv7 . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu16-cross-aarch64 . && +DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu20-cross-aarch64 . +if [[ $? -ne 0 ]]; then echo "Docker for build failed"; exit 1; fi +