Makefile 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. # for debug
  2. MODEFLAGS := -O0 -g3
  3. TARGETDIR := build/Debug
  4. # for release
  5. ### MODEFLAGS := -O3
  6. ### TARGETDIR := build/Release
  7. OCLH_BUILDER_NAME := oclh_br
  8. OCLH_COMPILER_NAME := oclh_cr
  9. OCLH_LINKER_NAME := oclh_lr
  10. OCLH_LIBRARY_NAME := liboclh.so
  11. RM := rm -rf
  12. CC := gcc
  13. LINKER := gcc
  14. CFLAGS := -std=c11 -pedantic -Wall -Wextra -Wconversion
  15. LDFLAGS := -L/usr/local/cuda/lib64 -L/opt/intel/opencl/lib64
  16. OUTPUTFLAGS := -c -fmessage-length=0
  17. MISCFLAGS := -pthread
  18. INCLUDES := -I"src/include_h/" -I"src/include_hd/" \
  19. -I"/usr/local/cuda/include"
  20. LIBS := -lOpenCL
  21. DEFS :=
  22. # Every subdirectory with source files must be described here
  23. SRCDIR := src
  24. # Add inputs and outputs from these tool invocations to the build variables
  25. C_SRCS += $(wildcard $(SRCDIR)/*.c)
  26. TARGETDIR_BR := $(TARGETDIR)/br.o
  27. OBJS_BR += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_BR)/%.o,$(C_SRCS))
  28. C_DEPS_BR :=
  29. C_DEPS_BR += $(wildcard $(TARGETDIR_BR)/*.d)
  30. TARGETDIR_CR := $(TARGETDIR)/cr.o
  31. OBJS_CR += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_CR)/%.o,$(C_SRCS))
  32. C_DEPS_CR :=
  33. C_DEPS_CR += $(wildcard $(TARGETDIR_CR)/*.d)
  34. TARGETDIR_LR := $(TARGETDIR)/lr.o
  35. OBJS_LR += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_LR)/%.o,$(C_SRCS))
  36. C_DEPS_LR :=
  37. C_DEPS_LR += $(wildcard $(TARGETDIR_LR)/*.d)
  38. TARGETDIR_LIB := $(TARGETDIR)/lib.o
  39. OBJS_LIB += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_LIB)/%.o,$(C_SRCS))
  40. C_DEPS_LIB :=
  41. C_DEPS_LIB += $(wildcard $(TARGETDIR_LIB)/*.d)
  42. # Each subdirectory must supply rules for building sources it contributes
  43. $(TARGETDIR_BR)/%.o: $(SRCDIR)/%.c
  44. mkdir -p $(TARGETDIR_BR); \
  45. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  46. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  47. $(TARGETDIR_CR)/%.o: $(SRCDIR)/%.c
  48. mkdir -p $(TARGETDIR_CR); \
  49. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  50. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  51. $(TARGETDIR_LR)/%.o: $(SRCDIR)/%.c
  52. mkdir -p $(TARGETDIR_LR); \
  53. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  54. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  55. $(TARGETDIR_LIB)/%.o: $(SRCDIR)/%.c
  56. mkdir -p $(TARGETDIR_LIB); \
  57. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  58. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  59. # Add inputs and outputs from these tool invocations to the build variables
  60. # All Target
  61. all: oclh_compiler oclh_builder
  62. # Tool invocations
  63. oclh_builder: DEFS= -D__OCLH_BUILDER_FLAG -D__OCLH_BUILD_LOG_TO_STDOUT_FLAG
  64. oclh_builder: OUTPUTNAME=$(OCLH_BUILDER_NAME)
  65. oclh_builder: $(OBJS_BR)
  66. @echo 'Building target: $@'
  67. @echo 'Invoking C Linker'
  68. $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_BR) \
  69. -o "$(TARGETDIR)/$(OUTPUTNAME)"
  70. @echo 'Finished building target: $@'
  71. @echo ' '
  72. oclh_compiler: DEFS= -D__OCLH_COMPILER_ONLY_FLAG -D__OCLH_BUILD_LOG_TO_STDOUT_FLAG
  73. oclh_compiler: OUTPUTNAME=$(OCLH_COMPILER_NAME)
  74. oclh_compiler: $(OBJS_CR)
  75. @echo 'Building target: $@'
  76. @echo 'Invoking C Linker'
  77. $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_CR) \
  78. -o "$(TARGETDIR)/$(OUTPUTNAME)"
  79. @echo 'Finished building target: $@'
  80. @echo ' '
  81. clean:
  82. $(RM) \
  83. $(OBJS_BR)$(C_DEPS_BR)$(TARGETDIR_BR) \
  84. $(OBJS_CR)$(C_DEPS_CR)$(TARGETDIR_CR) \
  85. $(OBJS_LR)$(C_DEPS_LR)$(TARGETDIR_LR) \
  86. $(OBJS_LIB)$(C_DEPS_LIB)$(TARGETDIR_LIB) \
  87. $(TARGETDIR)/$(OCLH_BUILDER_NAME) \
  88. $(TARGETDIR)/$(OCLH_COMPILER_NAME) \
  89. $(TARGETDIR)/$(OCLH_LINKER_NAME) \
  90. $(TARGETDIR)/$(OCLH_LIBRARY_NAME)
  91. @echo ' '
  92. .PHONY: all clean
  93. -include makefile.targets