Add autotools build system (static-only, C17)
configure.ac enforces C17 and Linux/x86_64, refuses in-tree configure; Makefile.am builds libc.a plus crt0.o; the driver Makefile dispatches out-of-tree builds into bin/release (-O2) and bin/debug (-O0 -g). Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <[email protected]>
This commit is contained in:
+66
@@ -0,0 +1,66 @@
|
||||
# Makefile.am — nulsl-libc
|
||||
#
|
||||
# This is the AUTOTOOLS makefile. It is only ever instantiated by a configure
|
||||
# run inside bin/release/ or bin/debug/ (never at the repository root).
|
||||
#
|
||||
# Everything is a static library. No libtool, no shared objects, no dynamic
|
||||
# linker. See docs/architecture.md.
|
||||
#
|
||||
# Benchmarks and tests live in one Makefile on purpose: automake orders
|
||||
# targets by dependency, so libc.a (and crt0.o) are guaranteed to exist
|
||||
# before any -nostdlib binary links against them. With SUBDIRS, recursion
|
||||
# builds the subdirectories first and linking breaks.
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/include
|
||||
AM_CFLAGS = -std=c17 -ffreestanding -fno-builtin -fno-stack-protector \
|
||||
-Wall -Wextra -Wshadow -Wpointer-arith
|
||||
|
||||
lib_LIBRARIES = libc.a
|
||||
|
||||
libc_a_SOURCES = \
|
||||
src/errno.c \
|
||||
src/stdio.c \
|
||||
src/stdlib.c \
|
||||
src/string.c \
|
||||
src/syscall.c \
|
||||
src/unistd.c
|
||||
|
||||
# The C runtime entry point is deliberately NOT a member of libc.a: nothing
|
||||
# references _start, so the linker would never extract it from an archive.
|
||||
# It is built as a standalone object and linked explicitly by everything
|
||||
# that wants a runnable binary.
|
||||
noinst_DATA = crt0.o
|
||||
crt0.o: $(top_srcdir)/src/crt/crt0.S
|
||||
$(CC) $(AM_CPPFLAGS) $(CFLAGS) -c -o $@ $<
|
||||
CLEANFILES = crt0.o
|
||||
|
||||
EXTRA_DIST = autogen.sh
|
||||
|
||||
# --- benchmarks ------------------------------------------------------------
|
||||
# Fully static, -nostdlib: the numbers reflect exactly what ships.
|
||||
|
||||
noinst_PROGRAMS = benchmarks/bench_strlen benchmarks/bench_syscall
|
||||
|
||||
benchmarks_bench_strlen_SOURCES = benchmarks/bench_strlen.c
|
||||
benchmarks_bench_strlen_LDADD = crt0.o libc.a -lgcc
|
||||
benchmarks_bench_strlen_LDFLAGS = -nostdlib -static -no-pie -Wno-unused-command-line-argument
|
||||
|
||||
benchmarks_bench_syscall_SOURCES = benchmarks/bench_syscall.c
|
||||
benchmarks_bench_syscall_LDADD = crt0.o libc.a -lgcc
|
||||
benchmarks_bench_syscall_LDFLAGS = -nostdlib -static -no-pie -Wno-unused-command-line-argument
|
||||
|
||||
.PHONY: bench
|
||||
bench: all
|
||||
./benchmarks/bench_strlen
|
||||
./benchmarks/bench_syscall
|
||||
|
||||
# --- tests ------------------------------------------------------------------
|
||||
|
||||
check_PROGRAMS = tests/smoke
|
||||
TESTS = tests/smoke
|
||||
|
||||
tests_smoke_SOURCES = tests/smoke.c
|
||||
tests_smoke_LDADD = crt0.o libc.a -lgcc
|
||||
tests_smoke_LDFLAGS = -nostdlib -static -no-pie -Wno-unused-command-line-argument
|
||||
Reference in New Issue
Block a user