cmake.sh (3450B)
1# 2# This helper is for templates using cmake. 3# 4do_configure() { 5 local cmake_args= 6 [ ! -d ${cmake_builddir:=build} ] && mkdir -p ${cmake_builddir} 7 cd ${cmake_builddir} 8 9 if [ -z "$CHROOT_READY" ]; then 10 cat >bootstrap.cmake <<_EOF 11SET(CMAKE_SYSTEM_NAME Linux) 12SET(CMAKE_SYSTEM_VERSION 1) 13 14SET(CMAKE_C_COMPILER ${CC}) 15SET(CMAKE_CXX_COMPILER ${CXX}) 16 17SET(CMAKE_FIND_ROOT_PATH "${XBPS_MASTERDIR}/usr;${XBPS_MASTERDIR}") 18 19SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 20SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 21_EOF 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 *) _CMAKE_SYSTEM_PROCESSOR=generic ;; 35 esac 36 cat > cross_${XBPS_CROSS_TRIPLET}.cmake <<_EOF 37SET(CMAKE_SYSTEM_NAME Linux) 38SET(CMAKE_SYSTEM_VERSION 1) 39 40SET(CMAKE_C_COMPILER ${CC}) 41SET(CMAKE_CXX_COMPILER ${CXX}) 42SET(CMAKE_CROSSCOMPILING TRUE) 43 44SET(CMAKE_SYSTEM_PROCESSOR ${_CMAKE_SYSTEM_PROCESSOR}) 45 46SET(CMAKE_FIND_ROOT_PATH "${XBPS_CROSS_BASE}/usr;${XBPS_CROSS_BASE}") 47 48SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 49SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 50SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 51_EOF 52 cmake_args+=" -DCMAKE_TOOLCHAIN_FILE=cross_${XBPS_CROSS_TRIPLET}.cmake" 53 fi 54 cmake_args+=" -DCMAKE_INSTALL_PREFIX=/usr" 55 cmake_args+=" -DCMAKE_BUILD_TYPE=None" 56 cmake_args+=" -DCMAKE_INSTALL_LIBDIR=lib${XBPS_TARGET_WORDSIZE}" 57 58 if [[ $build_helper = *"qemu"* ]]; then 59 echo "SET(CMAKE_CROSSCOMPILING_EMULATOR /usr/bin/qemu-${XBPS_TARGET_QEMU_MACHINE}-static)" \ 60 >> cross_${XBPS_CROSS_TRIPLET}.cmake 61 fi 62 63 cmake_args+=" -DCMAKE_INSTALL_SBINDIR=bin" 64 65 export CMAKE_GENERATOR="${CMAKE_GENERATOR:-Ninja}" 66 # Override flags: https://gitlab.kitware.com/cmake/cmake/issues/19590 67 CFLAGS="${CFLAGS/ -pipe / }" CXXFLAGS="${CXXFLAGS/ -pipe / }" \ 68 cmake ${cmake_args} ${configure_args} ${wrksrc}/${build_wrksrc} 69 70 # Replace -isystem with -I 71 if [ "$CMAKE_GENERATOR" = "Unix Makefiles" ]; then 72 find . -name flags.make -exec sed -i -e 's/-isystem/-I/g' "{}" + 73 elif [ "$CMAKE_GENERATOR" = Ninja ]; then 74 sed -i -e 's/-isystem/-I/g' build.ninja 75 fi 76} 77 78do_build() { 79 : ${make_cmd:=ninja} 80 81 cd ${cmake_builddir:=build} 82 ${make_cmd} ${makejobs} ${make_build_args} ${make_build_target} 83} 84 85do_check() { 86 : ${make_cmd:=ninja} 87 88 cd ${cmake_builddir:=build} 89 90 if [ -z "$make_check_target" ]; then 91 case $make_cmd in 92 make) 93 if make -q test 2>/dev/null; then 94 : 95 else 96 if [ $? -eq 2 ]; then 97 msg_warn 'No target to "make test".\n' 98 return 0 99 fi 100 fi 101 ;; 102 ninja) 103 if ! ninja -t query test >/dev/null 2>&1; then 104 msg_warn 'No target to "ninja test".\n' 105 return 0 106 fi 107 ;; 108 *) 109 msg_warn "Can't run tests with '$make_cmd', define do_check.\n" 110 ;; 111 esac 112 fi 113 114 : ${make_check_target:=test} 115 116 CTEST_OUTPUT_ON_FAILURE=TRUE ${make_cmd} ${make_check_args} ${make_check_target} 117} 118 119do_install() { 120 : ${make_cmd:=ninja} 121 : ${make_install_target:=install} 122 123 cd ${cmake_builddir:=build} 124 DESTDIR=${DESTDIR} ${make_cmd} ${make_install_args} ${make_install_target} 125}