Files
wren/Makefile
Bob Nystrom 8417fadc2f Make all heap objects store a reference to their class and inline class lookup.
This is redundant, but significantly optimizes method dispatch:

binary_trees - wren           ..........  3347  0.30s  110.30% relative to baseline
delta_blue - wren             ..........  7161  0.14s  110.39% relative to baseline
fib - wren                    ..........  2445  0.41s  112.78% relative to baseline
for - wren                    ..........  8600  0.12s  143.00% relative to baseline
method_call - wren            ..........  5112  0.20s  114.15% relative to baseline
2014-12-07 14:29:50 -08:00

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