Makefile 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. # common settings
  2. TARGETDIR := build
  3. PRFX_PATH ?= ~/opt/iterative_point_recovery
  4. OCLH_PATH ?= ~/opt/oclh
  5. RM := rm -rf
  6. SRCDIR := src
  7. C_SRCS := $(wildcard $(SRCDIR)/*.clc)
  8. # host settings
  9. CC := gcc
  10. LINKER := gcc
  11. CFLAGS := -xc -std=c11 -pedantic -Wall -Wextra -Wconversion
  12. LDFLAGS :=
  13. OUTPUTFLAGS := -c -fmessage-length=0
  14. MISCFLAGS := -pthread
  15. INCLUDES := -I"src/include_hd/"
  16. LIBS := -lm
  17. HOST_OBJS := $(patsubst $(SRCDIR)/%.clc,$(TARGETDIR)/%.o,$(C_SRCS))
  18. C_DEPS := $(wildcard $(TARGETDIR)/*.d)
  19. IPR_HOST_LIBRARY_NAME := libIterPntRcv.so
  20. MODEFLAGS := -O3
  21. # GPGPU settings
  22. # GPGPU_DEV_IDX := 0
  23. OCL_CC := $(OCLH_PATH)/bin/oclh_cr
  24. OCL_LINKER := $(OCLH_PATH)/bin/oclh_lr
  25. OCL_CFLAGS := -cl-std=CL1.2 -Werror
  26. OCL_LDFLAGS :=
  27. OCL_OUTPUTFLAGS := --verbatim-output-name
  28. OCL_INCLUDES:= -I src/include_hd/ \
  29. -I $(OCLH_PATH)/include/include_d/ \
  30. -I $(OCLH_PATH)/include/include_hd/
  31. OCL_OBJS := $(patsubst $(SRCDIR)/%.clc,$(TARGETDIR)/%.clo,$(C_SRCS))
  32. IPR_OCL_LIBRARY_NAME := libIterPntRcv
  33. # intermediate targets
  34. $(TARGETDIR)/%.o: $(SRCDIR)/%.clc
  35. mkdir -p $(TARGETDIR); \
  36. $(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
  37. -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
  38. $(TARGETDIR)/%.clo: $(SRCDIR)/%.clc FORCE
  39. ifneq ($(strip $(GPGPU_DEV_IDX)),)
  40. mkdir -p $(TARGETDIR); \
  41. $(OCL_CC) --dev-idxs=$(GPGPU_DEV_IDX) $(OCL_INCLUDES) \
  42. $(OCL_MODEFLAGS) $(OCL_CFLAGS) $(OCL_DEFS) $(OCL_OUTPUTFLAGS) \
  43. -o "$@" "$<"
  44. endif
  45. @echo ' '
  46. all: host_lib opencl_lib
  47. host_lib: $(HOST_OBJS)
  48. @echo 'Building target: $@'
  49. @echo 'Invoking host C Linker'
  50. $(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(HOST_OBJS) \
  51. -shared -Wl,-soname,$(IPR_HOST_LIBRARY_NAME) \
  52. -o "$(TARGETDIR)/$(IPR_HOST_LIBRARY_NAME)"
  53. @echo 'Finished building target: $@'
  54. @echo ' '
  55. opencl_lib: $(OCL_OBJS)
  56. ifneq ($(strip $(GPGPU_DEV_IDX)),)
  57. @echo 'Building target: $@'
  58. @echo 'Invoking OpenCL C Linker'
  59. $(OCL_LINKER) --dev-idxs=$(GPGPU_DEV_IDX) $(OCL_LDFLAGS) \
  60. -create-library -o $(TARGETDIR)/$(IPR_OCL_LIBRARY_NAME) \
  61. $(OCL_OBJS)
  62. @echo 'Finished building target: $@'
  63. endif
  64. @echo ' '
  65. debug: MODEFLAGS := -O0 -g3
  66. debug: OCL_MODEFLAGS := -g
  67. debug: host_lib opencl_lib
  68. install:
  69. mkdir -p $(PRFX_PATH)/lib
  70. cp $(TARGETDIR)/$(IPR_HOST_LIBRARY_NAME) $(PRFX_PATH)/lib
  71. ocllibs=($(TARGETDIR)/$(IPR_OCL_LIBRARY_NAME)*.clso) ;\
  72. if [ -f "$${ocllibs[0]}" ]; then \
  73. cp $(TARGETDIR)/$(IPR_OCL_LIBRARY_NAME)*.clso $(PRFX_PATH)/lib;\
  74. fi
  75. mkdir -p $(PRFX_PATH)/include_hd
  76. cp $(SRCDIR)/include_hd/* $(PRFX_PATH)/include_hd
  77. cd $(PRFX_PATH)/lib ; \
  78. ln -fs $(IPR_HOST_LIBRARY_NAME) $(IPR_HOST_LIBRARY_NAME).0 ; \
  79. ln -fs $(IPR_HOST_LIBRARY_NAME) $(IPR_HOST_LIBRARY_NAME).0.0
  80. uninstall:
  81. $(RM) $(PRFX_PATH)/lib/$(IPR_HOST_LIBRARY_NAME) \
  82. $(PRFX_PATH)/lib/$(IPR_OCL_LIBRARY_NAME)*.clso $(PRFX_PATH)/lib \
  83. $(PRFX_PATH)/include_hd/* $(PRFX_PATH)/include_hd $(PRFX_PATH)
  84. clean:
  85. $(RM) *.log $(TARGETDIR)/*.log \
  86. $(HOST_OBJS) $(OCL_OBJS) $(C_DEPS) \
  87. $(TARGETDIR)/$(IPR_HOST_LIBRARY_NAME)* \
  88. $(TARGETDIR)/$(IPR_OCL_LIBRARY_NAME)*.clso
  89. @echo ' '
  90. FORCE: ;
  91. .PHONY: clean debug stable