2 # This helper is for templates using cmake.
6 [ ! -d ${cmake_builddir:=build} ] && mkdir
-p ${cmake_builddir}
9 if [ -z "$CHROOT_READY" ]; then
10 cat >bootstrap.cmake
<<_EOF
11 SET(CMAKE_SYSTEM_NAME Linux)
12 SET(CMAKE_SYSTEM_VERSION 1)
14 SET(CMAKE_C_COMPILER ${CC})
15 SET(CMAKE_CXX_COMPILER ${CXX})
17 SET(CMAKE_FIND_ROOT_PATH "${XBPS_MASTERDIR}/usr;${XBPS_MASTERDIR}")
19 SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
20 SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
22 configure_args
+=" -DCMAKE_TOOLCHAIN_FILE=bootstrap.cmake"
23 elif [ "$CROSS_BUILD" ]; then
24 case "$XBPS_TARGET_MACHINE" in
25 x86_64
*) _CMAKE_SYSTEM_PROCESSOR
=x86_64
;;
26 i686
*) _CMAKE_SYSTEM_PROCESSOR
=x86
;;
27 aarch64
*) _CMAKE_SYSTEM_PROCESSOR
=aarch64
;;
28 arm
*) _CMAKE_SYSTEM_PROCESSOR
=arm
;;
29 mips
*) _CMAKE_SYSTEM_PROCESSOR
=mips
;;
30 ppc64le
*) _CMAKE_SYSTEM_PROCESSOR
=ppc64le
;;
31 ppc64
*) _CMAKE_SYSTEM_PROCESSOR
=ppc64
;;
32 ppcle
*) _CMAKE_SYSTEM_PROCESSOR
=ppcle
;;
33 ppc
*) _CMAKE_SYSTEM_PROCESSOR
=ppc
;;
34 riscv64
*) _CMAKE_SYSTEM_PROCESSOR
=riscv64
;;
35 *) _CMAKE_SYSTEM_PROCESSOR
=generic
;;
37 cat > cross_
${XBPS_CROSS_TRIPLET}.cmake
<<_EOF
38 SET(CMAKE_SYSTEM_NAME Linux)
39 SET(CMAKE_SYSTEM_VERSION 1)
41 SET(CMAKE_C_COMPILER ${CC})
42 SET(CMAKE_CXX_COMPILER ${CXX})
43 SET(Rust_CARGO_TARGET ${XBPS_CROSS_RUST_TARGET})
44 SET(CMAKE_CROSSCOMPILING TRUE)
46 SET(CMAKE_SYSTEM_PROCESSOR ${_CMAKE_SYSTEM_PROCESSOR})
48 SET(CMAKE_FIND_ROOT_PATH "${XBPS_CROSS_BASE}/usr;${XBPS_CROSS_BASE}")
50 SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
51 SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
52 SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
54 cmake_args
+=" -DCMAKE_TOOLCHAIN_FILE=${wrksrc}/${build_wrksrc}/${cmake_builddir}/cross_${XBPS_CROSS_TRIPLET}.cmake"
56 cmake_args
+=" -DCMAKE_INSTALL_PREFIX:PATH=/usr"
57 cmake_args
+=" -DCMAKE_BUILD_TYPE=None"
58 cmake_args
+=" -DCMAKE_INSTALL_LIBDIR:PATH=lib${XBPS_TARGET_WORDSIZE}"
59 cmake_args
+=" -DCMAKE_INSTALL_SYSCONFDIR:PATH=/etc"
61 if [ "$CROSS_BUILD" ]; then
62 cmake_args
+=" -DQT_HOST_PATH=/usr"
63 # QT_HOST_PATH isn't enough in my system,
64 # which have binfmts support on and off
65 cmake_args
+=" -DQT_HOST_PATH_CMAKE_DIR=/usr/lib/cmake"
68 if [[ $build_helper = *"qemu"* ]]; then
69 echo "SET(CMAKE_CROSSCOMPILING_EMULATOR /usr/bin/qemu-${XBPS_TARGET_QEMU_MACHINE}-static)" \
70 >> cross_
${XBPS_CROSS_TRIPLET}.cmake
73 cmake_args
+=" -DCMAKE_INSTALL_SBINDIR:PATH=bin"
75 export CMAKE_GENERATOR
="${CMAKE_GENERATOR:-Ninja}"
76 # Remove -pipe: https://gitlab.kitware.com/cmake/cmake/issues/19590
77 CFLAGS
="-DNDEBUG ${CFLAGS/ -pipe / }" CXXFLAGS
="-DNDEBUG ${CXXFLAGS/ -pipe / }" \
78 cmake
${cmake_args} ${configure_args} \
79 ${LIBS:+-DCMAKE_C_STANDARD_LIBRARIES="$LIBS"} \
80 ${LIBS:+-DCMAKE_CXX_STANDARD_LIBRARIES="$LIBS"} \
81 ${wrksrc}/${build_wrksrc}
83 # Replace -isystem with -I
84 if [ "$CMAKE_GENERATOR" = "Unix Makefiles" ]; then
85 find .
-name flags.
make -exec sed -i -e 's/-isystem/-I/g' "{}" +
86 elif [ "$CMAKE_GENERATOR" = Ninja
]; then
87 sed -i -e 's/-isystem/-I/g' build.ninja
94 cd ${cmake_builddir:=build}
95 ${make_cmd} ${makejobs} ${make_build_args} ${make_build_target}
101 cd ${cmake_builddir:=build}
103 if [ -z "$make_check_target" ]; then
106 if make -q test 2>/dev
/null
; then
109 if [ $?
-eq 2 ]; then
110 msg_warn
'No target to "make test".\n'
116 if ! ninja
-t query
test >/dev
/null
2>&1; then
117 msg_warn
'No target to "ninja test".\n'
122 msg_warn
"Can't run tests with '$make_cmd', define do_check.\n"
127 : ${make_check_target:=test}
129 ${make_check_pre} ${make_cmd} ${makejobs} ${make_check_args} ${make_check_target}
134 : ${make_install_target:=install}
136 cd ${cmake_builddir:=build}
137 DESTDIR
=${DESTDIR} ${make_cmd} ${make_install_args} ${make_install_target}