Move the class pointer from ObjInstance into the base Obj struct and remove the separate metaclass field from ObjClass, allowing all heap objects to directly reference their class. Add an inlined wrenGetClassInline function in the header to eliminate function call overhead during method dispatch, yielding 10-43% performance gains across benchmarks.
63 lines
1.4 KiB
Makefile
63 lines
1.4 KiB
Makefile
# Compiler flags.
|
|
CFLAGS = -std=c99 -Wall -Werror
|
|
# TODO: Add -Wextra.
|
|
DEBUG_CFLAGS = -O0 -DDEBUG
|
|
RELEASE_CFLAGS = -Os
|
|
|
|
# Files.
|
|
SOURCES = $(wildcard src/*.c)
|
|
HEADERS = $(wildcard src/*.h)
|
|
OBJECTS = $(SOURCES:.c=.o)
|
|
|
|
DEBUG_OBJECTS = $(addprefix build/debug/, $(notdir $(OBJECTS)))
|
|
RELEASE_OBJECTS = $(addprefix build/release/, $(notdir $(OBJECTS)))
|
|
|
|
.PHONY: all clean test builtin docs watchdocs
|
|
|
|
all: release
|
|
|
|
clean:
|
|
@rm -rf build wren wrend
|
|
|
|
prep:
|
|
@mkdir -p build/debug build/release
|
|
|
|
# Debug build.
|
|
debug: prep wrend
|
|
|
|
# Debug command-line interpreter.
|
|
wrend: $(DEBUG_OBJECTS)
|
|
$(CC) $(CFLAGS) $(DEBUG_CFLAGS) -Iinclude -lm -o wrend $^
|
|
|
|
# Debug object files.
|
|
build/debug/%.o: src/%.c include/wren.h $(HEADERS)
|
|
$(CC) -c $(CFLAGS) $(DEBUG_CFLAGS) -Iinclude -o $@ $<
|
|
|
|
# Release build.
|
|
release: prep wren
|
|
|
|
# Release command-line interpreter.
|
|
wren: $(RELEASE_OBJECTS)
|
|
$(CC) $(CFLAGS) $(RELEASE_CFLAGS) -Iinclude -lm -o wren $^
|
|
|
|
# Release object files.
|
|
build/release/%.o: src/%.c include/wren.h $(HEADERS)
|
|
$(CC) -c $(CFLAGS) $(RELEASE_CFLAGS) -Iinclude -o $@ $<
|
|
|
|
# Run the tests against the debug build of Wren.
|
|
test: debug
|
|
@./script/test.py $(suite)
|
|
|
|
# Take the contents of the scripts under builtin/ and copy them into their
|
|
# respective wren_<name>.c source files.
|
|
builtin:
|
|
@./script/generate_builtins.py
|
|
|
|
# Generate the Wren site.
|
|
docs:
|
|
@./script/generate_docs.py
|
|
|
|
# Continuously generate the Wren site.
|
|
watchdocs:
|
|
@./script/generate_docs.py --watch
|