Makefile 2.93 KB
# Makefile for building all tests of isolated FPU/SWAR operations

SRCDIR=src
DSTDIR=_build

CC=clang
LC=llc
LDIS=llvm-dis

TOOLCHAIN=sparc-daiteq-elf
AS=$(TOOLCHAIN)-as
LD=$(TOOLCHAIN)-ld
OBJDUMP=$(TOOLCHAIN)-objdump

#LCFLAGS=-debug-pass=Structure -debug --asm-verbose
#LCFLAGS=-debug --print-machineinstrs -view-dag-combine1-dags

TESTBASE = $(basename $(notdir $(SOURCE)))
OUTDIR = $(DSTDIR)/$(SUBDIR)/$(basename $(SOURCE))
OUTFILES = $(OUTDIR)/$(TESTBASE)
PATHSOURCE = $(SRCDIR)/$(SUBDIR)/$(SOURCE)

DEFS = $(shell ./scripts/get_defines $(PATHSOURCE) D)
ASMALLFLAGS = $(shell ./scripts/get_defines $(PATHSOURCE) A)
ASFLAGS = $(ASMALLFLAGS:%=-Xassembler %)

ALLSRCDIRS:=$(sort $(notdir $(wildcard $(SRCDIR)/*)))

ALLSOURCES=$(sort $(notdir $(wildcard $(SRCDIR)/$(SRCSUBDIR)/*.c)))

.PHONY: all clean build_one build_dir $(OUTDIR)

# process all test directory
all: $(DSTDIR)
	@for i in $(ALLSRCDIRS); do \
	  echo "Build for $$i \n"; \
	  mkdir -p $(DSTDIR)/$$i; \
	  make -C $(PWD) -f Makefile build_dir SRCSUBDIR=$$i PHASE=zero; \
	done
	@echo "All tests done\n"

test:
	@echo "Srcs : $(ALLSOURCES)"

clean:
	rm -fr $(ALLSOURCES:%=$(DSTDIR)/%/*)
#	rm -fr $(DSTDIR)/*


build_dir:
	@for i in $(ALLSOURCES); do \
	  echo "  Build $(SRCDIR)/$(SRCSUBDIR)/$$i \n"; \
	  make -C $(PWD) -f Makefile build_one SUBDIR=$(SRCSUBDIR) SOURCE=$$i PHASE=one; \
	done
	@echo "Done in subdirectory $(SRCSUBDIR)"

build_one: $(OUTDIR)/done
	@echo "  ... done in '$(OUTDIR)'"


$(DSTDIR):
	@echo "Create build directory"
	@mkdir -p $(DSTDIR)

$(OUTDIR):
	@mkdir -p $(OUTDIR)


$(OUTFILES).ast: $(PATHSOURCE)
	@echo "Parse $(PATHSOURCE) to $(OUTFILES).ast"
	@$(CC) -Xclang -ast-dump -fno-color-diagnostics -S $(TEST_CFLAGS) $(DEFS) $(CFLGS) $(PATHSOURCE) >$(OUTFILES).ast 2>$(OUTFILES).ast_err

$(OUTFILES).ll: $(PATHSOURCE)
	@echo "Create IR $(OUTFILES).ll from $(PATHSOURCE)"
	@$(CC) -emit-llvm $(TEST_CFLAGS) $(DEFS) $(CFLGS) $(PATHSOURCE) -S -o $(OUTFILES).ll 2>$(OUTFILES).ll_err

$(OUTFILES).bc: $(PATHSOURCE)
	@echo "Create binary IR $(OUTFILES).bc from $(PATHSOURCE)"
	@$(CC) -emit-llvm $(TEST_CFLAGS) $(DEFS) $(CFLGS) $(PATHSOURCE) -c -o $(OUTFILES).bc 2>$(OUTFILES).bc_err

$(OUTFILES)-dis.ll: $(OUTFILES).bc
	@echo "Disassembly IR $(OUTFILES).bc to $(OUTFILES)-dis.ll"
	@$(LDIS) < $(OUTFILES).bc 1>$(OUTFILES)-dis.ll 2>$(OUTFILES)-dis.ll_err

$(OUTFILES).S: $(OUTFILES).bc
	@echo "Compile IR $(OUTFILES).bc to target ASM $(OUTFILES).S"
	@$(LC) $(OUTFILES).bc $(LCFLAGS) -o $(OUTFILES).S 2>$(OUTFILES).S_err

$(OUTFILES).o: $(OUTFILES).S
	@echo "Compile IR $(OUTFILES).bc to target ASM $(OUTFILES).S"
	@$(CC) -target $(TOOLCHAIN) $(TEST_CFLAGS) $(DEFS) $(CFLGS) $(ASFLAGS) -c $(PATHSOURCE) -o $(OUTFILES).o 2>$(OUTFILES).obj_err

$(OUTFILES).dis: $(OUTFILES).o
	@echo "Disassembly object $(OUTFILES).o to $(OUTFILES).dis"
	@$(OBJDUMP) -Sdt $(OUTFILES).o >$(OUTFILES).dis 2>$(OUTFILES).dis_err

$(OUTDIR)/done: $(OUTDIR) $(OUTFILES).ast $(OUTFILES).ll $(OUTFILES)-dis.ll $(OUTFILES).dis
	@touch $(OUTDIR)/done