blob: 8cd0a21adfa0cf6972f4fcc27878002004117dbe [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_BC := libsc_dbg_rt.bca libpoolalloc_bitmap.bca
PA_RT_BC := $(addprefix $(PROJ_OBJ_ROOT)/$(CONFIGURATION)/lib/, $(PA_RT_BC))
PA_PRE_RT_BC := $(POOLALLOC_OBJDIR)/$(CONFIGURATION)/lib/libpa_pre_rt.bca
POOLSYSTEM_RT_BC := $(PROJ_OBJ_ROOT)/$(CONFIGURATION)/lib/libUserPoolSystem.bca
# Pre processing library for DSA
ASSIST_SO := $(POOLALLOC_OBJDIR)/$(CONFIGURATION)/lib/libAssistDS$(SHLIBEXT)
PRE_SC_OPT_FLAGS = -load $(ASSIST_SO) -instnamer -internalize -indclone -funcspec -ipsccp -deadargelim -instcombine -globaldce -licm
OPTZN_PASSES := -strip-debug -std-compile-opts $(EXTRA_LOPT_OPTIONS)
###
# Escape single quote for use in echo statements
#
squote := '
escsq = $(subst $(squote),'\$(squote)',$1)
quiet_cmd_safecode_transform = SC $<
cmd_safecode_transform = $(SC) $(SCFLAGS) $< -f -o $@
quiet_cmd_safecode_link_rt = SC-RT $<
cmd_safecode_link_rt = $(LLVMLDPROG) -disable-opt -link-as-library $? -o $@
quiet_cmd_as = CC $<
cmd_as = $(CC) $(CFLAGS) $< $(LLCLIBS) $(LDFLAGS) -o $@ -lstdc++ -lpthread -lm
ifeq ($(V),1)
echo-cmd = echo ' $(call escsq,$(cmd_$(1)))$'';
else
quiet := quiet_
echo-cmd = echo ' $(call escsq,$($(quiet)cmd_$(1)))$'';
endif
cmd = @$(echo-cmd) $(cmd_$(1))
#
# Create the SAFECode'ed executable from the assembly code
#
%.sc : %.s
@$(call cmd,as)
#
# 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) $(POOLSYSTEM_RT_BC)
$(call cmd,safecode_link_rt)
#
# Run SAFECode on the program.
#
%.bc.sc : %.bc.pa $(SC)
$(call cmd,safecode_transform)
#
# 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 $@