CC = LC_ALL=C g++
CFLAGS += -Wall -Werror -g -O2
LFLAGS +=
NAME = nasmgen
SOURCES = $(wildcard *.cpp)
HEADERS = $(wildcard *.hpp)
OBJECTS = $(SOURCES:.cpp=.o)
PREFIX ?= /usr/local
$(NAME): $(OBJECTS)
$(CC) \
-o $(@) \
$(^)
%.o: %.cpp $(wildcard *.hpp) Makefile
$(CC) -c \
$(CFLAGS) \
$(<) \
-o $(@)
%.asm: %.$(NAME) $(NAME)
./$(NAME) \
$(<) \
> $(@)
%.asm.h: %.asm
@echo "#pragma once" > $(@)
@echo "extern \"C\" {" >> $(@)
grep "^; extern " $(<) | sed 's/^; / /' >> $(@)
@echo "}" >> $(@)
%.asm.o: %.asm %.asm.h
nasm -f elf64 \
-o $(@) \
$(<)
.PHONY: install
install: $(NAME)
@install -v -t "$(DESTDIR)$(PREFIX)/bin" $(^)
clean:
rm -f $(NAME) *.o *.asm *.asm.h