# common settings TARGETDIR := build PRFX_PATH ?= ~/opt/iterative_point_recovery OCLH_PATH ?= ~/opt/oclh RM := rm -rf SRCDIR := src C_SRCS := $(wildcard $(SRCDIR)/*.clc) # host settings CC := gcc LINKER := gcc CFLAGS := -xc -std=c11 -pedantic -Wall -Wextra -Wconversion LDFLAGS := OUTPUTFLAGS := -c -fmessage-length=0 MISCFLAGS := -pthread INCLUDES := -I"src/include_hd/" LIBS := -lm HOST_OBJS := $(patsubst $(SRCDIR)/%.clc,$(TARGETDIR)/%.o,$(C_SRCS)) C_DEPS := $(wildcard $(TARGETDIR)/*.d) IPR_HOST_LIBRARY_NAME := libIterPntRcv.so MODEFLAGS := -O3 # GPGPU settings # GPGPU_DEV_IDX := 0 OCL_CC := $(OCLH_PATH)/bin/oclh_cr OCL_LINKER := $(OCLH_PATH)/bin/oclh_lr OCL_CFLAGS := -cl-std=CL1.2 -Werror OCL_LDFLAGS := OCL_OUTPUTFLAGS := --verbatim-output-name OCL_INCLUDES:= -I src/include_hd/ \ -I $(OCLH_PATH)/include/include_d/ \ -I $(OCLH_PATH)/include/include_hd/ OCL_OBJS := $(patsubst $(SRCDIR)/%.clc,$(TARGETDIR)/%.clo,$(C_SRCS)) IPR_OCL_LIBRARY_NAME := libIterPntRcv # intermediate targets $(TARGETDIR)/%.o: $(SRCDIR)/%.clc mkdir -p $(TARGETDIR); \ $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \ -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<" $(TARGETDIR)/%.clo: $(SRCDIR)/%.clc FORCE ifneq ($(strip $(GPGPU_DEV_IDX)),) mkdir -p $(TARGETDIR); \ $(OCL_CC) --dev-idxs=$(GPGPU_DEV_IDX) $(OCL_INCLUDES) \ $(OCL_MODEFLAGS) $(OCL_CFLAGS) $(OCL_DEFS) $(OCL_OUTPUTFLAGS) \ -o "$@" "$<" endif @echo ' ' all: host_lib opencl_lib host_lib: $(HOST_OBJS) @echo 'Building target: $@' @echo 'Invoking host C Linker' $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(HOST_OBJS) \ -shared -Wl,-soname,$(IPR_HOST_LIBRARY_NAME) \ -o "$(TARGETDIR)/$(IPR_HOST_LIBRARY_NAME)" @echo 'Finished building target: $@' @echo ' ' opencl_lib: $(OCL_OBJS) ifneq ($(strip $(GPGPU_DEV_IDX)),) @echo 'Building target: $@' @echo 'Invoking OpenCL C Linker' $(OCL_LINKER) --dev-idxs=$(GPGPU_DEV_IDX) $(OCL_LDFLAGS) \ -create-library -o $(TARGETDIR)/$(IPR_OCL_LIBRARY_NAME) \ $(OCL_OBJS) @echo 'Finished building target: $@' endif @echo ' ' debug: MODEFLAGS := -O0 -g3 debug: OCL_MODEFLAGS := -g debug: host_lib opencl_lib install: mkdir -p $(PRFX_PATH)/lib cp $(TARGETDIR)/$(IPR_HOST_LIBRARY_NAME) $(PRFX_PATH)/lib ocllibs=($(TARGETDIR)/$(IPR_OCL_LIBRARY_NAME)*.clso) ;\ if [ -f "$${ocllibs[0]}" ]; then \ cp $(TARGETDIR)/$(IPR_OCL_LIBRARY_NAME)*.clso $(PRFX_PATH)/lib;\ fi mkdir -p $(PRFX_PATH)/include_hd cp $(SRCDIR)/include_hd/* $(PRFX_PATH)/include_hd cd $(PRFX_PATH)/lib ; \ ln -fs $(IPR_HOST_LIBRARY_NAME) $(IPR_HOST_LIBRARY_NAME).0 ; \ ln -fs $(IPR_HOST_LIBRARY_NAME) $(IPR_HOST_LIBRARY_NAME).0.0 uninstall: $(RM) $(PRFX_PATH)/lib/$(IPR_HOST_LIBRARY_NAME) \ $(PRFX_PATH)/lib/$(IPR_OCL_LIBRARY_NAME)*.clso $(PRFX_PATH)/lib \ $(PRFX_PATH)/include_hd/* $(PRFX_PATH)/include_hd $(PRFX_PATH) clean: $(RM) *.log $(TARGETDIR)/*.log \ $(HOST_OBJS) $(OCL_OBJS) $(C_DEPS) \ $(TARGETDIR)/$(IPR_HOST_LIBRARY_NAME)* \ $(TARGETDIR)/$(IPR_OCL_LIBRARY_NAME)*.clso @echo ' ' FORCE: ; .PHONY: clean debug stable