-
Mark Winter authored
- Note: This seems to be an issue between nvcc and glibc
Mark Winter authored- Note: This seems to be an issue between nvcc and glibc
makefile 3.95 KiB
#########################################
# Set these for MATLAB/Python versions
#########################################
MATALAB_DIR = /usr/local/MATLAB/R2018b
# NOTE: Currently only builds against python3
PYTHON_VER = python3.5
PYTHON3_INC = /usr/include/$(PYTHON_VER)
NUMPY3_INC = /usr/include/$(PYTHON_VER)
PYTHON_LIB = /usr/lib/$(PYTHON_VER)/config-3.5m-x86_64-linux-gnu
#########################################
# Default files and include dirs
#########################################
OBJ_DIR := Intermediate
CU_FILES := $(wildcard Cuda/*.cu)
CUPP_FILES := $(wildcard Cuda/*.cpp)
MEX_CPP_FILES := $(filter-out Mex/_TemplateMex.cpp, $(wildcard Mex/*.cpp))
PY_CPP_FILES := $(wildcard Python/*.cpp)
TST_CPP_FILES := $(wildcard WrapCmds/*.cpp)
CUDA_OBJ = $(addprefix $(OBJ_DIR)/,$(notdir $(CU_FILES:.cu=.o)))
CUDA_CPP_OBJ = $(addprefix $(OBJ_DIR)/,$(notdir $(CUPP_FILES:.cpp=.o)))
MEX_CPP_OBJ = $(addprefix $(OBJ_DIR)/,$(notdir $(MEX_CPP_FILES:.cpp=.o)))
PY_CPP_OBJ = $(addprefix $(OBJ_DIR)/,$(notdir $(PY_CPP_FILES:.cpp=.o)))
TST_CPP_OBJ = $(addprefix $(OBJ_DIR)/,$(notdir $(TST_CPP_FILES:.cpp=.o)))
CUDA_INC = -I. -I./Cuda
MEX_INC = -I. -I./Mex -I./ScriptCmds -I./external -I$(MATALAB_DIR)/extern/include
PY_INC = -I. -I./Python -I./ScriptCmds -I./external -I$(PYTHON3_INC) -I$(NUMPY3_INC)
MEX_LIB = -L$(MATALAB_DIR)/bin/glnxa64 -lmx -lmex
PY_LIB = -L$(PYTHON_LIB) -l$(PYTHON_VER)
#########################################
# Common parameters
#########################################
# Passed to both Nvidia compiler and gcc/clang
CPP_FLAGS = -std=c++11 -g -D_MWAITXINTRIN_H_INCLUDED
# Passed to gcc/clang and passthrough (--compiler-options) in nvcc
# NOTE: Any warning flags such as '-Wall' should go here
C_FLAGS = -Wall -Wno-sign-compare -fopenmp -fPIC -g
# Pass-through linker arguments (--linker-options) in nvcc linking step
LD_FLAGS = --no-undefined
#########################################
# Nvidia nvcc parameters
#########################################
NVCC_PATH = nvcc
NVCC_FLAGS = $(CPP_FLAGS)
SMODEL = -arch=sm_30
NVCC_INC = -I/usr/include
ifndef COMP
COMP=clang
endif
ifeq ($(COMP),gcc)
C_COMPILER = g++
else ifeq ($(COMP),clang)
C_COMPILER = clang++
endif
OMP_LIB = -lgomp
# NOTE: Some versions of clang use libiomp5 instead of libgomp
#OMP_LIB = -liomp5
#########################################
# gcc/g++/clang parameters
#########################################
GCC_FLAGS = $(CPP_FLAGS) $(C_FLAGS)
GCC_LIBS = $(OMP_LIB)
#########################################
# all projects to build
#########################################
all: matlab python
@echo Finished compiling
python: HIP.so
@echo Finished compiling python wrappers
matlab: Mex.mexa64
@echo Finished compiling matlab wrappers
#########################################
# link it all together
#########################################
HIP.so: $(CUDA_OBJ) $(PY_CPP_OBJ) $(TST_CPP_OBJ) $(CUDA_CPP_OBJ)
$(NVCC_PATH) $(GCC_LIBS) $(PY_LIB) -shared $^ -o HIP.so $(SMODEL) --linker-options '$(LD_FLAGS)'
Mex.mexa64: $(CUDA_OBJ) $(MEX_CPP_OBJ) $(CUDA_CPP_OBJ)
$(NVCC_PATH) $(GCC_LIBS) $(MEX_LIB) -shared $^ -o Mex.mexa64 $(SMODEL) --linker-options '$(LD_FLAGS)'
#########################################
# compile the cuda library files
#########################################
$(OBJ_DIR)/%.o: Cuda/%.cu
@mkdir -p $(@D)
$(NVCC_PATH) $(NVCC_FLAGS) $(CUDA_INC) $(SMODEL) --compiler-options '$(C_FLAGS)' -c $< -o $@ $(NVCC_INC) -dc
$(OBJ_DIR)/%.o: Cuda/%.cpp
@mkdir -p $(@D)
$(C_COMPILER) $(GCC_FLAGS) $(CUDA_INC) -c $< -o $@
#########################################
# compile the mex/python wrappers
#########################################
$(OBJ_DIR)/%.o: Mex/%.cpp
@mkdir -p $(@D)
$(C_COMPILER) $(GCC_FLAGS) -DMEX_BUILD $(MEX_INC) -c $< -o $@
$(OBJ_DIR)/%.o: Python/%.cpp
@mkdir -p $(@D)
$(C_COMPILER) $(GCC_FLAGS) -DPY_BUILD $(PY_INC) -c $< -o $@
#########################################
# files to clean up
#########################################
clean:
@echo Cleaning
rm -f $(OBJ_DIR)/*.o
rm -f Mex.mexa64 HIP.so