Makefile 5.3 KB

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