Makefile 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. OBJS_CR :=
  27. TARGETDIR_CR := $(TARGETDIR)/cr.o
  28. OBJS_CR += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_CR)/%.o,$(C_SRCS))
  29. C_DEPS_CR :=
  30. C_DEPS_CR += $(wildcard $(TARGETDIR_CR)/*.d)
  31. OBJS_LR :=
  32. TARGETDIR_LR := $(TARGETDIR)/lr.o
  33. OBJS_LR += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_LR)/%.o,$(C_SRCS))
  34. C_DEPS_LR :=
  35. C_DEPS_LR += $(wildcard $(TARGETDIR_LR)/*.d)
  36. OBJS_BR :=
  37. TARGETDIR_BR := $(TARGETDIR)/br.o
  38. OBJS_BR += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_BR)/%.o,$(C_SRCS))
  39. C_DEPS_BR :=
  40. C_DEPS_BR += $(wildcard $(TARGETDIR_BR)/*.d)
  41. OBJS_LIB :=
  42. TARGETDIR_LIB := $(TARGETDIR)/lib.o
  43. OBJS_LIB += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_LIB)/%.o,$(C_SRCS))
  44. C_DEPS_LIB :=
  45. C_DEPS_LIB += $(wildcard $(TARGETDIR_LIB)/*.d)
  46. # Each subdirectory must supply rules for building sources it contributes
  47. $(TARGETDIR_BR)/%.o: $(SRCDIR)/%.c
  48. mkdir -p $(TARGETDIR_BR); \
  49. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  50. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  51. $(TARGETDIR_CR)/%.o: $(SRCDIR)/%.c
  52. mkdir -p $(TARGETDIR_CR); \
  53. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  54. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  55. $(TARGETDIR_LR)/%.o: $(SRCDIR)/%.c
  56. mkdir -p $(TARGETDIR_LR); \
  57. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  58. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  59. $(TARGETDIR_LIB)/%.o: $(SRCDIR)/%.c
  60. mkdir -p $(TARGETDIR_LIB); \
  61. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  62. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  63. # Add inputs and outputs from these tool invocations to the build variables
  64. # All Target
  65. all: oclh_compiler oclh_linker oclh_builder
  66. # Tool invocations
  67. oclh_compiler: DEFS := -D__OCLH_COMPILER_ONLY_FLAG -D__OCLH_BUILD_LOG_TO_STDOUT_FLAG
  68. oclh_compiler: OUTPUTNAME=$(OCLH_COMPILER_NAME)
  69. oclh_compiler: $(OBJS_CR)
  70. @echo 'Building target: $@'
  71. @echo 'Invoking C Linker'
  72. $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_CR) \
  73. -o "$(TARGETDIR)/$(OUTPUTNAME)"
  74. @echo 'Finished building target: $@'
  75. @echo ' '
  76. oclh_linker: DEFS := -D__OCLH_LINKER_ONLY_FLAG -D__OCLH_BUILD_LOG_TO_STDOUT_FLAG
  77. oclh_linker: OUTPUTNAME=$(OCLH_LINKER_NAME)
  78. oclh_linker: $(OBJS_LR)
  79. @echo 'Building target: $@'
  80. @echo 'Invoking C Linker'
  81. $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_LR) \
  82. -o "$(TARGETDIR)/$(OUTPUTNAME)"
  83. @echo 'Finished building target: $@'
  84. @echo ' '
  85. oclh_builder: DEFS := -D__OCLH_BUILDER_FLAG -D__OCLH_BUILD_LOG_TO_STDOUT_FLAG
  86. oclh_builder: OUTPUTNAME=$(OCLH_BUILDER_NAME)
  87. oclh_builder: $(OBJS_BR)
  88. @echo 'Building target: $@'
  89. @echo 'Invoking C Linker'
  90. $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_BR) \
  91. -o "$(TARGETDIR)/$(OUTPUTNAME)"
  92. @echo 'Finished building target: $@'
  93. @echo ' '
  94. clean:
  95. $(RM) \
  96. $(OBJS_BR)$(C_DEPS_BR)$(TARGETDIR_BR) \
  97. $(OBJS_CR)$(C_DEPS_CR)$(TARGETDIR_CR) \
  98. $(OBJS_LR)$(C_DEPS_LR)$(TARGETDIR_LR) \
  99. $(OBJS_LIB)$(C_DEPS_LIB)$(TARGETDIR_LIB) \
  100. $(TARGETDIR)/$(OCLH_BUILDER_NAME) \
  101. $(TARGETDIR)/$(OCLH_COMPILER_NAME) \
  102. $(TARGETDIR)/$(OCLH_LINKER_NAME) \
  103. $(TARGETDIR)/$(OCLH_LIBRARY_NAME)
  104. @echo ' '
  105. .PHONY: all clean
  106. -include makefile.targets