xref: /aosp_15_r20/external/liburing/configure (revision 25da2bea747f3a93b4c30fd9708b0618ef55a0e6)
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