-
Notifications
You must be signed in to change notification settings - Fork 14
/
cmake.yaml
186 lines (167 loc) · 5.65 KB
/
cmake.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
inherit: [cpackage, ninja, install]
buildToolsWeak: [cmake]
buildVars: [AUTOCONF_HOST, CC, CXX]
buildSetup: |
# Make sure CMake finds other stuff by its own logic too
CMAKE_FIND_ROOT_PATH=
for i in "${@:2}" ; do
# If we build for native Windows a native CMake is used and we need to
# convert to Windows paths.
[[ "$AUTOCONF_BUILD" == *-msys ]] && i="$(cygpath -m $i)"
CMAKE_FIND_ROOT_PATH+="${CMAKE_FIND_ROOT_PATH:+;}$i"
done
# It is necessary to add the sysroot path of gcc/g++ if available too
# because our host-compat-toolchain has a non-standard sysroot
# even though it's a native compiler
if [[ "$CC" == *"gcc" ]] ; then
SYSROOT="$($CC -print-sysroot)"
fi
[ -z "${SYSROOT:+true}" ] || CMAKE_FIND_ROOT_PATH+="${CMAKE_FIND_ROOT_PATH:+;}${SYSROOT}"
# This looks odd but it prevents MSYS from converting /usr to C:\msys64\usr
# (or wherever MSYS was installed). See
# http://mingw.org/wiki/Posix_path_conversion
if [[ "$AUTOCONF_BUILD" == *-msys ]] ; then
CMAKE_INSTALL_PREFIX="//usr"
CMAKE_INSTALL_SYSCONFDIR="//etc"
else
CMAKE_INSTALL_PREFIX="/usr"
CMAKE_INSTALL_SYSCONFDIR="/etc"
fi
# CMake does not honor CPPFLAGS! Merge them with C(XX)FLAGS.
if [ "${CPPFLAGS:+true}" ] ; then
CFLAGS+=" ${CPPFLAGS}"
CXXFLAGS+=" ${CPPFLAGS}"
unset CPPFLAGS
fi
[ -z "${CFLAGS:+true}" ] || export CFLAGS
[ -z "${CXXFLAGS:+true}" ] || export CXXFLAGS
# Create a toolchain file if cross-compiling
if cpackageCrossCompiling ; then
CMAKE_SYSTEM_NAME=
case "$AUTOCONF_HOST" in
*-linux-*)
CMAKE_SYSTEM_NAME=Linux
;;
*-msys|*-win32)
CMAKE_SYSTEM_NAME=Windows
;;
*)
CMAKE_SYSTEM_NAME=Generic
;;
esac
CMAKE_SYSTEM_PROCESSOR=
if [ x"${AUTOCONF_HOST##*-}" == xwin32 ] ; then
case "$AUTOCONF_HOST" in
x86_64-*)
CMAKE_SYSTEM_PROCESSOR=AMD64
;;
x86-*)
CMAKE_SYSTEM_PROCESSOR=X86
;;
aarch64-*)
CMAKE_SYSTEM_PROCESSOR=ARM64
;;
*)
# Fall back to the raw processor prefix
CMAKE_SYSTEM_PROCESSOR=${AUTOCONF_HOST%%-*}
;;
esac
else
CMAKE_SYSTEM_PROCESSOR=${AUTOCONF_HOST%%-*}
fi
cat >toolchain.cmake <<EOF
set(CMAKE_SYSTEM_NAME ${CMAKE_SYSTEM_NAME})
set(CMAKE_C_COMPILER ${CC})
set(CMAKE_CXX_COMPILER ${CXX})
set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
EOF
CMAKE_TOOLCHAIN_FILE="$PWD/toolchain.cmake"
fi
# The build of shared libraries can be controlled on cmake. Unfortunately
# there is no standard switch to control static libraries.
case $(cpackageLibraryType) in
shared|both)
BUILD_SHARED_LIBS=ON
;;
static)
BUILD_SHARED_LIBS=OFF
;;
esac
# usage: cmakeBuild [-m <ninja_target>] [-o <ninja_options>]
# [-n] [-i <install_component>]
# <source-path> [-DCMAKE_...]
cmakeBuild()
{
local MAKE_TARGETS=( )
local MAKE_OPTIONS=( )
local INSTALL=yes
local INSTALL_COMPONENT=
# parse arguments
OPTIND=1
local opt
while getopts "i:m:no:" opt ; do
case "$opt" in
i)
INSTALL_COMPONENT="$OPTARG"
;;
m)
MAKE_TARGETS+=( "$OPTARG" )
;;
n)
INSTALL=
;;
o)
MAKE_OPTIONS+=( "$OPTARG" )
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
shift $(( OPTIND -1 ))
rm -rf install
mkdir -p build install
pushd build
cmake "$1" \
-G Ninja \
${CMAKE_TOOLCHAIN_FILE:+-DCMAKE_TOOLCHAIN_FILE="$CMAKE_TOOLCHAIN_FILE"} \
-DCMAKE_FIND_ROOT_PATH="$CMAKE_FIND_ROOT_PATH" \
-DCMAKE_BUILD_TYPE=Bob \
-DCMAKE_INSTALL_PREFIX="$CMAKE_INSTALL_PREFIX" \
-DCMAKE_INSTALL_SYSCONFDIR="$CMAKE_INSTALL_SYSCONFDIR" \
-DCMAKE_INSTALL_LIBDIR="lib" \
-DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS \
-DCMAKE_MSVC_RUNTIME_LIBRARY="" \
"${@:2}"
ninjaParallel ${MAKE_OPTIONS:+"${MAKE_OPTIONS[@]}"} \
${MAKE_TARGETS:+"${MAKE_TARGETS[@]}"}
if [[ -n "$INSTALL" ]] ; then
DESTDIR="${PWD}/../install" cmake \
${INSTALL_COMPONENT:+-DCOMPONENT="$INSTALL_COMPONENT"} \
-P cmake_install.cmake
fi
popd
}
packageSetup: |
_CMAKE_BUILD_PATH=$1
cmakePackageBin()
{
installPackageBin "${1:-${_CMAKE_BUILD_PATH}}/install/" "${@:2}"
}
cmakePackageDev()
{
installPackageDev "${1:-${_CMAKE_BUILD_PATH}}/install/" "${@:2}"
}
cmakePackageLib()
{
installPackageLib "${1:-${_CMAKE_BUILD_PATH}}/install/" "${@:2}"
}
cmakePackageTgt()
{
installPackageTgt "${1:-${_CMAKE_BUILD_PATH}}/install/" "${@:2}"
}