xref: /aosp_15_r20/external/jsoncpp/.travis_scripts/cmake_builder.sh (revision 4484440890e2bc6e07362b4feaf15601abfe0071)
1*44844408SAndroid Build Coastguard Worker#!/usr/bin/env sh
2*44844408SAndroid Build Coastguard Worker# This script can be used on the command line directly to configure several
3*44844408SAndroid Build Coastguard Worker# different build environments.
4*44844408SAndroid Build Coastguard Worker# This is called by `.travis.yml` via Travis CI.
5*44844408SAndroid Build Coastguard Worker# Travis supplies $TRAVIS_OS_NAME.
6*44844408SAndroid Build Coastguard Worker#  http://docs.travis-ci.com/user/multi-os/
7*44844408SAndroid Build Coastguard Worker# Our .travis.yml also defines:
8*44844408SAndroid Build Coastguard Worker
9*44844408SAndroid Build Coastguard Worker#   - BUILD_TYPE=Release/Debug
10*44844408SAndroid Build Coastguard Worker#   - LIB_TYPE=static/shared
11*44844408SAndroid Build Coastguard Worker#
12*44844408SAndroid Build Coastguard Worker# Optional environmental variables
13*44844408SAndroid Build Coastguard Worker#   - DESTDIR <- used for setting the install prefix
14*44844408SAndroid Build Coastguard Worker#   - BUILD_TOOL=["Unix Makefile"|"Ninja"]
15*44844408SAndroid Build Coastguard Worker#   - BUILDNAME <- how to identify this build on the dashboard
16*44844408SAndroid Build Coastguard Worker#   - DO_MemCheck <- if set, try to use valgrind
17*44844408SAndroid Build Coastguard Worker#   - DO_Coverage <- if set, try to do dashboard coverage testing
18*44844408SAndroid Build Coastguard Worker#
19*44844408SAndroid Build Coastguard Worker
20*44844408SAndroid Build Coastguard Workerenv_set=1
21*44844408SAndroid Build Coastguard Workerif ${BUILD_TYPE+false}; then
22*44844408SAndroid Build Coastguard Worker  echo "BUILD_TYPE not set in environment."
23*44844408SAndroid Build Coastguard Worker  env_set=0
24*44844408SAndroid Build Coastguard Workerfi
25*44844408SAndroid Build Coastguard Workerif ${LIB_TYPE+false}; then
26*44844408SAndroid Build Coastguard Worker  echo "LIB_TYPE not set in environment."
27*44844408SAndroid Build Coastguard Worker  env_set=0
28*44844408SAndroid Build Coastguard Workerfi
29*44844408SAndroid Build Coastguard Workerif ${CXX+false}; then
30*44844408SAndroid Build Coastguard Worker  echo "CXX not set in environment."
31*44844408SAndroid Build Coastguard Worker  env_set=0
32*44844408SAndroid Build Coastguard Workerfi
33*44844408SAndroid Build Coastguard Worker
34*44844408SAndroid Build Coastguard Worker
35*44844408SAndroid Build Coastguard Workerif [ ${env_set} -eq 0 ]; then
36*44844408SAndroid Build Coastguard Worker  echo "USAGE:  CXX=$(which clang++)  BUILD_TYPE=[Release|Debug] LIB_TYPE=[static|shared] $0"
37*44844408SAndroid Build Coastguard Worker  echo ""
38*44844408SAndroid Build Coastguard Worker  echo "Examples:"
39*44844408SAndroid Build Coastguard Worker  echo "           CXX=$(which clang++) BUILD_TYPE=Release LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0"
40*44844408SAndroid Build Coastguard Worker  echo "           CXX=$(which clang++) BUILD_TYPE=Debug   LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0"
41*44844408SAndroid Build Coastguard Worker  echo "           CXX=$(which clang++) BUILD_TYPE=Release LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0"
42*44844408SAndroid Build Coastguard Worker  echo "           CXX=$(which clang++) BUILD_TYPE=Debug   LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0"
43*44844408SAndroid Build Coastguard Worker
44*44844408SAndroid Build Coastguard Worker  echo "           CXX=$(which g++)     BUILD_TYPE=Release LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0"
45*44844408SAndroid Build Coastguard Worker  echo "           CXX=$(which g++)     BUILD_TYPE=Debug   LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0"
46*44844408SAndroid Build Coastguard Worker  echo "           CXX=$(which g++)     BUILD_TYPE=Release LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0"
47*44844408SAndroid Build Coastguard Worker  echo "           CXX=$(which g++)     BUILD_TYPE=Debug   LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0"
48*44844408SAndroid Build Coastguard Worker
49*44844408SAndroid Build Coastguard Worker  exit -1
50*44844408SAndroid Build Coastguard Workerfi
51*44844408SAndroid Build Coastguard Worker
52*44844408SAndroid Build Coastguard Workerif ${DESTDIR+false}; then
53*44844408SAndroid Build Coastguard Worker  DESTDIR="/usr/local"
54*44844408SAndroid Build Coastguard Workerfi
55*44844408SAndroid Build Coastguard Worker
56*44844408SAndroid Build Coastguard Worker# -e: fail on error
57*44844408SAndroid Build Coastguard Worker# -v: show commands
58*44844408SAndroid Build Coastguard Worker# -x: show expanded commands
59*44844408SAndroid Build Coastguard Workerset -vex
60*44844408SAndroid Build Coastguard Worker
61*44844408SAndroid Build Coastguard Workerenv | sort
62*44844408SAndroid Build Coastguard Worker
63*44844408SAndroid Build Coastguard Workerwhich cmake
64*44844408SAndroid Build Coastguard Workercmake --version
65*44844408SAndroid Build Coastguard Worker
66*44844408SAndroid Build Coastguard Workerecho ${CXX}
67*44844408SAndroid Build Coastguard Worker${CXX} --version
68*44844408SAndroid Build Coastguard Worker_COMPILER_NAME=`basename ${CXX}`
69*44844408SAndroid Build Coastguard Workerif [ "${LIB_TYPE}" = "shared" ]; then
70*44844408SAndroid Build Coastguard Worker  _CMAKE_BUILD_SHARED_LIBS=ON
71*44844408SAndroid Build Coastguard Workerelse
72*44844408SAndroid Build Coastguard Worker  _CMAKE_BUILD_SHARED_LIBS=OFF
73*44844408SAndroid Build Coastguard Workerfi
74*44844408SAndroid Build Coastguard Worker
75*44844408SAndroid Build Coastguard WorkerCTEST_TESTING_OPTION="-D ExperimentalTest"
76*44844408SAndroid Build Coastguard Worker#   - DO_MemCheck <- if set, try to use valgrind
77*44844408SAndroid Build Coastguard Workerif ! ${DO_MemCheck+false}; then
78*44844408SAndroid Build Coastguard Worker   valgrind --version
79*44844408SAndroid Build Coastguard Worker   CTEST_TESTING_OPTION="-D ExperimentalMemCheck"
80*44844408SAndroid Build Coastguard Workerelse
81*44844408SAndroid Build Coastguard Worker#   - DO_Coverage <- if set, try to do dashboard coverage testing
82*44844408SAndroid Build Coastguard Worker  if ! ${DO_Coverage+false}; then
83*44844408SAndroid Build Coastguard Worker     export CXXFLAGS="-fprofile-arcs -ftest-coverage"
84*44844408SAndroid Build Coastguard Worker     export LDFLAGS="-fprofile-arcs -ftest-coverage"
85*44844408SAndroid Build Coastguard Worker     CTEST_TESTING_OPTION="-D ExperimentalTest -D ExperimentalCoverage"
86*44844408SAndroid Build Coastguard Worker     #gcov --version
87*44844408SAndroid Build Coastguard Worker  fi
88*44844408SAndroid Build Coastguard Workerfi
89*44844408SAndroid Build Coastguard Worker
90*44844408SAndroid Build Coastguard Worker#  Ninja                        = Generates build.ninja files.
91*44844408SAndroid Build Coastguard Workerif ${BUILD_TOOL+false}; then
92*44844408SAndroid Build Coastguard Worker  BUILD_TOOL="Ninja"
93*44844408SAndroid Build Coastguard Worker  export _BUILD_EXE=ninja
94*44844408SAndroid Build Coastguard Worker  which ninja
95*44844408SAndroid Build Coastguard Worker  ninja --version
96*44844408SAndroid Build Coastguard Workerelse
97*44844408SAndroid Build Coastguard Worker#  Unix Makefiles               = Generates standard UNIX makefiles.
98*44844408SAndroid Build Coastguard Worker  export _BUILD_EXE=make
99*44844408SAndroid Build Coastguard Workerfi
100*44844408SAndroid Build Coastguard Worker
101*44844408SAndroid Build Coastguard Worker_BUILD_DIR_NAME="build-cmake_${BUILD_TYPE}_${LIB_TYPE}_${_COMPILER_NAME}_${_BUILD_EXE}"
102*44844408SAndroid Build Coastguard Workermkdir -p ${_BUILD_DIR_NAME}
103*44844408SAndroid Build Coastguard Workercd "${_BUILD_DIR_NAME}"
104*44844408SAndroid Build Coastguard Worker  if ${BUILDNAME+false}; then
105*44844408SAndroid Build Coastguard Worker     _HOSTNAME=`hostname -s`
106*44844408SAndroid Build Coastguard Worker     BUILDNAME="${_HOSTNAME}_${BUILD_TYPE}_${LIB_TYPE}_${_COMPILER_NAME}_${_BUILD_EXE}"
107*44844408SAndroid Build Coastguard Worker  fi
108*44844408SAndroid Build Coastguard Worker  cmake \
109*44844408SAndroid Build Coastguard Worker    -G "${BUILD_TOOL}" \
110*44844408SAndroid Build Coastguard Worker    -DBUILDNAME:STRING="${BUILDNAME}" \
111*44844408SAndroid Build Coastguard Worker    -DCMAKE_CXX_COMPILER:PATH=${CXX} \
112*44844408SAndroid Build Coastguard Worker    -DCMAKE_BUILD_TYPE:STRING=${BUILD_TYPE} \
113*44844408SAndroid Build Coastguard Worker    -DBUILD_SHARED_LIBS:BOOL=${_CMAKE_BUILD_SHARED_LIBS} \
114*44844408SAndroid Build Coastguard Worker    -DCMAKE_INSTALL_PREFIX:PATH=${DESTDIR} \
115*44844408SAndroid Build Coastguard Worker    ../
116*44844408SAndroid Build Coastguard Worker
117*44844408SAndroid Build Coastguard Worker  ctest -C ${BUILD_TYPE} -D ExperimentalStart -D ExperimentalConfigure -D ExperimentalBuild ${CTEST_TESTING_OPTION} -D ExperimentalSubmit
118*44844408SAndroid Build Coastguard Worker  # Final step is to verify that installation succeeds
119*44844408SAndroid Build Coastguard Worker  cmake --build . --config ${BUILD_TYPE} --target install
120*44844408SAndroid Build Coastguard Worker
121*44844408SAndroid Build Coastguard Worker  if [ "${DESTDIR}" != "/usr/local" ]; then
122*44844408SAndroid Build Coastguard Worker     ${_BUILD_EXE} install
123*44844408SAndroid Build Coastguard Worker  fi
124*44844408SAndroid Build Coastguard Workercd -
125*44844408SAndroid Build Coastguard Worker
126*44844408SAndroid Build Coastguard Workerif ${CLEANUP+false}; then
127*44844408SAndroid Build Coastguard Worker  echo "Skipping cleanup: build directory will persist."
128*44844408SAndroid Build Coastguard Workerelse
129*44844408SAndroid Build Coastguard Worker  rm -r "${_BUILD_DIR_NAME}"
130*44844408SAndroid Build Coastguard Workerfi
131