Ну, так как ответа пока нет, я мог бы также описать, как я сделал эту работу. Это довольно просто, хотя в зависимости от целевой системы это может быть утомительно.
Использование «-nostdinc» означает, что пути к стандартной системе включают пути, которые будут пропущены; другие пути включения, указанные с "-I", конечно же, будут все еще искать заголовки.
Итак, для цели автономной сборки я создаю папку include-freestanding-c89 и связываю соответствующие системные заголовки - float.h , iso646.h , limit.h , stdarg.h и stddef.h - там. Другие заголовки могут быть включены в них, в зависимости от вашей платформы, поэтому вам, возможно, придется провести некоторое исследование и настроить дополнительные ссылки (отсюда и утомительность, если вам нужно сделать это для нескольких целевых платформ).
Каталог C89 можно затем использовать в качестве базы для include-freestanding-c99, дополнительные заголовки для ссылки: stdbool.h и stdint.h
Используемая тогда командная строка
gcc -std=c89 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c89
или
gcc -std=c99 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c99