Makefile 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. # for release
  2. MODEFLAGS := -O3
  3. TARGETDIR := build
  4. PRFX_PATH ?= ~/opt/oclh
  5. OPENCL_INCLUDES := -I/usr/local/cuda/include \
  6. -I/opt/intel/system_studio_2020/opencl-sdk/include/CL/
  7. OPENCL_LIBRARIES := -L/usr/local/cuda/lib64 \
  8. -L/opt/intel/opencl_compilers_and_libraries_18.1.0.015/$\
  9. linux/compiler/lib/intel64_lin
  10. OCLH_LIBRARY_NAME := liboclh.so
  11. OCLH_COMPILER_NAME := oclh_cr
  12. OCLH_LINKER_NAME := oclh_lr
  13. OCLH_BUILDER_NAME := oclh_br
  14. OCLH_DEVNAME_NAME := oclh_getDevNameByIndex
  15. RM := rm -rf
  16. CC := gcc
  17. LINKER := gcc
  18. CFLAGS := -std=c11 -pedantic -Wall -Wextra -Wconversion
  19. LDFLAGS := $(OPENCL_LIBRARIES)
  20. OUTPUTFLAGS := -c -fmessage-length=0
  21. MISCFLAGS := -pthread
  22. INCLUDES := -I"src/include_h/" -I"src/include_hd/" $(OPENCL_INCLUDES)
  23. LIBS := -lOpenCL
  24. # Every subdirectory with source files must be described here
  25. SRCDIR := src
  26. # Add inputs and outputs from these tool invocations to the build variables
  27. C_SRCS_LIB := $(wildcard $(SRCDIR)/oclh_h*.c)
  28. C_SRCS_BTOOLS := $(C_SRCS_LIB) $(wildcard $(SRCDIR)/oclh_cc.c)
  29. C_SRCS_NM := $(C_SRCS_LIB) $(wildcard $(SRCDIR)/oclh_get_dev_name_by_idx.c)
  30. TARGETDIR_LIB := $(TARGETDIR)/lib.o
  31. OBJS_LIB := $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_LIB)/%.o,$(C_SRCS_LIB))
  32. C_DEPS_LIB := $(wildcard $(TARGETDIR_LIB)/*.d)
  33. TARGETDIR_CR := $(TARGETDIR)/cr.o
  34. OBJS_CR := $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_CR)/%.o,$(C_SRCS_BTOOLS))
  35. C_DEPS_CR := $(wildcard $(TARGETDIR_CR)/*.d)
  36. TARGETDIR_LR := $(TARGETDIR)/lr.o
  37. OBJS_LR := $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_LR)/%.o,$(C_SRCS_BTOOLS))
  38. C_DEPS_LR := $(wildcard $(TARGETDIR_LR)/*.d)
  39. TARGETDIR_BR := $(TARGETDIR)/br.o
  40. OBJS_BR := $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_BR)/%.o,$(C_SRCS_BTOOLS))
  41. C_DEPS_BR := $(wildcard $(TARGETDIR_BR)/*.d)
  42. TARGETDIR_NM := $(TARGETDIR)/nm.o
  43. OBJS_NM := $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_NM)/%.o,$(C_SRCS_NM))
  44. C_DEPS_NM := $(wildcard $(TARGETDIR_NM)/*.d)
  45. # Each subdirectory must supply rules for building sources it contributes
  46. $(TARGETDIR_NM)/%.o: $(SRCDIR)/%.c
  47. mkdir -p $(TARGETDIR_NM); \
  48. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  49. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  50. $(TARGETDIR_BR)/%.o: $(SRCDIR)/%.c
  51. mkdir -p $(TARGETDIR_BR); \
  52. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  53. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  54. $(TARGETDIR_CR)/%.o: $(SRCDIR)/%.c
  55. mkdir -p $(TARGETDIR_CR); \
  56. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  57. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  58. $(TARGETDIR_LR)/%.o: $(SRCDIR)/%.c
  59. mkdir -p $(TARGETDIR_LR); \
  60. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  61. -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  62. $(TARGETDIR_LIB)/%.o: $(SRCDIR)/%.c
  63. mkdir -p $(TARGETDIR_LIB); \
  64. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  65. -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  66. # Add inputs and outputs from these tool invocations to the build variables
  67. # All Target
  68. all: oclh_library oclh_compiler oclh_linker oclh_builder oclh_devnamegetter
  69. debug: MODEFLAGS := -O0 -g3
  70. debug: all
  71. # Tool invocations
  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. oclh_linker: DEFS := -D__OCLH_LINKER_ONLY_FLAG -D__OCLH_BUILD_LOG_TO_STDOUT_FLAG
  82. oclh_linker: OUTPUTNAME := $(OCLH_LINKER_NAME)
  83. oclh_linker: $(OBJS_LR)
  84. @echo 'Building target: $@'
  85. @echo 'Invoking C Linker'
  86. $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_LR) \
  87. -o "$(TARGETDIR)/$(OUTPUTNAME)"
  88. @echo 'Finished building target: $@'
  89. @echo ' '
  90. oclh_builder: DEFS := -D__OCLH_BUILDER_FLAG -D__OCLH_BUILD_LOG_TO_STDOUT_FLAG
  91. oclh_builder: OUTPUTNAME := $(OCLH_BUILDER_NAME)
  92. oclh_builder: $(OBJS_BR)
  93. @echo 'Building target: $@'
  94. @echo 'Invoking C Linker'
  95. $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_BR) \
  96. -o "$(TARGETDIR)/$(OUTPUTNAME)"
  97. @echo 'Finished building target: $@'
  98. @echo ' '
  99. oclh_library: OUTPUTNAME := $(OCLH_LIBRARY_NAME)
  100. oclh_library: $(OBJS_LIB)
  101. @echo 'Building target: $@'
  102. @echo 'Invoking C Linker'
  103. $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_LIB) \
  104. -shared -Wl,-soname,liboclh.so.0.0 -o "$(TARGETDIR)/$(OUTPUTNAME)"
  105. @echo 'Finished building target: $@'
  106. @echo ' '
  107. oclh_devnamegetter: DEFS :=
  108. oclh_devnamegetter: OUTPUTNAME := $(OCLH_DEVNAME_NAME)
  109. oclh_devnamegetter: $(OBJS_NM)
  110. @echo 'Building target: $@'
  111. @echo 'Invoking C Linker'
  112. $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_NM) \
  113. -o "$(TARGETDIR)/$(OUTPUTNAME)"
  114. @echo 'Finished building target: $@'
  115. @echo ' '
  116. install:
  117. mkdir -p $(PRFX_PATH)/bin
  118. cp $(TARGETDIR)/$(OCLH_COMPILER_NAME) $(PRFX_PATH)/bin
  119. cp $(TARGETDIR)/$(OCLH_LINKER_NAME) $(PRFX_PATH)/bin
  120. cp $(TARGETDIR)/$(OCLH_BUILDER_NAME) $(PRFX_PATH)/bin
  121. cp $(TARGETDIR)/$(OCLH_DEVNAME_NAME) $(PRFX_PATH)/bin
  122. mkdir -p $(PRFX_PATH)/lib
  123. cp $(TARGETDIR)/$(OCLH_LIBRARY_NAME) $(PRFX_PATH)/lib
  124. mkdir -p $(PRFX_PATH)/include/include_h
  125. cp $(SRCDIR)/include_h/* $(PRFX_PATH)/include/include_h
  126. mkdir -p $(PRFX_PATH)/include/include_hd
  127. cp $(SRCDIR)/include_hd/* $(PRFX_PATH)/include/include_hd
  128. mkdir -p $(PRFX_PATH)/include/include_d
  129. cp $(SRCDIR)/include_d/* $(PRFX_PATH)/include/include_d
  130. cd $(PRFX_PATH)/lib ; \
  131. ln -s $(OCLH_LIBRARY_NAME) $(OCLH_LIBRARY_NAME).0 ; \
  132. ln -s $(OCLH_LIBRARY_NAME) $(OCLH_LIBRARY_NAME).0.0
  133. uninstall:
  134. $(RM) $(PRFX_PATH)/bin/$(OCLH_COMPILER_NAME) \
  135. $(PRFX_PATH)/bin/$(OCLH_LINKER_NAME) \
  136. $(PRFX_PATH)/bin/$(OCLH_LINKER_NAME) \
  137. $(PRFX_PATH)/bin/$(OCLH_DEVNAME_NAME) $(PRFX_PATH)/bin \
  138. $(PRFX_PATH)/lib/$(OCLH_LIBRARY_NAME)* $(PRFX_PATH)/lib \
  139. $(PRFX_PATH)/include/include_h/* $(PRFX_PATH)/include/include_h \
  140. $(PRFX_PATH)/include/include_hd/* $(PRFX_PATH)/include/include_hd \
  141. $(PRFX_PATH)/include/include_d/* $(PRFX_PATH)/include/include_d \
  142. $(PRFX_PATH)/include $(PRFX_PATH)
  143. clean:
  144. $(RM) \
  145. $(OBJS_LIB) $(C_DEPS_LIB) $(TARGETDIR_LIB) \
  146. $(OBJS_CR) $(C_DEPS_CR) $(TARGETDIR_CR) \
  147. $(OBJS_LR) $(C_DEPS_LR) $(TARGETDIR_LR) \
  148. $(OBJS_BR) $(C_DEPS_BR) $(TARGETDIR_BR) \
  149. $(OBJS_NM) $(C_DEPS_NM) $(TARGETDIR_NM) \
  150. $(TARGETDIR)/$(OCLH_BUILDER_NAME) \
  151. $(TARGETDIR)/$(OCLH_COMPILER_NAME) \
  152. $(TARGETDIR)/$(OCLH_LINKER_NAME) \
  153. $(TARGETDIR)/$(OCLH_LIBRARY_NAME) \
  154. $(TARGETDIR)/$(OCLH_DEVNAME_NAME)
  155. @echo ' '
  156. repack: uninstall clean all install
  157. .PHONY: all clean debug repack