blob: 57edb68cde788c8598db83c99833453baa23e7ec [file] [log] [blame]
##===- safecode/test/Makefile.rules---------------------*- Makefile -*-===##
#
# This file defines how to generate SAFECode files from bitcodes.
#
##===------------------------------------------------------------------===##
SC := $(LLVM_OBJ_ROOT)/projects/safecode/$(CONFIGURATION)/bin/sc
PA_RT_FILES = libsc_dbg_rt.bca libpoolalloc_bitmap.bca
PA_RT_BC := $(addprefix $(PROJ_OBJ_ROOT)/$(CONFIGURATION)/lib/, $(PA_RT_FILES))
PA_PRE_RT_BC := $(POOLALLOC_OBJDIR)/$(CONFIGURATION)/lib/libpa_pre_rt.bca
POOLSYSTEM_RT_BC := $(PROJ_OBJ_ROOT)/$(CONFIGURATION)/lib/libUserPoolSystem.bca
#
# Pathnames to libraries containing LLVM analysis and transform passes
#
DSA_SO := $(POOLALLOC_OBJDIR)/$(CONFIGURATION)/lib/libLLVMDataStructure$(SHLIBEXT)
ASSIST_SO := $(POOLALLOC_OBJDIR)/$(CONFIGURATION)/lib/libAssistDS$(SHLIBEXT)
PRE_SC_OPT_FLAGS = -load $(DSA_SO) -load $(ASSIST_SO) -instnamer -internalize -indclone -funcspec -ipsccp -deadargelim -instcombine -globaldce -licm
OPTZN_PASSES := -strip-debug -std-compile-opts $(EXTRA_LOPT_OPTIONS)
#
# Create the SAFECode'ed executable from the assembly code
#
ifeq ($(OS),Darwin)
%.sc: %.s
$(CC) $(CFLAGS) $< $(LLCLIBS) $(LDFLAGS) -o $@ -lstdc++ -lpthread -lm
else
%.sc: %.s
$(CC) $(CFLAGS) $< $(LLCLIBS) $(LDFLAGS) -o $@ -lstdc++ -lrt -lpthread -lm
endif
#
# Generate assembly code from the optimized, SAFECode'd program.
#
%.s: %.bc.scopt
echo "LLC" $<
$(LLC) $(LLCFLAGS) -f $< -o $@
#
# Take the output of SAFECode, link in the SAFECode run-time, and optimize it.
#
%.bc.scopt: %.bc.sc.linked
echo "OPT" $<
$(LOPT) $(OPTZN_PASSES) $< -f -o $@
%.bc.sc.linked: %.bc.sc $(PA_RT_BC)
$(LLVMLDPROG) -disable-opt -link-as-library $? -o $@
#
# Run SAFECode on the program.
#
%.bc.sc: %.bc.pa $(SC)
$(SC) $(SCFLAGS) $< -f -o $@
#
# Do initial linking of the SAFECode run-time and optimize the program.
#
%.bc.pa: %.bc.pa.linked
@echo "PA-OPT" $<
@$(LOPT) $(PRE_SC_OPT_FLAGS) $< -f -o $@
%.bc.pa.linked: %.bc $(PA_PRE_RT_BC)
@echo "PA-RT" $<
@$(LLVMLDPROG) $(LLVMLDFLAGS) -disable-opt -link-as-library $< $(PA_PRE_RT_BC) -o $@