mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
115 lines
3.5 KiB
Bash
Executable file
115 lines
3.5 KiB
Bash
Executable file
#!/bin/sh
|
|
# Verifies whether the system headers compiles with the mix of architecture,
|
|
# language standard version, and feature macros.
|
|
set -e
|
|
target="$1"
|
|
case $target in
|
|
i686-sortix) libm_machine=libm/arch/i387 ;;
|
|
x86_64-sortix) libm_machine=libm/arch/x86_64 ;;
|
|
esac
|
|
std="$2"
|
|
feature="$3"
|
|
(printf '.PHONY: all\n'
|
|
printf 'all:\n'
|
|
for header in \
|
|
$(find libc/include -type f | sort) \
|
|
$(find libm/include -type f | sort) \
|
|
$(find kernel/include -type f | grep -Ev '^kernel/include/sortix/kernel/'| sort); do
|
|
case $std in
|
|
*-ansi*pedantic* | \
|
|
*89*pedantic* | \
|
|
*90*pedantic*)
|
|
case $header in
|
|
libc/include/assert.h | \
|
|
libc/include/ctype.h | \
|
|
libc/include/errno.h | \
|
|
libc/include/limits.h | \
|
|
libc/include/locale.h | \
|
|
libc/include/setjmp.h | \
|
|
libc/include/signal.h | \
|
|
libc/include/stdarg.h | \
|
|
libc/include/stddef.h | \
|
|
libc/include/stdlib.h | \
|
|
libc/include/string.h | \
|
|
libm/include/float.h | \
|
|
libm/include/math.h) ;;
|
|
*) continue ;;
|
|
esac ;;
|
|
# TODO: Unsupported because fpos_t and time_t must be long long.
|
|
# These headers could use typedef __extension__ long long foo;
|
|
#libc/include/stdio.h | \
|
|
#libc/include/time.h | \
|
|
*99*pedantic*)
|
|
case $header in
|
|
libc/include/assert.h | \
|
|
libc/include/ctype.h | \
|
|
libc/include/errno.h | \
|
|
libc/include/inttypes.h | \
|
|
libc/include/iso646.h | \
|
|
libc/include/limits.h | \
|
|
libc/include/locale.h | \
|
|
libc/include/setjmp.h | \
|
|
libc/include/signal.h | \
|
|
libc/include/stdarg.h | \
|
|
libc/include/stdbool.h | \
|
|
libc/include/stddef.h | \
|
|
libc/include/stdint.h | \
|
|
libc/include/stdio.h | \
|
|
libc/include/stdlib.h | \
|
|
libc/include/string.h | \
|
|
libc/include/time.h | \
|
|
libc/include/wchar.h | \
|
|
libc/include/wctype.h | \
|
|
libm/include/complex.h | \
|
|
libm/include/float.h | \
|
|
libm/include/fenv.h | \
|
|
libm/include/math.h | \
|
|
libm/include/tgmath.h) ;;
|
|
*) continue ;;
|
|
esac ;;
|
|
*11*pedantic*)
|
|
case $header in
|
|
libc/include/assert.h | \
|
|
libc/include/ctype.h | \
|
|
libc/include/errno.h | \
|
|
libc/include/inttypes.h | \
|
|
libc/include/iso646.h | \
|
|
libc/include/limits.h | \
|
|
libc/include/locale.h | \
|
|
libc/include/setjmp.h | \
|
|
libc/include/signal.h | \
|
|
libc/include/stdalign.h | \
|
|
libc/include/stdarg.h | \
|
|
libc/include/stdatomic.h | \
|
|
libc/include/stdbool.h | \
|
|
libc/include/stddef.h | \
|
|
libc/include/stdint.h | \
|
|
libc/include/stdio.h | \
|
|
libc/include/stdlib.h | \
|
|
libc/include/stdnoreturn.h | \
|
|
libc/include/string.h | \
|
|
libc/include/threads.h | \
|
|
libc/include/time.h | \
|
|
libc/include/uchar.h | \
|
|
libc/include/wchar.h | \
|
|
libc/include/wctype.h | \
|
|
libm/include/complex.h | \
|
|
libm/include/float.h | \
|
|
libm/include/fenv.h | \
|
|
libm/include/math.h | \
|
|
libm/include/tgmath.h) ;;
|
|
*) continue ;;
|
|
esac ;;
|
|
esac
|
|
printf 'all: %s\n' "$header"
|
|
printf '.PHONY: %s\n' "$header"
|
|
printf '%s:\n' "$header"
|
|
case $std in
|
|
*++*)
|
|
printf '\t@%s\n' "$target-g++ $std $feature -c $header -o /dev/null -O3 -Wall -Wextra -Wsystem-headers -Werror -I libc/include -I libm/include -I $libm_machine -I kernel/include"
|
|
;;
|
|
*)
|
|
printf '\t@%s\n' "$target-gcc $std $feature -c $header -o /dev/null -O3 -Wall -Wextra -Wsystem-headers -Werror -I libc/include -I libm/include -I $libm_machine -I kernel/include"
|
|
;;
|
|
esac
|
|
done) | make -f - --no-print-directory
|