tinyvm/Makefile

66 lines
1.1 KiB
Makefile

CC = gcc
AS = as
CXXFLAGS = -Wall -pipe
CFLAGS = $(CXXFLAGS) -c
LFLAGS = $(CXXFLAGS)
ASFLAGS =
PEDANTIC_FLAGS = -ansi -pedantic -pedantic-errors
SOURCES = $(wildcard *.c)
AS_SOURCES = $(SOURCES:.c=.asm)
OBJECTS = $(SOURCES:.c=.o)
AS_OBJECTS = $(SOURCES:.c=.asm.o)
BIN_NAME = tinyvm
DEBUG = no
PROFILE = no
PEDANTIC = no
OPTIMIZATION = -O3
ifeq ($(DEBUG), yes)
CXXFLAGS += -g
OPTIMIZATION = -O0
BIN_NAME := $(BIN_NAME)-debug
endif
ifeq ($(PROFILE), yes)
CXXFLAGS += -pg
endif
ifeq ($(PEDANTIC), yes)
CXXFLAGS += $(PEDANTIC_FLAGS)
endif
CXXFLAGS += $(OPTIMIZATION)
all: tinyvm
# Build TVM from the C sources
tinyvm: $(OBJECTS)
$(CC) $(LFLAGS) $(OBJECTS) -o $(BIN_NAME)
# Assemble TVM from the assembly sources provided by AS_SOURCES
tinyvm-asm: $(AS_OBJECTS)
$(CC) $(LFLAGS) $(AS_OBJECTS) -o $(BIN_NAME)
# Compile TVM to assembly
asm: $(AS_SOURCES)
%.o: %.c
$(CC) $(CFLAGS) $< -o $@
%.asm.o: %.asm
$(AS) $(ASFLAGS) $< -o $@
%.asm: %.c
$(CC) -S -masm=intel $< -o $@
clean:
rm -f $(BIN_NAME) $(BIN_NAME)-debug gmon.out *.save *.o *.asm.o *.asm core* vgcore*
rebuild: clean tinyvm
.PHONY : clean
.SILENT : clean