-
Akash Kothari authoredAkash Kothari authored
Makefile 6.58 KiB
# This Makefile compiles the HPVM-CAVA pilot project.
# It builds HPVM-related dependencies, then the native camera pipeline ISP code.
#
# Paths to some dependencies (e.g., HPVM, LLVM) must exist in Makefile.config,
# which can be copied from Makefile.config.example for a start.
CONFIG_FILE := Makefile.config
ifeq ($(wildcard $(CONFIG_FILE)),)
$(error $(CONFIG_FILE) not found. See $(CONFIG_FILE).example)
endif
include $(CONFIG_FILE)
# Compiler Flags
DLEVEL ?= 0
LFLAGS += -lm -lrt
# Build dirs
ifeq ($(VERSION),)
VERSION = IR_modules
endif
SRC_DIR = src/
CAM_PIPE_SRC_DIR = $(SRC_DIR)
BUILD_DIR = build/$(TARGET)_$(VERSION)
CURRENT_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
# Source files for the frontend camera pipeline
COMMON_SRCS = main.c \
#CAM_PIPE_SRCS = load_cam_model.c \
cam_pipe_utility.c \
dma_interface.c # FIXME: This is a hack until external C++ files can be included in build.
# NOTE: We have temporarily removed gem5 and other dependencies for simplicity.
SRCS = $(COMMON_SRCS)
# NATIVE_FULL_PATH_SRCS contains all the full path source files for the camera vision pipeline.
NATIVE_FULL_PATH_SRCS = $(patsubst %, $(SRC_DIR)/%, $(COMMON_SRCS))
NATIVE_FULL_PATH_SRCS += $(patsubst %, $(CAM_PIPE_SRC_DIR)/%, $(CAM_PIPE_SRCS))
INCLUDES += -I$(SRC_DIR) \
-I$(CAM_PIPE_SRC_DIR) \
ifneq ($(CONFUSE_ROOT),)
INCLUDES += -I$(CONFUSE_ROOT)/include
LFLAGS += -L$(CONFUSE_ROOT)/lib
endif
EXE = vec_add
CAM_CFLAGS += -mf16c -flax-vector-conversions
LFLAGS += -pthread
## BEGIN HPVM MAKEFILE
LANGUAGE=visc
#SRCDIR_OBJS= load_cam_model.ll cam_pipe_utility.ll dma_interface.ll utility.ll
#OBJS_SRC=src/cam_pipe.c src/pipe_stages.c src/load_cam_model.c src/cam_pipe_utility.c src/dma_interface.c src/utility.c
VISC_OBJS=main.visc.ll
APP = $(EXE)
APP_CUDALDFLAGS=-lm -lstdc++
APP_CFLAGS= $(INCLUDES) -DDMA_MODE -DDMA_INTERFACE_V3
APP_CXXFLAGS=-ffast-math -O0 -I/opt/opencv/include
APP_LDFLAGS=$(LFLAGS)
OPT_FLAGS = -tti -targetlibinfo -tbaa -scoped-noalias -assumption-cache-tracker -profile-summary-info -forceattrs -inferattrs -ipsccp -globalopt -domtree -mem2reg -deadargelim -domtree -basicaa -aa -simplifycfg -pgo-icall-prom -basiccg -globals-aa -prune-eh -always-inline -functionattrs -domtree -sroa -early-cse -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -domtree -basicaa -aa -libcalls-shrinkwrap -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa-verification -lcssa -basicaa -aa -scalar-evolution -loop-rotate -licm -loop-unswitch -simplifycfg -domtree -basicaa -aa -loops -loop-simplify -lcssa-verification -lcssa -scalar-evolution -indvars -loop-idiom -loop-deletion -memdep -memcpyopt -sccp -domtree -demanded-bits -bdce -basicaa -aa -lazy-value-info -jump-threading -correlated-propagation -domtree -basicaa -aa -memdep -dse -loops -loop-simplify -lcssa-verification -lcssa -aa -scalar-evolution -licm -postdomtree -adce -simplifycfg -domtree -basicaa -aa -barrier -basiccg -rpo-functionattrs -globals-aa -float2int -domtree -loops -loop-simplify -lcssa-verification -lcssa -basicaa -aa -scalar-evolution -loop-rotate -loop-accesses -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -loop-distribute -loop-simplify -lcssa-verification -lcssa -branch-prob -block-freq -scalar-evolution -basicaa -aa -loop-accesses -demanded-bits -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -loop-vectorize -loop-simplify -scalar-evolution -aa -loop-accesses -loop-load-elim -basicaa -aa -simplifycfg -domtree -basicaa -aa -loops -scalar-evolution -alignment-from-assumptions -strip-dead-prototypes -domtree -loops -branch-prob -block-freq -loop-simplify -lcssa-verification -lcssa -basicaa -aa -scalar-evolution -branch-prob -block-freq -loop-sink -instsimplify
CFLAGS = -O1 $(APP_CFLAGS) $(PLATFORM_CFLAGS)
OBJS_CFLAGS = -O1 $(APP_CFLAGS) $(PLATFORM_CFLAGS)
CXXFLAGS = $(APP_CXXFLAGS) $(PLATFORM_CXXFLAGS)
LDFLAGS= $(APP_LDFLAGS) $(PLATFORM_LDFLAGS)
LIBCLC_LIB_PATH = $(LLVM_SRC_ROOT)/../libclc/built_libs
#VISC_RT_PATH = $(LLVM_SRC_ROOT)/projects/visc-rt
VISC_RT_PATH = $(LLVM_SRC_ROOT)/tools/hpvm/projects/visc-rt
VISC_RT_LIB = $(VISC_RT_PATH)/visc-rt.ll
LIBCLC_NVPTX_LIB = $(LIBCLC_LIB_PATH)/nvptx64--nvidiacl.bc
LLVM_34_AS = $(LLVM_34_ROOT)/build/bin/llvm-as
TESTGEN_OPTFLAGS = -load LLVMGenVISC.so -genvisc -globaldce
KERNEL_GEN_FLAGS = -O3 -target nvptx64-nvidia-nvcl
DEVICE = CPU_TARGET
VISC_OPTFLAGS = -load LLVMBuildDFG.so -load LLVMDFG2LLVM_X86.so -load LLVMClearDFG.so -dfg2llvm-x86 -clearDFG
VISC_OPTFLAGS += -visc-timers-x86
TESTGEN_OPTFLAGS += -visc-timers-gen
CFLAGS += -DDEVICE=$(DEVICE)
CXXFLAGS += -DDEVICE=$(DEVICE)
# Add BUILDDIR as a prefix to each element of $1
INBUILDDIR=$(addprefix $(BUILD_DIR)/,$(1))
PYTHON_LLVM_40_34 = ../llvm-40-34.py
.PRECIOUS: $(BUILD_DIR)/%.ll
OBJS = $(call INBUILDDIR,$(SRCDIR_OBJS))
TEST_OBJS = $(call INBUILDDIR,$(VISC_OBJS))
KERNEL = $(TEST_OBJS).kernels.ll
ifeq ($(TARGET),x86)
SPIR_ASSEMBLY = $(TEST_OBJS).kernels.bc
else ifeq ($(TARGET),seq)
else ifeq ($(TARGET),fpga)
AOC_CL = $(TEST_OBJS).kernels.cl
AOCL_ASSEMBLY = $(TEST_OBJS).kernels.aocx
BOARD = a10gx
ifeq ($(EMULATION),1)
EXE = cava-visc-emu
AOC_EMU = -march=emulator
BUILD_DIR = build/$(TARGET)-emu
endif
else
KERNEL_LINKED = $(BUILD_DIR)/$(APP).kernels.linked.ll
PTX_ASSEMBLY = $(TEST_OBJS).nvptx.s
endif
HOST_LINKED = $(BUILD_DIR)/$(APP).linked.ll
HOST = $(BUILD_DIR)/$(APP).host.ll
ifeq ($(OPENCL_PATH),)
FAILSAFE=no_opencl
else
FAILSAFE=
endif
# Targets
default: $(FAILSAFE) $(BUILD_DIR) $(EXE)
#default: $(FAILSAFE) $(BUILD_DIR) $(PTX_ASSEMBLY) $(SPIR_ASSEMBLY) $(AOC_CL) $(AOCL_ASSEMBLY) $(EXE)
$(PTX_ASSEMBLY) : $(KERNEL_LINKED)
$(CC) $(KERNEL_GEN_FLAGS) -S $< -o $@
$(KERNEL_LINKED) : $(KERNEL)
$(LLVM_LINK) $(LIBCLC_NVPTX_LIB) -S $< -o $@
$(SPIR_ASSEMBLY) : $(KERNEL)
python $(PYTHON_LLVM_40_34) $< $(BUILD_DIR)/kernel_34.ll
$(LLVM_34_AS) $(BUILD_DIR)/kernel_34.ll -o $@
$(AOCL_ASSEMBLY) : $(AOC_CL)
aoc --report $(AOC_EMU) $(AOC_CL) -o $(AOCL_ASSEMBLY) -board=$(BOARD)
$(AOC_CL) : $(KERNEL)
llvm-cbe --debug $(KERNEL)
$(EXE) : $(HOST_LINKED)
$(CXX) -O3 $(LDFLAGS) $< -o $@
$(HOST_LINKED) : $(HOST) $(OBJS) $(VISC_RT_LIB)
$(LLVM_LINK) $^ -S -o $@
$(VISC_RT_LIB) : $(VISC_RT_PATH)/visc-rt.cpp
make -C $(LLVM_LIB_PATH)
$(HOST) $(KERNEL): $(BUILD_DIR)/$(VISC_OBJS)
$(OPT) -debug $(VISC_OPTFLAGS) -S $< -o $(HOST)
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
$(BUILD_DIR)/%.ll : $(SRC_DIR)/%.c
$(CC) $(OBJS_CFLAGS) -emit-llvm -S -o $@ $<
$(BUILD_DIR)/main.ll : $(SRC_DIR)/main.c
$(CC) $(CFLAGS) -emit-llvm -S -o $@ $<
$(BUILD_DIR)/main.visc.ll : $(BUILD_DIR)/main.ll
$(OPT) -debug-only=genvisc $(TESTGEN_OPTFLAGS) $< -S -o $@