1*25da2beaSAndroid Build Coastguard Worker#!/bin/sh 2*25da2beaSAndroid Build Coastguard Worker 3*25da2beaSAndroid Build Coastguard Workerset -e 4*25da2beaSAndroid Build Coastguard Worker 5*25da2beaSAndroid Build Coastguard Workercc=${CC:-gcc} 6*25da2beaSAndroid Build Coastguard Workercxx=${CXX:-g++} 7*25da2beaSAndroid Build Coastguard Worker 8*25da2beaSAndroid Build Coastguard Workerfor opt do 9*25da2beaSAndroid Build Coastguard Worker optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)' || true) 10*25da2beaSAndroid Build Coastguard Worker case "$opt" in 11*25da2beaSAndroid Build Coastguard Worker --help|-h) show_help=yes 12*25da2beaSAndroid Build Coastguard Worker ;; 13*25da2beaSAndroid Build Coastguard Worker --prefix=*) prefix="$optarg" 14*25da2beaSAndroid Build Coastguard Worker ;; 15*25da2beaSAndroid Build Coastguard Worker --includedir=*) includedir="$optarg" 16*25da2beaSAndroid Build Coastguard Worker ;; 17*25da2beaSAndroid Build Coastguard Worker --libdir=*) libdir="$optarg" 18*25da2beaSAndroid Build Coastguard Worker ;; 19*25da2beaSAndroid Build Coastguard Worker --libdevdir=*) libdevdir="$optarg" 20*25da2beaSAndroid Build Coastguard Worker ;; 21*25da2beaSAndroid Build Coastguard Worker --mandir=*) mandir="$optarg" 22*25da2beaSAndroid Build Coastguard Worker ;; 23*25da2beaSAndroid Build Coastguard Worker --datadir=*) datadir="$optarg" 24*25da2beaSAndroid Build Coastguard Worker ;; 25*25da2beaSAndroid Build Coastguard Worker --cc=*) cc="$optarg" 26*25da2beaSAndroid Build Coastguard Worker ;; 27*25da2beaSAndroid Build Coastguard Worker --cxx=*) cxx="$optarg" 28*25da2beaSAndroid Build Coastguard Worker ;; 29*25da2beaSAndroid Build Coastguard Worker --nolibc) liburing_nolibc="yes" 30*25da2beaSAndroid Build Coastguard Worker ;; 31*25da2beaSAndroid Build Coastguard Worker *) 32*25da2beaSAndroid Build Coastguard Worker echo "ERROR: unknown option $opt" 33*25da2beaSAndroid Build Coastguard Worker echo "Try '$0 --help' for more information" 34*25da2beaSAndroid Build Coastguard Worker exit 1 35*25da2beaSAndroid Build Coastguard Worker ;; 36*25da2beaSAndroid Build Coastguard Worker esac 37*25da2beaSAndroid Build Coastguard Workerdone 38*25da2beaSAndroid Build Coastguard Worker 39*25da2beaSAndroid Build Coastguard Workerif test -z "$prefix"; then 40*25da2beaSAndroid Build Coastguard Worker prefix=/usr 41*25da2beaSAndroid Build Coastguard Workerfi 42*25da2beaSAndroid Build Coastguard Workerif test -z "$includedir"; then 43*25da2beaSAndroid Build Coastguard Worker includedir="$prefix/include" 44*25da2beaSAndroid Build Coastguard Workerfi 45*25da2beaSAndroid Build Coastguard Workerif test -z "$libdir"; then 46*25da2beaSAndroid Build Coastguard Worker libdir="$prefix/lib" 47*25da2beaSAndroid Build Coastguard Workerfi 48*25da2beaSAndroid Build Coastguard Workerif test -z "$libdevdir"; then 49*25da2beaSAndroid Build Coastguard Worker libdevdir="$prefix/lib" 50*25da2beaSAndroid Build Coastguard Workerfi 51*25da2beaSAndroid Build Coastguard Workerif test -z "$mandir"; then 52*25da2beaSAndroid Build Coastguard Worker mandir="$prefix/man" 53*25da2beaSAndroid Build Coastguard Workerfi 54*25da2beaSAndroid Build Coastguard Workerif test -z "$datadir"; then 55*25da2beaSAndroid Build Coastguard Worker datadir="$prefix/share" 56*25da2beaSAndroid Build Coastguard Workerfi 57*25da2beaSAndroid Build Coastguard Worker 58*25da2beaSAndroid Build Coastguard Workerif test x"$libdir" = x"$libdevdir"; then 59*25da2beaSAndroid Build Coastguard Worker relativelibdir="" 60*25da2beaSAndroid Build Coastguard Workerelse 61*25da2beaSAndroid Build Coastguard Worker relativelibdir="$libdir/" 62*25da2beaSAndroid Build Coastguard Workerfi 63*25da2beaSAndroid Build Coastguard Worker 64*25da2beaSAndroid Build Coastguard Workerif test "$show_help" = "yes"; then 65*25da2beaSAndroid Build Coastguard Workercat <<EOF 66*25da2beaSAndroid Build Coastguard Worker 67*25da2beaSAndroid Build Coastguard WorkerUsage: configure [options] 68*25da2beaSAndroid Build Coastguard WorkerOptions: [defaults in brackets after descriptions] 69*25da2beaSAndroid Build Coastguard Worker --help print this message 70*25da2beaSAndroid Build Coastguard Worker --prefix=PATH install in PATH [$prefix] 71*25da2beaSAndroid Build Coastguard Worker --includedir=PATH install headers in PATH [$includedir] 72*25da2beaSAndroid Build Coastguard Worker --libdir=PATH install runtime libraries in PATH [$libdir] 73*25da2beaSAndroid Build Coastguard Worker --libdevdir=PATH install development libraries in PATH [$libdevdir] 74*25da2beaSAndroid Build Coastguard Worker --mandir=PATH install man pages in PATH [$mandir] 75*25da2beaSAndroid Build Coastguard Worker --datadir=PATH install shared data in PATH [$datadir] 76*25da2beaSAndroid Build Coastguard Worker --cc=CMD use CMD as the C compiler 77*25da2beaSAndroid Build Coastguard Worker --cxx=CMD use CMD as the C++ compiler 78*25da2beaSAndroid Build Coastguard Worker --nolibc build liburing without libc 79*25da2beaSAndroid Build Coastguard WorkerEOF 80*25da2beaSAndroid Build Coastguard Workerexit 0 81*25da2beaSAndroid Build Coastguard Workerfi 82*25da2beaSAndroid Build Coastguard Worker 83*25da2beaSAndroid Build Coastguard WorkerTMP_DIRECTORY="$(mktemp -d)" 84*25da2beaSAndroid Build Coastguard WorkerTMPC="$TMP_DIRECTORY/liburing-conf.c" 85*25da2beaSAndroid Build Coastguard WorkerTMPC2="$TMP_DIRECTORY/liburing-conf-2.c" 86*25da2beaSAndroid Build Coastguard WorkerTMPCXX="$TMP_DIRECTORY/liburing-conf-2.cpp" 87*25da2beaSAndroid Build Coastguard WorkerTMPO="$TMP_DIRECTORY/liburing-conf.o" 88*25da2beaSAndroid Build Coastguard WorkerTMPE="$TMP_DIRECTORY/liburing-conf.exe" 89*25da2beaSAndroid Build Coastguard Worker 90*25da2beaSAndroid Build Coastguard Workertouch $TMPC $TMPC2 $TMPCXX $TMPO $TMPE 91*25da2beaSAndroid Build Coastguard Worker 92*25da2beaSAndroid Build Coastguard Worker# NB: do not call "exit" in the trap handler; this is buggy with some shells; 93*25da2beaSAndroid Build Coastguard Worker# see <[email protected]> 94*25da2beaSAndroid Build Coastguard Workertrap "rm -rf $TMP_DIRECTORY" EXIT INT QUIT TERM 95*25da2beaSAndroid Build Coastguard Worker 96*25da2beaSAndroid Build Coastguard Workerrm -rf config.log 97*25da2beaSAndroid Build Coastguard Worker 98*25da2beaSAndroid Build Coastguard Workerconfig_host_mak="config-host.mak" 99*25da2beaSAndroid Build Coastguard Workerconfig_host_h="config-host.h" 100*25da2beaSAndroid Build Coastguard Worker 101*25da2beaSAndroid Build Coastguard Workerrm -rf $config_host_mak 102*25da2beaSAndroid Build Coastguard Workerrm -rf $config_host_h 103*25da2beaSAndroid Build Coastguard Worker 104*25da2beaSAndroid Build Coastguard Workerfatal() { 105*25da2beaSAndroid Build Coastguard Worker echo $@ 106*25da2beaSAndroid Build Coastguard Worker echo "Configure failed, check config.log and/or the above output" 107*25da2beaSAndroid Build Coastguard Worker rm -rf $config_host_mak 108*25da2beaSAndroid Build Coastguard Worker rm -rf $config_host_h 109*25da2beaSAndroid Build Coastguard Worker exit 1 110*25da2beaSAndroid Build Coastguard Worker} 111*25da2beaSAndroid Build Coastguard Worker 112*25da2beaSAndroid Build Coastguard Worker# Print result for each configuration test 113*25da2beaSAndroid Build Coastguard Workerprint_config() { 114*25da2beaSAndroid Build Coastguard Worker printf "%-30s%s\n" "$1" "$2" 115*25da2beaSAndroid Build Coastguard Worker} 116*25da2beaSAndroid Build Coastguard Worker 117*25da2beaSAndroid Build Coastguard Worker# Default CFLAGS 118*25da2beaSAndroid Build Coastguard WorkerCFLAGS="-D_GNU_SOURCE -include config-host.h" 119*25da2beaSAndroid Build Coastguard WorkerBUILD_CFLAGS="" 120*25da2beaSAndroid Build Coastguard Worker 121*25da2beaSAndroid Build Coastguard Worker# Print configure header at the top of $config_host_h 122*25da2beaSAndroid Build Coastguard Workerecho "/*" > $config_host_h 123*25da2beaSAndroid Build Coastguard Workerecho " * Automatically generated by configure - do not modify" >> $config_host_h 124*25da2beaSAndroid Build Coastguard Workerprintf " * Configured with:" >> $config_host_h 125*25da2beaSAndroid Build Coastguard Workerprintf " * '%s'" "$0" "$@" >> $config_host_h 126*25da2beaSAndroid Build Coastguard Workerecho "" >> $config_host_h 127*25da2beaSAndroid Build Coastguard Workerecho " */" >> $config_host_h 128*25da2beaSAndroid Build Coastguard Worker 129*25da2beaSAndroid Build Coastguard Workerecho "# Automatically generated by configure - do not modify" > $config_host_mak 130*25da2beaSAndroid Build Coastguard Workerprintf "# Configured with:" >> $config_host_mak 131*25da2beaSAndroid Build Coastguard Workerprintf " '%s'" "$0" "$@" >> $config_host_mak 132*25da2beaSAndroid Build Coastguard Workerecho >> $config_host_mak 133*25da2beaSAndroid Build Coastguard Worker 134*25da2beaSAndroid Build Coastguard Workerdo_cxx() { 135*25da2beaSAndroid Build Coastguard Worker # Run the compiler, capturing its output to the log. 136*25da2beaSAndroid Build Coastguard Worker echo $cxx "$@" >> config.log 137*25da2beaSAndroid Build Coastguard Worker $cxx "$@" >> config.log 2>&1 || return $? 138*25da2beaSAndroid Build Coastguard Worker return 0 139*25da2beaSAndroid Build Coastguard Worker} 140*25da2beaSAndroid Build Coastguard Worker 141*25da2beaSAndroid Build Coastguard Workerdo_cc() { 142*25da2beaSAndroid Build Coastguard Worker # Run the compiler, capturing its output to the log. 143*25da2beaSAndroid Build Coastguard Worker echo $cc "$@" >> config.log 144*25da2beaSAndroid Build Coastguard Worker $cc "$@" >> config.log 2>&1 || return $? 145*25da2beaSAndroid Build Coastguard Worker # Test passed. If this is an --enable-werror build, rerun 146*25da2beaSAndroid Build Coastguard Worker # the test with -Werror and bail out if it fails. This 147*25da2beaSAndroid Build Coastguard Worker # makes warning-generating-errors in configure test code 148*25da2beaSAndroid Build Coastguard Worker # obvious to developers. 149*25da2beaSAndroid Build Coastguard Worker if test "$werror" != "yes"; then 150*25da2beaSAndroid Build Coastguard Worker return 0 151*25da2beaSAndroid Build Coastguard Worker fi 152*25da2beaSAndroid Build Coastguard Worker # Don't bother rerunning the compile if we were already using -Werror 153*25da2beaSAndroid Build Coastguard Worker case "$*" in 154*25da2beaSAndroid Build Coastguard Worker *-Werror*) 155*25da2beaSAndroid Build Coastguard Worker return 0 156*25da2beaSAndroid Build Coastguard Worker ;; 157*25da2beaSAndroid Build Coastguard Worker esac 158*25da2beaSAndroid Build Coastguard Worker echo $cc -Werror "$@" >> config.log 159*25da2beaSAndroid Build Coastguard Worker $cc -Werror "$@" >> config.log 2>&1 && return $? 160*25da2beaSAndroid Build Coastguard Worker echo "ERROR: configure test passed without -Werror but failed with -Werror." 161*25da2beaSAndroid Build Coastguard Worker echo "This is probably a bug in the configure script. The failing command" 162*25da2beaSAndroid Build Coastguard Worker echo "will be at the bottom of config.log." 163*25da2beaSAndroid Build Coastguard Worker fatal "You can run configure with --disable-werror to bypass this check." 164*25da2beaSAndroid Build Coastguard Worker} 165*25da2beaSAndroid Build Coastguard Worker 166*25da2beaSAndroid Build Coastguard Workercompile_prog() { 167*25da2beaSAndroid Build Coastguard Worker local_cflags="$1" 168*25da2beaSAndroid Build Coastguard Worker local_ldflags="$2 $LIBS" 169*25da2beaSAndroid Build Coastguard Worker echo "Compiling test case $3" >> config.log 170*25da2beaSAndroid Build Coastguard Worker do_cc $CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags 171*25da2beaSAndroid Build Coastguard Worker} 172*25da2beaSAndroid Build Coastguard Worker 173*25da2beaSAndroid Build Coastguard Workercompile_prog_cxx() { 174*25da2beaSAndroid Build Coastguard Worker local_cflags="$1" 175*25da2beaSAndroid Build Coastguard Worker local_ldflags="$2 $LIBS" 176*25da2beaSAndroid Build Coastguard Worker echo "Compiling test case $3" >> config.log 177*25da2beaSAndroid Build Coastguard Worker do_cxx $CFLAGS $local_cflags -o $TMPE $TMPCXX $LDFLAGS $local_ldflags 178*25da2beaSAndroid Build Coastguard Worker} 179*25da2beaSAndroid Build Coastguard Worker 180*25da2beaSAndroid Build Coastguard Workerhas() { 181*25da2beaSAndroid Build Coastguard Worker type "$1" >/dev/null 2>&1 182*25da2beaSAndroid Build Coastguard Worker} 183*25da2beaSAndroid Build Coastguard Worker 184*25da2beaSAndroid Build Coastguard Workeroutput_mak() { 185*25da2beaSAndroid Build Coastguard Worker echo "$1=$2" >> $config_host_mak 186*25da2beaSAndroid Build Coastguard Worker} 187*25da2beaSAndroid Build Coastguard Worker 188*25da2beaSAndroid Build Coastguard Workeroutput_sym() { 189*25da2beaSAndroid Build Coastguard Worker output_mak "$1" "y" 190*25da2beaSAndroid Build Coastguard Worker echo "#define $1" >> $config_host_h 191*25da2beaSAndroid Build Coastguard Worker} 192*25da2beaSAndroid Build Coastguard Worker 193*25da2beaSAndroid Build Coastguard Workerprint_and_output_mak() { 194*25da2beaSAndroid Build Coastguard Worker print_config "$1" "$2" 195*25da2beaSAndroid Build Coastguard Worker output_mak "$1" "$2" 196*25da2beaSAndroid Build Coastguard Worker} 197*25da2beaSAndroid Build Coastguard Workerprint_and_output_mak "prefix" "$prefix" 198*25da2beaSAndroid Build Coastguard Workerprint_and_output_mak "includedir" "$includedir" 199*25da2beaSAndroid Build Coastguard Workerprint_and_output_mak "libdir" "$libdir" 200*25da2beaSAndroid Build Coastguard Workerprint_and_output_mak "libdevdir" "$libdevdir" 201*25da2beaSAndroid Build Coastguard Workerprint_and_output_mak "relativelibdir" "$relativelibdir" 202*25da2beaSAndroid Build Coastguard Workerprint_and_output_mak "mandir" "$mandir" 203*25da2beaSAndroid Build Coastguard Workerprint_and_output_mak "datadir" "$datadir" 204*25da2beaSAndroid Build Coastguard Worker 205*25da2beaSAndroid Build Coastguard Worker########################################## 206*25da2beaSAndroid Build Coastguard Worker# check for compiler -Wstringop-overflow 207*25da2beaSAndroid Build Coastguard Workerstringop_overflow="no" 208*25da2beaSAndroid Build Coastguard Workercat > $TMPC << EOF 209*25da2beaSAndroid Build Coastguard Worker#include <linux/fs.h> 210*25da2beaSAndroid Build Coastguard Workerint main(int argc, char **argv) 211*25da2beaSAndroid Build Coastguard Worker{ 212*25da2beaSAndroid Build Coastguard Worker return 0; 213*25da2beaSAndroid Build Coastguard Worker} 214*25da2beaSAndroid Build Coastguard WorkerEOF 215*25da2beaSAndroid Build Coastguard Workerif compile_prog "-Werror -Wstringop-overflow=0" "" "stringop_overflow"; then 216*25da2beaSAndroid Build Coastguard Worker stringop_overflow="yes" 217*25da2beaSAndroid Build Coastguard Workerfi 218*25da2beaSAndroid Build Coastguard Workerprint_config "stringop_overflow" "$stringop_overflow" 219*25da2beaSAndroid Build Coastguard Worker 220*25da2beaSAndroid Build Coastguard Worker########################################## 221*25da2beaSAndroid Build Coastguard Worker# check for compiler -Warryr-bounds 222*25da2beaSAndroid Build Coastguard Workerarray_bounds="no" 223*25da2beaSAndroid Build Coastguard Workercat > $TMPC << EOF 224*25da2beaSAndroid Build Coastguard Worker#include <linux/fs.h> 225*25da2beaSAndroid Build Coastguard Workerint main(int argc, char **argv) 226*25da2beaSAndroid Build Coastguard Worker{ 227*25da2beaSAndroid Build Coastguard Worker return 0; 228*25da2beaSAndroid Build Coastguard Worker} 229*25da2beaSAndroid Build Coastguard WorkerEOF 230*25da2beaSAndroid Build Coastguard Workerif compile_prog "-Werror -Warray-bounds=0" "" "array_bounds"; then 231*25da2beaSAndroid Build Coastguard Worker array_bounds="yes" 232*25da2beaSAndroid Build Coastguard Workerfi 233*25da2beaSAndroid Build Coastguard Workerprint_config "array_bounds" "$array_bounds" 234*25da2beaSAndroid Build Coastguard Worker 235*25da2beaSAndroid Build Coastguard Worker 236*25da2beaSAndroid Build Coastguard Worker########################################## 237*25da2beaSAndroid Build Coastguard Worker# check for __kernel_rwf_t 238*25da2beaSAndroid Build Coastguard Worker__kernel_rwf_t="no" 239*25da2beaSAndroid Build Coastguard Workercat > $TMPC << EOF 240*25da2beaSAndroid Build Coastguard Worker#include <linux/fs.h> 241*25da2beaSAndroid Build Coastguard Workerint main(int argc, char **argv) 242*25da2beaSAndroid Build Coastguard Worker{ 243*25da2beaSAndroid Build Coastguard Worker __kernel_rwf_t x; 244*25da2beaSAndroid Build Coastguard Worker x = 0; 245*25da2beaSAndroid Build Coastguard Worker return x; 246*25da2beaSAndroid Build Coastguard Worker} 247*25da2beaSAndroid Build Coastguard WorkerEOF 248*25da2beaSAndroid Build Coastguard Workerif compile_prog "" "" "__kernel_rwf_t"; then 249*25da2beaSAndroid Build Coastguard Worker __kernel_rwf_t="yes" 250*25da2beaSAndroid Build Coastguard Workerfi 251*25da2beaSAndroid Build Coastguard Workerprint_config "__kernel_rwf_t" "$__kernel_rwf_t" 252*25da2beaSAndroid Build Coastguard Worker 253*25da2beaSAndroid Build Coastguard Worker########################################## 254*25da2beaSAndroid Build Coastguard Worker# check for __kernel_timespec 255*25da2beaSAndroid Build Coastguard Worker__kernel_timespec="no" 256*25da2beaSAndroid Build Coastguard Workercat > $TMPC << EOF 257*25da2beaSAndroid Build Coastguard Worker#include <linux/time.h> 258*25da2beaSAndroid Build Coastguard Worker#include <linux/time_types.h> 259*25da2beaSAndroid Build Coastguard Workerint main(int argc, char **argv) 260*25da2beaSAndroid Build Coastguard Worker{ 261*25da2beaSAndroid Build Coastguard Worker struct __kernel_timespec ts; 262*25da2beaSAndroid Build Coastguard Worker ts.tv_sec = 0; 263*25da2beaSAndroid Build Coastguard Worker ts.tv_nsec = 1; 264*25da2beaSAndroid Build Coastguard Worker return 0; 265*25da2beaSAndroid Build Coastguard Worker} 266*25da2beaSAndroid Build Coastguard WorkerEOF 267*25da2beaSAndroid Build Coastguard Workerif compile_prog "" "" "__kernel_timespec"; then 268*25da2beaSAndroid Build Coastguard Worker __kernel_timespec="yes" 269*25da2beaSAndroid Build Coastguard Workerfi 270*25da2beaSAndroid Build Coastguard Workerprint_config "__kernel_timespec" "$__kernel_timespec" 271*25da2beaSAndroid Build Coastguard Worker 272*25da2beaSAndroid Build Coastguard Worker########################################## 273*25da2beaSAndroid Build Coastguard Worker# check for open_how 274*25da2beaSAndroid Build Coastguard Workeropen_how="no" 275*25da2beaSAndroid Build Coastguard Workercat > $TMPC << EOF 276*25da2beaSAndroid Build Coastguard Worker#include <sys/types.h> 277*25da2beaSAndroid Build Coastguard Worker#include <fcntl.h> 278*25da2beaSAndroid Build Coastguard Worker#include <string.h> 279*25da2beaSAndroid Build Coastguard Worker#include <linux/openat2.h> 280*25da2beaSAndroid Build Coastguard Workerint main(int argc, char **argv) 281*25da2beaSAndroid Build Coastguard Worker{ 282*25da2beaSAndroid Build Coastguard Worker struct open_how how; 283*25da2beaSAndroid Build Coastguard Worker how.flags = 0; 284*25da2beaSAndroid Build Coastguard Worker how.mode = 0; 285*25da2beaSAndroid Build Coastguard Worker how.resolve = 0; 286*25da2beaSAndroid Build Coastguard Worker return 0; 287*25da2beaSAndroid Build Coastguard Worker} 288*25da2beaSAndroid Build Coastguard WorkerEOF 289*25da2beaSAndroid Build Coastguard Workerif compile_prog "" "" "open_how"; then 290*25da2beaSAndroid Build Coastguard Worker open_how="yes" 291*25da2beaSAndroid Build Coastguard Workerfi 292*25da2beaSAndroid Build Coastguard Workerprint_config "open_how" "$open_how" 293*25da2beaSAndroid Build Coastguard Worker 294*25da2beaSAndroid Build Coastguard Worker########################################## 295*25da2beaSAndroid Build Coastguard Worker# check for statx 296*25da2beaSAndroid Build Coastguard Workerstatx="no" 297*25da2beaSAndroid Build Coastguard Workercat > $TMPC << EOF 298*25da2beaSAndroid Build Coastguard Worker#include <sys/types.h> 299*25da2beaSAndroid Build Coastguard Worker#include <sys/stat.h> 300*25da2beaSAndroid Build Coastguard Worker#include <unistd.h> 301*25da2beaSAndroid Build Coastguard Worker#include <fcntl.h> 302*25da2beaSAndroid Build Coastguard Worker#include <string.h> 303*25da2beaSAndroid Build Coastguard Workerint main(int argc, char **argv) 304*25da2beaSAndroid Build Coastguard Worker{ 305*25da2beaSAndroid Build Coastguard Worker struct statx x; 306*25da2beaSAndroid Build Coastguard Worker 307*25da2beaSAndroid Build Coastguard Worker return memset(&x, 0, sizeof(x)) != NULL; 308*25da2beaSAndroid Build Coastguard Worker} 309*25da2beaSAndroid Build Coastguard WorkerEOF 310*25da2beaSAndroid Build Coastguard Workerif compile_prog "" "" "statx"; then 311*25da2beaSAndroid Build Coastguard Worker statx="yes" 312*25da2beaSAndroid Build Coastguard Workerfi 313*25da2beaSAndroid Build Coastguard Workerprint_config "statx" "$statx" 314*25da2beaSAndroid Build Coastguard Worker 315*25da2beaSAndroid Build Coastguard Worker########################################## 316*25da2beaSAndroid Build Coastguard Worker# check for glibc statx 317*25da2beaSAndroid Build Coastguard Workerglibc_statx="no" 318*25da2beaSAndroid Build Coastguard Workercat > $TMPC << EOF 319*25da2beaSAndroid Build Coastguard Worker#include <sys/types.h> 320*25da2beaSAndroid Build Coastguard Worker#include <unistd.h> 321*25da2beaSAndroid Build Coastguard Worker#include <fcntl.h> 322*25da2beaSAndroid Build Coastguard Worker#include <string.h> 323*25da2beaSAndroid Build Coastguard Worker#include <sys/stat.h> 324*25da2beaSAndroid Build Coastguard Workerint main(int argc, char **argv) 325*25da2beaSAndroid Build Coastguard Worker{ 326*25da2beaSAndroid Build Coastguard Worker struct statx x; 327*25da2beaSAndroid Build Coastguard Worker 328*25da2beaSAndroid Build Coastguard Worker return memset(&x, 0, sizeof(x)) != NULL; 329*25da2beaSAndroid Build Coastguard Worker} 330*25da2beaSAndroid Build Coastguard WorkerEOF 331*25da2beaSAndroid Build Coastguard Workerif compile_prog "" "" "glibc_statx"; then 332*25da2beaSAndroid Build Coastguard Worker glibc_statx="yes" 333*25da2beaSAndroid Build Coastguard Workerfi 334*25da2beaSAndroid Build Coastguard Workerprint_config "glibc_statx" "$glibc_statx" 335*25da2beaSAndroid Build Coastguard Worker 336*25da2beaSAndroid Build Coastguard Worker########################################## 337*25da2beaSAndroid Build Coastguard Worker# check for C++ 338*25da2beaSAndroid Build Coastguard Workerhas_cxx="no" 339*25da2beaSAndroid Build Coastguard Workercat > $TMPCXX << EOF 340*25da2beaSAndroid Build Coastguard Worker#include <iostream> 341*25da2beaSAndroid Build Coastguard Workerint main(int argc, char **argv) 342*25da2beaSAndroid Build Coastguard Worker{ 343*25da2beaSAndroid Build Coastguard Worker std::cout << "Test"; 344*25da2beaSAndroid Build Coastguard Worker return 0; 345*25da2beaSAndroid Build Coastguard Worker} 346*25da2beaSAndroid Build Coastguard WorkerEOF 347*25da2beaSAndroid Build Coastguard Workerif compile_prog_cxx "" "" "C++"; then 348*25da2beaSAndroid Build Coastguard Worker has_cxx="yes" 349*25da2beaSAndroid Build Coastguard Workerfi 350*25da2beaSAndroid Build Coastguard Workerprint_config "C++" "$has_cxx" 351*25da2beaSAndroid Build Coastguard Worker 352*25da2beaSAndroid Build Coastguard Worker########################################## 353*25da2beaSAndroid Build Coastguard Worker# check for ucontext support 354*25da2beaSAndroid Build Coastguard Workerhas_ucontext="no" 355*25da2beaSAndroid Build Coastguard Workercat > $TMPC << EOF 356*25da2beaSAndroid Build Coastguard Worker#include <ucontext.h> 357*25da2beaSAndroid Build Coastguard Workerint main(int argc, char **argv) 358*25da2beaSAndroid Build Coastguard Worker{ 359*25da2beaSAndroid Build Coastguard Worker ucontext_t ctx; 360*25da2beaSAndroid Build Coastguard Worker getcontext(&ctx); 361*25da2beaSAndroid Build Coastguard Worker makecontext(&ctx, 0, 0); 362*25da2beaSAndroid Build Coastguard Worker return 0; 363*25da2beaSAndroid Build Coastguard Worker} 364*25da2beaSAndroid Build Coastguard WorkerEOF 365*25da2beaSAndroid Build Coastguard Workerif compile_prog "" "" "has_ucontext"; then 366*25da2beaSAndroid Build Coastguard Worker has_ucontext="yes" 367*25da2beaSAndroid Build Coastguard Workerfi 368*25da2beaSAndroid Build Coastguard Workerprint_config "has_ucontext" "$has_ucontext" 369*25da2beaSAndroid Build Coastguard Worker 370*25da2beaSAndroid Build Coastguard Worker########################################## 371*25da2beaSAndroid Build Coastguard Worker# check for memfd_create(2) 372*25da2beaSAndroid Build Coastguard Workerhas_memfd_create="no" 373*25da2beaSAndroid Build Coastguard Workercat > $TMPC << EOF 374*25da2beaSAndroid Build Coastguard Worker#include <sys/mman.h> 375*25da2beaSAndroid Build Coastguard Workerint main(int argc, char **argv) 376*25da2beaSAndroid Build Coastguard Worker{ 377*25da2beaSAndroid Build Coastguard Worker int memfd = memfd_create("test", 0); 378*25da2beaSAndroid Build Coastguard Worker return 0; 379*25da2beaSAndroid Build Coastguard Worker} 380*25da2beaSAndroid Build Coastguard WorkerEOF 381*25da2beaSAndroid Build Coastguard Workerif compile_prog "-Werror=implicit-function-declaration" "" "has_memfd_create"; then 382*25da2beaSAndroid Build Coastguard Worker has_memfd_create="yes" 383*25da2beaSAndroid Build Coastguard Workerfi 384*25da2beaSAndroid Build Coastguard Workerprint_config "has_memfd_create" "$has_memfd_create" 385*25da2beaSAndroid Build Coastguard Worker 386*25da2beaSAndroid Build Coastguard Worker 387*25da2beaSAndroid Build Coastguard Worker############################################################################# 388*25da2beaSAndroid Build Coastguard Workerif test "$liburing_nolibc" = "yes"; then 389*25da2beaSAndroid Build Coastguard Worker output_sym "CONFIG_NOLIBC" 390*25da2beaSAndroid Build Coastguard Workerelse 391*25da2beaSAndroid Build Coastguard Worker liburing_nolibc="no" 392*25da2beaSAndroid Build Coastguard Workerfi 393*25da2beaSAndroid Build Coastguard Workerprint_config "liburing_nolibc" "$liburing_nolibc" 394*25da2beaSAndroid Build Coastguard Worker 395*25da2beaSAndroid Build Coastguard Workerif test "$__kernel_rwf_t" = "yes"; then 396*25da2beaSAndroid Build Coastguard Worker output_sym "CONFIG_HAVE_KERNEL_RWF_T" 397*25da2beaSAndroid Build Coastguard Workerfi 398*25da2beaSAndroid Build Coastguard Workerif test "$__kernel_timespec" = "yes"; then 399*25da2beaSAndroid Build Coastguard Worker output_sym "CONFIG_HAVE_KERNEL_TIMESPEC" 400*25da2beaSAndroid Build Coastguard Workerfi 401*25da2beaSAndroid Build Coastguard Workerif test "$open_how" = "yes"; then 402*25da2beaSAndroid Build Coastguard Worker output_sym "CONFIG_HAVE_OPEN_HOW" 403*25da2beaSAndroid Build Coastguard Workerfi 404*25da2beaSAndroid Build Coastguard Workerif test "$statx" = "yes"; then 405*25da2beaSAndroid Build Coastguard Worker output_sym "CONFIG_HAVE_STATX" 406*25da2beaSAndroid Build Coastguard Workerfi 407*25da2beaSAndroid Build Coastguard Workerif test "$glibc_statx" = "yes"; then 408*25da2beaSAndroid Build Coastguard Worker output_sym "CONFIG_HAVE_GLIBC_STATX" 409*25da2beaSAndroid Build Coastguard Workerfi 410*25da2beaSAndroid Build Coastguard Workerif test "$has_cxx" = "yes"; then 411*25da2beaSAndroid Build Coastguard Worker output_sym "CONFIG_HAVE_CXX" 412*25da2beaSAndroid Build Coastguard Workerfi 413*25da2beaSAndroid Build Coastguard Workerif test "$has_ucontext" = "yes"; then 414*25da2beaSAndroid Build Coastguard Worker output_sym "CONFIG_HAVE_UCONTEXT" 415*25da2beaSAndroid Build Coastguard Workerfi 416*25da2beaSAndroid Build Coastguard Workerif test "$stringop_overflow" = "yes"; then 417*25da2beaSAndroid Build Coastguard Worker output_sym "CONFIG_HAVE_STRINGOP_OVERFLOW" 418*25da2beaSAndroid Build Coastguard Workerfi 419*25da2beaSAndroid Build Coastguard Workerif test "$array_bounds" = "yes"; then 420*25da2beaSAndroid Build Coastguard Worker output_sym "CONFIG_HAVE_ARRAY_BOUNDS" 421*25da2beaSAndroid Build Coastguard Workerfi 422*25da2beaSAndroid Build Coastguard Workerif test "$has_memfd_create" = "yes"; then 423*25da2beaSAndroid Build Coastguard Worker output_sym "CONFIG_HAVE_MEMFD_CREATE" 424*25da2beaSAndroid Build Coastguard Workerfi 425*25da2beaSAndroid Build Coastguard Worker 426*25da2beaSAndroid Build Coastguard Workerecho "CC=$cc" >> $config_host_mak 427*25da2beaSAndroid Build Coastguard Workerprint_config "CC" "$cc" 428*25da2beaSAndroid Build Coastguard Workerecho "CXX=$cxx" >> $config_host_mak 429*25da2beaSAndroid Build Coastguard Workerprint_config "CXX" "$cxx" 430*25da2beaSAndroid Build Coastguard Worker 431*25da2beaSAndroid Build Coastguard Worker# generate compat.h 432*25da2beaSAndroid Build Coastguard Workercompat_h="src/include/liburing/compat.h" 433*25da2beaSAndroid Build Coastguard Workercat > $compat_h << EOF 434*25da2beaSAndroid Build Coastguard Worker/* SPDX-License-Identifier: MIT */ 435*25da2beaSAndroid Build Coastguard Worker#ifndef LIBURING_COMPAT_H 436*25da2beaSAndroid Build Coastguard Worker#define LIBURING_COMPAT_H 437*25da2beaSAndroid Build Coastguard Worker 438*25da2beaSAndroid Build Coastguard WorkerEOF 439*25da2beaSAndroid Build Coastguard Worker 440*25da2beaSAndroid Build Coastguard Workerif test "$__kernel_rwf_t" != "yes"; then 441*25da2beaSAndroid Build Coastguard Workercat >> $compat_h << EOF 442*25da2beaSAndroid Build Coastguard Workertypedef int __kernel_rwf_t; 443*25da2beaSAndroid Build Coastguard Worker 444*25da2beaSAndroid Build Coastguard WorkerEOF 445*25da2beaSAndroid Build Coastguard Workerfi 446*25da2beaSAndroid Build Coastguard Workerif test "$__kernel_timespec" != "yes"; then 447*25da2beaSAndroid Build Coastguard Workercat >> $compat_h << EOF 448*25da2beaSAndroid Build Coastguard Worker#include <stdint.h> 449*25da2beaSAndroid Build Coastguard Worker 450*25da2beaSAndroid Build Coastguard Workerstruct __kernel_timespec { 451*25da2beaSAndroid Build Coastguard Worker int64_t tv_sec; 452*25da2beaSAndroid Build Coastguard Worker long long tv_nsec; 453*25da2beaSAndroid Build Coastguard Worker}; 454*25da2beaSAndroid Build Coastguard Worker 455*25da2beaSAndroid Build Coastguard WorkerEOF 456*25da2beaSAndroid Build Coastguard Workerelse 457*25da2beaSAndroid Build Coastguard Workercat >> $compat_h << EOF 458*25da2beaSAndroid Build Coastguard Worker#include <linux/time_types.h> 459*25da2beaSAndroid Build Coastguard Worker 460*25da2beaSAndroid Build Coastguard WorkerEOF 461*25da2beaSAndroid Build Coastguard Workerfi 462*25da2beaSAndroid Build Coastguard Workerif test "$open_how" != "yes"; then 463*25da2beaSAndroid Build Coastguard Workercat >> $compat_h << EOF 464*25da2beaSAndroid Build Coastguard Worker#include <inttypes.h> 465*25da2beaSAndroid Build Coastguard Worker 466*25da2beaSAndroid Build Coastguard Workerstruct open_how { 467*25da2beaSAndroid Build Coastguard Worker uint64_t flags; 468*25da2beaSAndroid Build Coastguard Worker uint64_t mode; 469*25da2beaSAndroid Build Coastguard Worker uint64_t resolve; 470*25da2beaSAndroid Build Coastguard Worker}; 471*25da2beaSAndroid Build Coastguard Worker 472*25da2beaSAndroid Build Coastguard WorkerEOF 473*25da2beaSAndroid Build Coastguard Workerelse cat >> $compat_h << EOF 474*25da2beaSAndroid Build Coastguard Worker#include <linux/openat2.h> 475*25da2beaSAndroid Build Coastguard Worker 476*25da2beaSAndroid Build Coastguard WorkerEOF 477*25da2beaSAndroid Build Coastguard Workerfi 478*25da2beaSAndroid Build Coastguard Workerif [ "$glibc_statx" = "no" ] && [ "$statx" = "yes" ]; then 479*25da2beaSAndroid Build Coastguard Workercat >> $compat_h << EOF 480*25da2beaSAndroid Build Coastguard Worker#include <sys/stat.h> 481*25da2beaSAndroid Build Coastguard Worker 482*25da2beaSAndroid Build Coastguard WorkerEOF 483*25da2beaSAndroid Build Coastguard Workerfi 484*25da2beaSAndroid Build Coastguard Worker 485*25da2beaSAndroid Build Coastguard Workercat >> $compat_h << EOF 486*25da2beaSAndroid Build Coastguard Worker#endif 487*25da2beaSAndroid Build Coastguard WorkerEOF 488