Advertisement
Guest User

Untitled

a guest
Jun 10th, 2017
713
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.14 KB | None | 0 0
  1. #
  2. # This file is part of fastms.
  3. #
  4. # 2014 Evgeny Strekalovskiy <evgeny dot strekalovskiy at in dot tum dot de> (Technical University of Munich)
  5. #
  6. # fastms is free software: you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation, either version 3 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # fastms is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with fastms. If not, see <http://www.gnu.org/licenses/>.
  18. #
  19.  
  20. all: targets
  21.  
  22. USE_CUDA:=0
  23. USE_OPENMP:=0
  24. USE_OPENCV:=0
  25. USE_MEX:=1
  26.  
  27. TMP_DIR:=tmp
  28.  
  29.  
  30.  
  31. LIBS:=
  32. DEFINES:=
  33. INCLUDES:=
  34. TARGETS:=
  35.  
  36. SOLVER_SOURCE_DIR:=src/libfastms
  37. INCLUDES += -I$(SOLVER_SOURCE_DIR)
  38.  
  39.  
  40. # check if mac or linux
  41. MAC:=1
  42.  
  43.  
  44. # c++
  45.  
  46. GXX:=x86_64-w64-mingw32-gcc
  47. ARGS_GXX:=
  48. ARGS_GXX += -Wall
  49. ARGS_GXX += -O3
  50. ARGS_GXX += -m64
  51. #ARGS_GXX += -fPIC #causes warnings for some reason
  52.  
  53. ifeq ($(USE_OPENMP), 1)
  54. ARGS_GXX += -fopenmp
  55. endif
  56.  
  57. COMMAND_COMPILE_GXX=$(GXX) -c -o $@ $< $(ARGS_GXX) $(INCLUDES) $(DEFINES)
  58. COMMAND_GET_DEPENDENCIES_GXX=@$(GXX) -M $< $(ARGS_GXX) $(INCLUDES) $(DEFINES) > $@.dep
  59.  
  60.  
  61. # openmp
  62. ifeq ($(USE_OPENMP), 1)
  63. LIBS += -lgomp
  64. else
  65. DEFINES += -DDISABLE_OPENMP
  66. endif
  67.  
  68. DEFINES += -DDISABLE_OPENCV
  69. DEFINES += -DDISABLE_CUDA
  70.  
  71.  
  72.  
  73. # target: solver
  74. SOLVER_SOURCES:=
  75. SOLVER_SOURCES += $(shell find $(SOLVER_SOURCE_DIR) -name '*.cpp')
  76. ifeq ($(USE_CUDA), 1)
  77. SOLVER_SOURCES += $(shell find $(SOLVER_SOURCE_DIR) -name '*.cu')
  78. endif
  79. SOLVER_OBJECTS:=$(foreach file, $(SOLVER_SOURCES), $(TMP_DIR)/$(file).o)
  80. SOLVER_DEPENDENCIES:=$(foreach file, $(SOLVER_OBJECTS), $(file).dep)
  81. -include $(SOLVER_DEPENDENCIES)
  82. SOLVER_TARGET:=$(TMP_DIR)/$(SOLVER_SOURCE_DIR)/libfastms.o
  83. TARGETS += $(SOLVER_TARGET)
  84. COMMAND_LINK_SOLVER=ld -r -o $@ $^
  85.  
  86.  
  87.  
  88. # target: main
  89. MAIN_SOURCES:=
  90. MAIN_SOURCES += $(shell find src/examples -name '*.cpp')
  91. MAIN_OBJECTS:=$(foreach file, $(MAIN_SOURCES), $(TMP_DIR)/$(file).o)
  92. MAIN_OBJECTS += $(SOLVER_TARGET)
  93. MAIN_DEPENDENCIES:=$(foreach file, $(MAIN_OBJECTS), $(file).dep)
  94. -include $(MAIN_DEPENDENCIES)
  95. MAIN_TARGET:=main
  96. TARGETS += $(MAIN_TARGET)
  97. COMMAND_LINK_MAIN=$(GXX) -o $@ $^ $(LIBS)
  98.  
  99.  
  100.  
  101. # mex
  102. ifeq ($(USE_MEX), 1)
  103.  
  104. MATLAB_DIR:=/c/Program\ Files/MATLAB/r2017a
  105.  
  106. ifeq ($(wildcard $(MATLAB_DIR)/bin/win64),)
  107. $(info WARNING: Did not find MATLAB in the specified directory $(MATLAB_DIR), disabling mex target compilation.)
  108. USE_MEX:=
  109. endif
  110.  
  111. endif
  112. ifeq ($(USE_MEX), 1)
  113.  
  114. MEX_SUFFIX:=mexw64
  115.  
  116. MEX_SOURCES:=$(shell find src/mex -name '*.cpp')
  117. MEX_OBJECTS:=$(foreach file, $(MEX_SOURCES), $(TMP_DIR)/$(file).o)
  118. MEX_OBJECTS += $(SOLVER_TARGET)
  119. MEX_DEPENDENCIES:=$(foreach file, $(MEX_OBJECTS), $(file).dep)
  120. -include $(MEX_DEPENDENCIES)
  121.  
  122. MEX_DEFINES := $(DEFINES)
  123.  
  124. MEX_INCLUDES :=$(INCLUDES) -I$(MATLAB_DIR)/extern/include
  125. MATLAB_LIB_DIR1:=$(MATLAB_DIR)/extern/lib/win64/mingw64
  126. MATLAB_LIB_DIR2:=$(MATLAB_DIR)/bin/win64
  127.  
  128. MEX_LIBS:=$(LIBS) -L$(MATLAB_LIB_DIR1) -L$(MATLAB_LIB_DIR2) -lmex -lmx
  129.  
  130.  
  131. MEX_TARGET:=examples/matlab/fastms_mex.$(MEX_SUFFIX)
  132. TARGETS += $(MEX_TARGET)
  133.  
  134. COMMAND_COMPILE_GXX_MEX=$(GXX) -c -o $@ $< $(ARGS_GXX) $(MEX_INCLUDES) $(MEX_DEFINES)
  135. COMMAND_GET_DEPENDENCIES_GXX_MEX=@$(GXX) -M $< $(ARGS_GXX) $(MEX_INCLUDES) $(MEX_DEFINES) > $@.dep
  136. COMMAND_LINK_MEX=$(GXX) -o $@ $^ -shared $(MEX_LIBS)
  137.  
  138. else
  139. DEFINES += -DDISABLE_MEX
  140. endif
  141.  
  142.  
  143.  
  144. # common commands
  145. COMMAND_POSTPROCESS_DEPENDENCIES=@echo $@:`sed 's/.*://' $@.dep | tr "\n" " " | sed 's/\\\\/ /g'` > $@.dep; sed -e 's/^.*://' -e 's/ */::/g' $@.dep | tr ":" "\n" | sed -e 's/$$/:/' -e 's/^:$$//' >> $@.dep; echo >> $@.dep
  146. COMMAND_MAKE_TARGET_DIR=@mkdir -p $(shell dirname $@)
  147. COMMAND_CLEAN=@rm -rf $(TMP_DIR) $(TARGETS)
  148.  
  149.  
  150.  
  151. targets: $(TARGETS)
  152.  
  153. # solver
  154.  
  155. $(TMP_DIR)/$(SOLVER_SOURCE_DIR)/%.cpp.o: $(SOLVER_SOURCE_DIR)/%.cpp Makefile
  156.  
  157. $(COMMAND_MAKE_TARGET_DIR)
  158. $(COMMAND_COMPILE_GXX)
  159. $(COMMAND_GET_DEPENDENCIES_GXX)
  160. $(COMMAND_POSTPROCESS_DEPENDENCIES)
  161.  
  162. $(TMP_DIR)/$(SOLVER_SOURCE_DIR)/%.cu.o: $(SOLVER_SOURCE_DIR)/%.cu Makefile
  163. $(COMMAND_MAKE_TARGET_DIR)
  164. $(COMMAND_NVCC_COMPILE)
  165. $(COMMAND_GET_DEPENDENCIES_NVCC)
  166. $(COMMAND_POSTPROCESS_DEPENDENCIES)
  167.  
  168. $(SOLVER_TARGET): $(SOLVER_OBJECTS)
  169. $(COMMAND_MAKE_TARGET_DIR)
  170. $(COMMAND_LINK_SOLVER)
  171.  
  172. # main
  173.  
  174. $(TMP_DIR)/src/examples/%.cpp.o: src/examples/%.cpp Makefile
  175. $(COMMAND_MAKE_TARGET_DIR)
  176. $(COMMAND_COMPILE_GXX)
  177. $(COMMAND_GET_DEPENDENCIES_GXX)
  178. $(COMMAND_POSTPROCESS_DEPENDENCIES)
  179.  
  180. $(MAIN_TARGET): $(MAIN_OBJECTS)
  181. $(COMMAND_MAKE_TARGET_DIR)
  182. $(COMMAND_LINK_MAIN)
  183.  
  184.  
  185.  
  186. # mex
  187. $(TMP_DIR)/src/mex/%.cpp.o: src/mex/%.cpp Makefile
  188. $(COMMAND_MAKE_TARGET_DIR)
  189. $(COMMAND_COMPILE_GXX_MEX)
  190. $(COMMAND_GET_DEPENDENCIES_GXX_MEX)
  191. $(COMMAND_POSTPROCESS_DEPENDENCIES)
  192.  
  193. $(MEX_TARGET): $(MEX_OBJECTS)
  194. $(COMMAND_MAKE_TARGET_DIR)
  195. $(COMMAND_LINK_MEX)
  196.  
  197.  
  198.  
  199. clean:
  200. $(COMMAND_CLEAN)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement