103 lines
3.1 KiB
Makefile
103 lines
3.1 KiB
Makefile
# Headers for Geryon
|
|
UCL_H = $(wildcard ./geryon/ucl*.h)
|
|
NVD_H = $(wildcard ./geryon/nvd*.h) $(UCL_H) lal_preprocessor.h
|
|
ALL_H = $(NVD_H) $(wildcard ./lal_*.h)
|
|
|
|
# Source files
|
|
SRCS := $(wildcard ./lal_*.cpp)
|
|
OBJS := $(subst ./,$(OBJ_DIR)/,$(SRCS:%.cpp=%.o))
|
|
CUS := $(wildcard lal_*.cu)
|
|
CUHS := $(filter-out pppm_cubin.h, $(CUS:lal_%.cu=%_cubin.h)) pppm_f_cubin.h pppm_d_cubin.h
|
|
CUHS := $(addprefix $(OBJ_DIR)/, $(CUHS))
|
|
|
|
ifdef CUDPP_OPT
|
|
CUDPP = $(OBJ_DIR)/cudpp.o $(OBJ_DIR)/cudpp_plan.o \
|
|
$(OBJ_DIR)/cudpp_maximal_launch.o $(OBJ_DIR)/cudpp_plan_manager.o \
|
|
$(OBJ_DIR)/radixsort_app.cu_o $(OBJ_DIR)/scan_app.cu_o
|
|
endif
|
|
|
|
# targets
|
|
|
|
GPU_LIB = $(LIB_DIR)/libgpu.a
|
|
|
|
EXECS = $(BIN_DIR)/nvc_get_devices
|
|
|
|
all: $(OBJ_DIR) $(CUHS) $(GPU_LIB) $(EXECS)
|
|
|
|
$(OBJ_DIR):
|
|
mkdir -p $@
|
|
|
|
# Compilers and linkers
|
|
|
|
CUDA = $(NVCC) $(CUDA_INCLUDE) $(CUDA_OPTS) -Icudpp_mini $(CUDA_ARCH) \
|
|
$(CUDA_PRECISION)
|
|
CUDR = $(CUDR_CPP) $(CUDR_OPTS) $(CUDA_PRECISION) $(CUDA_INCLUDE) \
|
|
$(CUDPP_OPT)
|
|
CUDA_LINK = $(CUDA_LIB) -lcudart
|
|
|
|
BIN2C = $(CUDA_HOME)/bin/bin2c
|
|
|
|
# device code compilation
|
|
|
|
$(OBJ_DIR)/pppm_f.cubin: lal_pppm.cu lal_precision.h lal_preprocessor.h
|
|
$(CUDA) --fatbin -DNV_KERNEL -Dgrdtyp=float -Dgrdtyp4=float4 -o $@ lal_pppm.cu
|
|
|
|
$(OBJ_DIR)/pppm_f_cubin.h: $(OBJ_DIR)/pppm_f.cubin
|
|
$(BIN2C) -c -n pppm_f $(OBJ_DIR)/pppm_f.cubin > $(OBJ_DIR)/pppm_f_cubin.h
|
|
|
|
$(OBJ_DIR)/pppm_d.cubin: lal_pppm.cu lal_precision.h lal_preprocessor.h
|
|
$(CUDA) --fatbin -DNV_KERNEL -Dgrdtyp=double -Dgrdtyp4=double4 -o $@ lal_pppm.cu
|
|
|
|
$(OBJ_DIR)/pppm_d_cubin.h: $(OBJ_DIR)/pppm_d.cubin
|
|
$(BIN2C) -c -n pppm_d $(OBJ_DIR)/pppm_d.cubin > $(OBJ_DIR)/pppm_d_cubin.h
|
|
|
|
$(OBJ_DIR)/%_cubin.h: lal_%.cu $(ALL_H)
|
|
$(CUDA) --fatbin -DNV_KERNEL -o $(OBJ_DIR)/$*.cubin $(OBJ_DIR)/lal_$*.cu
|
|
$(BIN2C) -c -n $* $(OBJ_DIR)/$*.cubin > $@
|
|
@rm $(OBJ_DIR)/$*.cubin
|
|
|
|
# host code compilation
|
|
|
|
$(OBJ_DIR)/lal_%.o: lal_%.cpp $(CUHS) $(ALL_H)
|
|
$(CUDR) -o $@ -c $< -I$(OBJ_DIR)
|
|
|
|
#ifdef CUDPP_OPT
|
|
$(OBJ_DIR)/cudpp.o: cudpp_mini/cudpp.cpp
|
|
$(CUDR) -o $@ -c cudpp_mini/cudpp.cpp -Icudpp_mini
|
|
|
|
$(OBJ_DIR)/cudpp_plan.o: cudpp_mini/cudpp_plan.cpp
|
|
$(CUDR) -o $@ -c cudpp_mini/cudpp_plan.cpp -Icudpp_mini
|
|
|
|
$(OBJ_DIR)/cudpp_maximal_launch.o: cudpp_mini/cudpp_maximal_launch.cpp
|
|
$(CUDR) -o $@ -c cudpp_mini/cudpp_maximal_launch.cpp -Icudpp_mini
|
|
|
|
$(OBJ_DIR)/cudpp_plan_manager.o: cudpp_mini/cudpp_plan_manager.cpp
|
|
$(CUDR) -o $@ -c cudpp_mini/cudpp_plan_manager.cpp -Icudpp_mini
|
|
|
|
$(OBJ_DIR)/radixsort_app.cu_o: cudpp_mini/radixsort_app.cu
|
|
$(CUDA) -o $@ -c cudpp_mini/radixsort_app.cu
|
|
|
|
$(OBJ_DIR)/scan_app.cu_o: cudpp_mini/scan_app.cu
|
|
$(CUDA) -o $@ -c cudpp_mini/scan_app.cu
|
|
#endif
|
|
|
|
# build libgpu.a
|
|
|
|
$(GPU_LIB): $(OBJS) $(CUDPP)
|
|
$(AR) -crusv $(GPU_LIB) $(OBJS) $(CUDPP)
|
|
@cp $(EXTRAMAKE) Makefile.lammps
|
|
|
|
# test app for querying device info
|
|
|
|
$(BIN_DIR)/nvc_get_devices: ./geryon/ucl_get_devices.cpp $(NVD_H)
|
|
$(CUDR) -o $@ ./geryon/ucl_get_devices.cpp -DUCL_CUDADR $(CUDA_LIB) -lcuda
|
|
|
|
clean:
|
|
-rm -f $(EXECS) $(GPU_LIB) $(OBJS) $(CUDPP) $(CUHS) *.linkinfo
|
|
|
|
veryclean: clean
|
|
-rm -rf *~ *.linkinfo
|
|
|
|
cleanlib:
|
|
-rm -f $(EXECS) $(GPU_LIB) $(OBJS) $(CUHS) *.linkinfo
|