# for debug MODEFLAGS := -O0 -g3 TARGETDIR := build/Debug # for release ### MODEFLAGS := -O3 ### TARGETDIR := build/Release OCLH_BUILDER_NAME := oclh_br OCLH_COMPILER_NAME := oclh_cr OCLH_LINKER_NAME := oclh_lr OCLH_LIBRARY_NAME := liboclh.so RM := rm -rf CC := gcc LINKER := gcc CFLAGS := -std=c11 -pedantic -Wall -Wextra -Wconversion LDFLAGS := -L/usr/local/cuda/lib64 -L/opt/intel/opencl/lib64 OUTPUTFLAGS := -c -fmessage-length=0 MISCFLAGS := -pthread INCLUDES := -I"src/include_h/" -I"src/include_hd/" \ -I"/usr/local/cuda/include" LIBS := -lOpenCL DEFS := # Every subdirectory with source files must be described here SRCDIR := src # Add inputs and outputs from these tool invocations to the build variables C_SRCS += $(wildcard $(SRCDIR)/*.c) TARGETDIR_BR := $(TARGETDIR)/br.o OBJS_BR += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_BR)/%.o,$(C_SRCS)) C_DEPS_BR := C_DEPS_BR += $(wildcard $(TARGETDIR_BR)/*.d) TARGETDIR_CR := $(TARGETDIR)/cr.o OBJS_CR += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_CR)/%.o,$(C_SRCS)) C_DEPS_CR := C_DEPS_CR += $(wildcard $(TARGETDIR_CR)/*.d) TARGETDIR_LR := $(TARGETDIR)/lr.o OBJS_LR += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_LR)/%.o,$(C_SRCS)) C_DEPS_LR := C_DEPS_LR += $(wildcard $(TARGETDIR_LR)/*.d) TARGETDIR_LIB := $(TARGETDIR)/lib.o OBJS_LIB += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_LIB)/%.o,$(C_SRCS)) C_DEPS_LIB := C_DEPS_LIB += $(wildcard $(TARGETDIR_LIB)/*.d) # Each subdirectory must supply rules for building sources it contributes $(TARGETDIR_BR)/%.o: $(SRCDIR)/%.c mkdir -p $(TARGETDIR_BR); \ $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \ -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<" $(TARGETDIR_CR)/%.o: $(SRCDIR)/%.c mkdir -p $(TARGETDIR_CR); \ $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \ -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<" $(TARGETDIR_LR)/%.o: $(SRCDIR)/%.c mkdir -p $(TARGETDIR_LR); \ $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \ -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<" $(TARGETDIR_LIB)/%.o: $(SRCDIR)/%.c mkdir -p $(TARGETDIR_LIB); \ $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \ -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<" # Add inputs and outputs from these tool invocations to the build variables # All Target all: oclh_compiler oclh_builder # Tool invocations oclh_builder: DEFS= -D__OCLH_BUILDER_FLAG -D__OCLH_BUILD_LOG_TO_STDOUT_FLAG oclh_builder: OUTPUTNAME=$(OCLH_BUILDER_NAME) oclh_builder: $(OBJS_BR) @echo 'Building target: $@' @echo 'Invoking C Linker' $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_BR) \ -o "$(TARGETDIR)/$(OUTPUTNAME)" @echo 'Finished building target: $@' @echo ' ' oclh_compiler: DEFS= -D__OCLH_COMPILER_ONLY_FLAG -D__OCLH_BUILD_LOG_TO_STDOUT_FLAG oclh_compiler: OUTPUTNAME=$(OCLH_COMPILER_NAME) oclh_compiler: $(OBJS_CR) @echo 'Building target: $@' @echo 'Invoking C Linker' $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_CR) \ -o "$(TARGETDIR)/$(OUTPUTNAME)" @echo 'Finished building target: $@' @echo ' ' clean: $(RM) \ $(OBJS_BR)$(C_DEPS_BR)$(TARGETDIR_BR) \ $(OBJS_CR)$(C_DEPS_CR)$(TARGETDIR_CR) \ $(OBJS_LR)$(C_DEPS_LR)$(TARGETDIR_LR) \ $(OBJS_LIB)$(C_DEPS_LIB)$(TARGETDIR_LIB) \ $(TARGETDIR)/$(OCLH_BUILDER_NAME) \ $(TARGETDIR)/$(OCLH_COMPILER_NAME) \ $(TARGETDIR)/$(OCLH_LINKER_NAME) \ $(TARGETDIR)/$(OCLH_LIBRARY_NAME) @echo ' ' .PHONY: all clean -include makefile.targets