CCFLAGS := -std=c++17
CCFLAGS_32 := $(CCFLAGS) -m32
LDFLAGS := -lbacktrace

PROGRAMS := casts fn_ptr primitives ptrs struct typeid vtable2
PROGRAMS_32 := casts_32 fn_ptr_32 ptrs_32 struct_32 typeid_32 vtable2_32
DUMP_FILES := dump.o columns.o syminfo.o
DUMP_FILES_32 := $(patsubst %.o,%_32.o,$(DUMP_FILES))

all: $(PROGRAMS) $(PROGRAMS_32)

.PHONY: clean
clean:
	rm $(PROGRAMS) $(PROGRAMS_32) $(DUMP_FILES) $(DUMP_FILES_32)

.SUFFIXES:
%: %.cpp $(DUMP_FILES)
	g++ $(CCFLAGS) -o $@ $< $(DUMP_FILES) $(LDFLAGS)

%_32: %.cpp $(DUMP_FILES_32)
	g++ $(CCFLAGS_32) -o $@ $< $(DUMP_FILES_32) $(LDFLAGS)

dump.o: dump.cpp dump.h column.h columns.h
	g++ $(CCFLAGS) -c -o dump.o dump.cpp
columns.o: columns.cpp columns.h column.h syminfo.h
	g++ $(CCFLAGS) -c -o columns.o columns.cpp
syminfo.o: syminfo.cpp syminfo.h
	g++ $(CCFLAGS) -c -o syminfo.o syminfo.cpp

dump_32.o: dump.cpp dump.h column.h columns.h
	g++ $(CCFLAGS_32) -c -o dump_32.o dump.cpp
columns_32.o: columns.cpp columns.h column.h syminfo.h
	g++ $(CCFLAGS_32) -c -o columns_32.o columns.cpp
syminfo_32.o: syminfo.cpp syminfo.h
	g++ $(CCFLAGS_32) -c -o syminfo_32.o syminfo.cpp
