1eba8b6baSopenharmony_ci//! A small C program which prints out ioctl codes to generate a header file
2eba8b6baSopenharmony_ci//! that bindgen can generate bindings from.
3eba8b6baSopenharmony_ci
4eba8b6baSopenharmony_ci#include <stdio.h>
5eba8b6baSopenharmony_ci#include <stdlib.h>
6eba8b6baSopenharmony_ci#include <string.h>
7eba8b6baSopenharmony_ci
8eba8b6baSopenharmony_civoid list(void);
9eba8b6baSopenharmony_ci
10eba8b6baSopenharmony_cistatic FILE *generated;
11eba8b6baSopenharmony_ci
12eba8b6baSopenharmony_civoid entry(const char *s) {
13eba8b6baSopenharmony_ci    if (fprintf(generated, "%s\n", s) != strlen(s) + 1) {
14eba8b6baSopenharmony_ci	fprintf(stderr, "can't write to generated.txt: %m\n");
15eba8b6baSopenharmony_ci	exit(1);
16eba8b6baSopenharmony_ci    }
17eba8b6baSopenharmony_ci}
18eba8b6baSopenharmony_ci
19eba8b6baSopenharmony_ciint main(void) {
20eba8b6baSopenharmony_ci    generated = fopen("generated.txt", "w");
21eba8b6baSopenharmony_ci    if (generated == NULL) {
22eba8b6baSopenharmony_ci	fprintf(stderr, "can't open generated.txt: %m\n");
23eba8b6baSopenharmony_ci	exit(EXIT_FAILURE);
24eba8b6baSopenharmony_ci    }
25eba8b6baSopenharmony_ci
26eba8b6baSopenharmony_ci#if defined(__i386__)
27eba8b6baSopenharmony_ci    printf("#ifdef __i386__\n");
28eba8b6baSopenharmony_ci#elif defined(__x86_64__)
29eba8b6baSopenharmony_ci    printf("#ifdef __x86_64__\n");
30eba8b6baSopenharmony_ci#elif defined(__arm__)
31eba8b6baSopenharmony_ci    printf("#ifdef __arm__\n");
32eba8b6baSopenharmony_ci#elif defined(__aarch64__)
33eba8b6baSopenharmony_ci    printf("#ifdef __aarch64__\n");
34eba8b6baSopenharmony_ci#elif defined(__powerpc__)
35eba8b6baSopenharmony_ci    printf("#ifdef __powerpc__\n");
36eba8b6baSopenharmony_ci#elif defined(__powerpc64__)
37eba8b6baSopenharmony_ci    printf("#ifdef __powerpc64__\n");
38eba8b6baSopenharmony_ci#elif __mips == 32
39eba8b6baSopenharmony_ci    printf("#if __mips == 32\n");
40eba8b6baSopenharmony_ci#elif __mips == 64
41eba8b6baSopenharmony_ci    printf("#if __mips == 64\n");
42eba8b6baSopenharmony_ci#elif defined(__riscv) && __riscv_xlen == 64
43eba8b6baSopenharmony_ci    printf("#if defined(__riscv) && __riscv_xlen == 64\n");
44eba8b6baSopenharmony_ci#else
45eba8b6baSopenharmony_ci#error "unimplemented architecture"
46eba8b6baSopenharmony_ci#endif
47eba8b6baSopenharmony_ci
48eba8b6baSopenharmony_ci    list();
49eba8b6baSopenharmony_ci
50eba8b6baSopenharmony_ci    int r = printf("#endif\n");
51eba8b6baSopenharmony_ci    return r != 7;
52eba8b6baSopenharmony_ci}
53