Merge ralph@gh/use-ci-scripts-7.0 into 7.0

This commit is contained in:
Ralph Lange
2020-04-27 12:13:18 +02:00
9 changed files with 133 additions and 390 deletions

View File

@ -1,11 +1,18 @@
# AppVeyor configuration for EPICS Base
# Ralph Lange <ralph.lange@gmx.de>
# Copyright (c) 2016-2017 ITER Organization
# .appveyor.yml for use with EPICS Base ci-scripts
# (see: https://github.com/epics-base/ci-scripts)
# Version format
version: base-{branch}-{build}
#---------------------------------#
# build cache #
#---------------------------------#
# The AppVeyor cache allowance is way too small (1GB per account across all projects, branches and jobs)
# to be used for the dependency builds.
cache:
- C:\Users\appveyor\.tools
#---------------------------------#
# repository cloning #
#---------------------------------#
@ -16,7 +23,7 @@ init:
- git config --global core.autocrlf true
# Set clone depth (do not fetch complete history)
clone_depth: 50
clone_depth: 5
# Skipping commits affecting only specific files
skip_commits:
@ -37,51 +44,44 @@ configuration:
- dynamic-debug
- static-debug
# Environment variables: compiler toolchain
# Environment variables: compiler toolchain, base version, setup file, ...
environment:
matrix:
- TOOLCHAIN: mingw
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLCHAIN: 2019
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
- TOOLCHAIN: 2017
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
- TOOLCHAIN: 14.0
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLCHAIN: 12.0
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLCHAIN: 11.0
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLCHAIN: 10.0
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
# common / default variables for all jobs
SETUP_PATH: .ci-local:.ci
BASE: SELF
# Platform: architecture
matrix:
- CMP: vs2019
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
- CMP: vs2017
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
- CMP: vs2015
- CMP: vs2013
- CMP: vs2012
- CMP: vs2010
- CMP: mingw
# Platform: processor architecture
platform:
- x86
- x64
# Matrix configuration: allow specific failing jobs
# Matrix configuration: exclude sets of jobs
matrix:
exclude:
# VS Express installs don't have the 64 bit compiler
# VS2012 and older installs don't have the 64 bit compiler
- platform: x64
TOOLCHAIN: 10.0
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
# Exclude to reduce total job runtime
# skip 64-bit for older and 32-bit for newer
CMP: vs2012
- platform: x64
TOOLCHAIN: 11.0
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
CMP: vs2010
- platform: x64
CMP: vs2008
# Exclude more jobs to reduce build time
# Skip 32-bit for "middle-aged" compilers
- platform: x86
TOOLCHAIN: mingw
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
CMP: vs2017
- platform: x86
TOOLCHAIN: 2019
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
- platform: x86
TOOLCHAIN: 2017
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
CMP: vs2015
#---------------------------------#
# building & testing #
@ -89,18 +89,17 @@ matrix:
install:
- cmd: git submodule update --init --recursive
- cmd: .ci/appveyor-prepare.bat
- cmd: python .ci/appveyor/do.py prepare
build_script:
- cmd: .ci/appveyor-make.bat
- cmd: python .ci/appveyor/do.py build
test_script:
- cmd: .ci/appveyor-make.bat tapfiles
- cmd: python .ci/appveyor/do.py test
on_finish:
- ps: Get-ChildItem *.tap -Recurse -Force | % { Push-AppveyorArtifact $_.FullName -FileName $_.Name }
- cmd: .ci/appveyor-make.bat -s test-results
- cmd: python .ci/appveyor/do.py build test-results -s
#---------------------------------#
# debugging #
@ -110,10 +109,13 @@ on_finish:
## note that you will need to connect within the usual build timeout limit (60 minutes)
## so you may want to adjust the build matrix above to just build the one of interest
#on_failure:
# print the connection info
#init:
# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# block a failed build (until the watchdog barks)
#on_failure:
# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
#---------------------------------#
# notifications #

1
.ci Submodule

Submodule .ci added at e91a588370

View File

@ -1,132 +0,0 @@
:: Universal build script for AppVeyor (https://ci.appveyor.com/)
:: Environment:
:: TOOLCHAIN - toolchain version [10.0/11.0/12.0/14.0/2017/2019/mingw]
:: CONFIGURATION - determines EPICS build [dynamic/static]
:: PLATFORM - architecture [x86/x64]
::
:: All command line args are passed to make
Setlocal EnableDelayedExpansion
:: we do not currently have a combined static and debug EPICS_HOST_ARCH target
:: So a combined debug and static target will appear to be just static
:: but debug will have been specified in CONFIG_SITE by appveyor-prepare.bat
set "ST="
echo.%CONFIGURATION% | findstr /C:"debug">nul && (
set "ST=-debug"
)
echo.%CONFIGURATION% | findstr /C:"static">nul && (
set "ST=-static"
)
set MY_OS=64BIT
if "%PLATFORM%"=="x86" set MY_OS=32BIT
echo [INFO] Platform: %MY_OS%
:: Use parallel make, except for 3.14
set "MAKEARGS=-j2 -Otarget"
if "%APPVEYOR_REPO_BRANCH%"=="3.14" set MAKEARGS=
if "%TOOLCHAIN%"=="mingw" (
set "MAKE=mingw32-make"
if "%MY_OS%"=="64BIT" (
set "EPICS_HOST_ARCH=windows-x64-mingw"
set "INCLUDE=C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\include;%INCLUDE%"
set "PATH=C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;%PATH%"
echo [INFO] MinGW Toolchain 64bit
) else (
set "EPICS_HOST_ARCH=win32-x86-mingw"
set "INCLUDE=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\include;%INCLUDE%"
set "PATH=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin;%PATH%"
echo [INFO] MinGW Toolchain 32bit
)
echo [INFO] Compiler Version
gcc -v
goto Finish
)
if "%TOOLCHAIN%"=="2019" (
echo [INFO] Setting strawberry perl path
set "PATH=c:\strawberry\perl\site\bin;C:\strawberry\perl\bin;%PATH%"
)
set "VSINSTALL=C:\Program Files (x86)\Microsoft Visual Studio %TOOLCHAIN%"
if not exist "%VSINSTALL%\" set "VSINSTALL=C:\Program Files (x86)\Microsoft Visual Studio\%TOOLCHAIN%\Community"
if not exist "%VSINSTALL%\" goto MSMissing
set "MAKE=C:\tools\make"
echo [INFO] APPVEYOR_BUILD_WORKER_IMAGE=%APPVEYOR_BUILD_WORKER_IMAGE%
if "%MY_OS%"=="64BIT" (
set EPICS_HOST_ARCH=windows-x64%ST%
:: VS 2017/2019
if exist "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat" (
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
if exist "%VSINSTALL%\VC\vcvarsall.bat" (
call "%VSINSTALL%\VC\vcvarsall.bat" amd64
where cl
if !ERRORLEVEL! NEQ 0 (
call "%VSINSTALL%\VC\vcvarsall.bat" x86_amd64
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
)
goto MSFound
)
if exist "%VSINSTALL%\VC\bin\amd64\vcvars64.bat" (
call "%VSINSTALL%\VC\bin\amd64\vcvars64.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
) else (
set EPICS_HOST_ARCH=win32-x86%ST%
:: VS 2017/2019
if exist "%VSINSTALL%\VC\Auxiliary\Build\vcvars32.bat" (
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars32.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
if exist "%VSINSTALL%\VC\vcvarsall.bat" (
call "%VSINSTALL%\VC\vcvarsall.bat" x86
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
if exist "%VSINSTALL%\VC\bin\vcvars32.bat" (
call "%VSINSTALL%\VC\bin\vcvars32.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
if exist "%VSINSTALL%\Common7\Tools\vsvars32.bat" (
call "%VSINSTALL%\Common7\Tools\vsvars32.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
)
:MSMissing
echo [INFO] Installation for MSVC Toolchain %TOOLCHAIN% / %MY_OS% seems to be missing
exit 1
:MSFound
echo [INFO] Microsoft Visual Studio Toolchain %TOOLCHAIN%
echo [INFO] Compiler Version
cl
:Finish
echo [INFO] EPICS_HOST_ARCH: %EPICS_HOST_ARCH%
echo [INFO] Make version
%MAKE% --version
echo [INFO] Perl version
perl --version
%MAKE% %MAKEARGS% %*

View File

@ -1,52 +0,0 @@
:: Build script for AppVeyor (https://ci.appveyor.com/)
:: Environment:
:: TOOLCHAIN - Toolchain Version [9.0/10.0/11.0/12.0/14.0/mingw]
:: CONFIGURATION - determines EPICS build [dynamic/static, -debug]
:: PLATFORM - "x86" -> use 32bit architecture
::
:: Prepares an Appveyor build by excuting the following steps
:: - Set up configure\CONFIG_SITE for static vs. dynamic build
:: - Install Mingw (TOOLCHAIN setting) in the in the appropriate flavor
:: - Download and install Make-4.1 from EPICS download page
Setlocal EnableDelayedExpansion
set MY_OS=64BIT
if "%PLATFORM%"=="x86" set MY_OS=32BIT
echo [INFO] Platform: %MY_OS%
:: with MSVC either static or debug can be handled as part
:: of EPICS_HOST_ARCH but not both. So we set the appropriate
:: options in CONFIG_SITE. For mingw and cygwin they are missing
:: some static and debug targets so set things here too
echo.%CONFIGURATION% | findstr /C:"static">nul && (
echo SHARED_LIBRARIES=NO>> configure\CONFIG_SITE
echo STATIC_BUILD=YES>> configure\CONFIG_SITE
echo [INFO] EPICS set up for static build
) || (
echo [INFO] EPICS set up for dynamic build
)
echo.%CONFIGURATION% | findstr /C:"debug">nul && (
echo HOST_OPT=NO>> configure\CONFIG_SITE
echo [INFO] EPICS set up for debug build
) || (
echo [INFO] EPICS set up for optimized build
)
echo [INFO] Installing Make 4.2.1 from ANL web site
curl -fsS --retry 3 -o C:\tools\make-4.2.1.zip https://epics.anl.gov/download/tools/make-4.2.1-win64.zip
cd \tools
"C:\Program Files\7-Zip\7z" e make-4.2.1.zip
set "PERLVER=5.30.0.1"
if "%TOOLCHAIN%"=="2019" (
echo [INFO] Installing Strawberry Perl %PERLVER%
curl -fsS --retry 3 -o C:\tools\perl-%PERLVER%.zip http://strawberryperl.com/download/%PERLVER%/strawberry-perl-%PERLVER%-64bit.zip
cd \tools
"C:\Program Files\7-Zip\7z" x perl-%PERLVER%.zip -oC:\strawberry
cd \strawberry
:: we set PATH in appveyor-build.bat
call relocation.pl.bat
)

View File

@ -1,8 +0,0 @@
#!/bin/sh
#
# Checkout submodules on their appropriate branches
#
git submodule foreach '\
git checkout `git config -f $toplevel/.gitmodules submodule.$name.branch` && \
git pull '

View File

@ -1,78 +0,0 @@
#!/bin/sh
set -e -x
die() {
echo "$1" >&2
exit 1
}
CACHEKEY=1
export EPICS_HOST_ARCH=`perl src/tools/EpicsHostArch.pl`
[ -e configure/os/CONFIG_SITE.Common.linux-x86 ] || die "Wrong location: $PWD"
case "$CMPLR" in
clang)
echo "Host compiler is clang"
cat << EOF >> configure/os/CONFIG_SITE.Common.$EPICS_HOST_ARCH
GNU = NO
CMPLR_CLASS = clang
CC = clang
CCC = clang++
EOF
;;
*) echo "Host compiler is default";;
esac
if [ "$STATIC" = "YES" ]
then
echo "Build static libraries/executables"
cat << EOF >> configure/CONFIG_SITE
SHARED_LIBRARIES=NO
STATIC_BUILD=YES
EOF
fi
# requires wine and g++-mingw-w64-i686
if [ "$WINE" = "32" ]
then
echo "Cross mingw32"
sed -i -e '/CMPLR_PREFIX/d' configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw
cat << EOF >> configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw
CMPLR_PREFIX=i686-w64-mingw32-
EOF
cat << EOF >> configure/CONFIG_SITE
CROSS_COMPILER_TARGET_ARCHS+=win32-x86-mingw
EOF
fi
# set RTEMS to eg. "4.9" or "4.10"
if [ -n "$RTEMS" ]
then
echo "Cross RTEMS${RTEMS} for pc386"
curl -L "https://github.com/mdavidsaver/rsb/releases/download/20171203-${RTEMS}/i386-rtems${RTEMS}-trusty-20171203-${RTEMS}.tar.bz2" \
| tar -C / -xmj
sed -i -e '/^RTEMS_VERSION/d' -e '/^RTEMS_BASE/d' configure/os/CONFIG_SITE.Common.RTEMS
cat << EOF >> configure/os/CONFIG_SITE.Common.RTEMS
RTEMS_VERSION=$RTEMS
RTEMS_BASE=$HOME/.rtems
EOF
cat << EOF >> configure/CONFIG_SITE
CROSS_COMPILER_TARGET_ARCHS += RTEMS-pc386-qemu
EOF
# find local qemu-system-i386
echo -n "Using QEMU: "
type qemu-system-i386 || echo "Missing qemu"
fi
make -j2 RTEMS_QEMU_FIXUPS=YES CMD_CFLAGS="${CMD_CFLAGS}" CMD_CXXFLAGS="${CMD_CXXFLAGS}" CMD_LDFLAGS="${CMD_LDFLAGS}"
if [ "$TEST" != "NO" ]
then
export EPICS_TEST_IMPRECISE_TIMING=YES
make -j2 tapfiles
make -s test-results
fi

View File

@ -1,24 +0,0 @@
#!/bin/sh
set -e -x
die() {
echo "$1" >&2
exit 1
}
if [ -f /etc/hosts ]
then
# The travis-ci "bionic" image throws us a curveball in /etc/hosts
# by including two entries for localhost. The first for 127.0.1.1
# which causes epicsSockResolveTest to fail.
# cat /etc/hosts
# ...
# 127.0.1.1 localhost localhost ip4-loopback
# 127.0.0.1 localhost nettuno travis vagrant travis-job-....
sudo sed -i -e '/^127\.0\.1\.1/ s|localhost\s*||g' /etc/hosts
echo "==== /etc/hosts"
cat /etc/hosts
echo "===="
fi

4
.gitmodules vendored
View File

@ -22,3 +22,7 @@
path = modules/pva2pva
url = https://github.com/epics-base/pva2pva
branch = master
[submodule ".ci"]
path = .ci
url = https://github.com/epics-base/ci-scripts
branch = master

View File

@ -1,63 +1,93 @@
language: c
# .travis.yml for use with EPICS Base ci-scripts
# (see: https://github.com/epics-base/ci-scripts)
matrix:
include:
- sudo: false
dist: bionic
language: cpp
compiler: gcc
env: CMPLR=gcc
- sudo: false
dist: xenial
compiler: gcc
env: CMPLR=gcc
- sudo: false
dist: bionic
compiler: gcc
env: CMPLR=gcc CMD_CXXFLAGS=-std=c++11
- sudo: false
dist: trusty
compiler: gcc
env: CMPLR=gcc STATIC=YES CMD_CXXFLAGS=-std=c++11
- sudo: false
dist: bionic
compiler: gcc
env: CMPLR=clang
- sudo: false
dist: xenial
compiler: gcc
env: CMPLR=clang
- sudo: false
dist: trusty
compiler: gcc
env: CMPLR=clang STATIC=YES
- sudo: false
dist: trusty
compiler: gcc
env: WINE=32 TEST=NO STATIC=YES
- sudo: false
dist: trusty
compiler: gcc
env: WINE=32 TEST=NO STATIC=NO
- sudo: false
dist: trusty
compiler: gcc
env: RTEMS=4.10
- sudo: false
dist: trusty
compiler: gcc
env: RTEMS=4.9
- os: osx
env: CMD_CFLAGS="-mmacosx-version-min=10.7" CMD_CXXFLAGS="-mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++" CMD_LDXFLAGS="-mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++"
cache:
directories:
- $HOME/.cache
env:
global:
- SETUP_PATH=.ci-local:.ci
- BASE=SELF
addons:
apt:
packages:
# for all EPICS builds
- libreadline6-dev
- libncurses5-dev
- perl
# for clang compiler
- clang
# for mingw builds (32bit and 64bit)
- g++-mingw-w64-i686
- g++-mingw-w64-x86-64
# for RTEMS cross builds
- qemu-system-x86
homebrew:
packages:
# for all EPICS builds
- bash
update: true
install:
- ./.ci/travis/prepare.sh
script:
- .ci/travis-prepare.sh
- .ci/travis-build.sh
- ./.ci/travis/build.sh
# Define build jobs
jobs:
include:
# Different configurations of default gcc and clang
# (the DIST settings are just FYI on the travis-ci.org site)
- dist: bionic
env: DIST=bionic
- env: DIST=xenial
- dist: bionic
env: DIST=bionic EXTRA="CMD_CXXFLAGS=-std=c++11"
- dist: trusty
env: DIST=trusty STATIC=YES EXTRA="CMD_CXXFLAGS=-std=c++11"
- dist: bionic
compiler: clang
env: DIST=bionic
- compiler: clang
env: DIST=xenial
- dist: trusty
compiler: clang
env: DIST=trusty STATIC=YES
# Cross-compilations to Windows using MinGW and WINE
- env: WINE=32 TEST=NO STATIC=YES
compiler: mingw
- env: WINE=32 TEST=NO STATIC=NO
compiler: mingw
# Cross-compilation to RTEMS
- env: RTEMS=4.10 TEST=NO
- env: RTEMS=4.9 TEST=NO
# MacOS build
- os: osx
env:
- EXTRA="CMD_CFLAGS=-mmacosx-version-min=10.7"
- EXTRA1="CMD_CXXFLAGS=-mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++"
- EXTRA2="CMD_LDXFLAGS=-mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++"
compiler: clang