You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

Makefile 11 kB

13 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. TOPDIR = ..
  2. include ../Makefile.system
  3. ifdef USE_PERL
  4. GENSYM = gensymbol.pl
  5. else
  6. GENSYM = gensymbol
  7. endif
  8. ifndef EXPRECISION
  9. EXPRECISION = 0
  10. endif
  11. ifndef NO_CBLAS
  12. NO_CBLAS = 0
  13. endif
  14. ifndef NO_LAPACK
  15. NO_LAPACK = 0
  16. endif
  17. ifndef NO_LAPACKE
  18. NO_LAPACKE = 0
  19. endif
  20. ifndef NEED2UNDERSCORES
  21. NEED2UNDERSCORES=0
  22. endif
  23. ifndef ONLY_CBLAS
  24. ONLY_CBLAS = 0
  25. endif
  26. ifndef BUILD_LAPACK_DEPRECATED
  27. BUILD_LAPACK_DEPRECATED = 0
  28. endif
  29. ifndef BUILD_BFLOAT16
  30. BUILD_BFLOAT16 = 0
  31. endif
  32. ifndef BUILD_HFLOAT16
  33. BUILD_HFLOAT16 = 0
  34. endif
  35. ifndef BUILD_SINGLE
  36. BUILD_SINGLE = 0
  37. endif
  38. ifndef BUILD_DOUBLE
  39. BUILD_DOUBLE = 0
  40. endif
  41. ifndef BUILD_COMPLEX
  42. BUILD_COMPLEX = 0
  43. endif
  44. ifndef BUILD_COMPLEX16
  45. BUILD_COMPLEX16 = 0
  46. endif
  47. ifeq ($(OSNAME), WINNT)
  48. ifeq ($(F_COMPILER), GFORTRAN)
  49. ifndef ONLY_CBLAS
  50. EXTRALIB += -lgfortran
  51. endif
  52. endif
  53. ifeq ($(USE_OPENMP), 1)
  54. ifeq ($(C_COMPILER), GCC)
  55. EXTRALIB += -lgomp
  56. endif
  57. endif
  58. endif
  59. ifeq ($(OSNAME), CYGWIN_NT)
  60. ifeq ($(F_COMPILER), GFORTRAN)
  61. ifndef ONLY_CBLAS
  62. EXTRALIB += -lgfortran
  63. endif
  64. endif
  65. endif
  66. ifeq ($(F_COMPILER)$(OSNAME), IBMAIX)
  67. EXTRALIB += -lxlf90
  68. endif
  69. ifeq ($(C_COMPILER), PGI)
  70. EXTRALIB += -pgf90libs
  71. endif
  72. ifneq (,$(filter 1 2,$(NOFORTRAN)))
  73. FEXTRALIB =
  74. endif
  75. all::
  76. libs::
  77. prof::
  78. hpl:: libgoto_hpl.$(LIBSUFFIX)
  79. hpl_p:: libgoto_hpl_p.$(LIBSUFFIX)
  80. libgoto_hpl.$(LIBSUFFIX) : ../$(LIBNAME)
  81. rm -f $(@F)
  82. $(LD) -r $(LDFLAGS) -o goto.$(SUFFIX) --whole-archive $< --no-whole-archive
  83. $(AR) cq $(@F) goto.$(SUFFIX)
  84. $(RANLIB) libgoto_hpl.$(LIBSUFFIX)
  85. libgoto_hpl_p.$(LIBSUFFIX) : ../$(LIBNAME_P)
  86. rm -f $(@F)
  87. $(LD) -r $(LDFLAGS) -o goto.$(PSUFFIX) --whole-archive $< --no-whole-archive
  88. $(AR) cq $(@F) goto.$(PSUFFIX)
  89. $(RANLIB) libgoto_hpl_p.$(LIBSUFFIX)
  90. libgoto_hpl.dll : libgoto_hpl.$(LIBSUFFIX) dllinit.$(SUFFIX) libgoto_hpl.def
  91. $(DLLWRAP) -o $(@F) --def libgoto_hpl.def --entry _dllinit -s dllinit.$(SUFFIX) --dllname libgoto_hpl.dll libgoto_hpl.$(LIBSUFFIX)
  92. lib /machine:X64 /def:libgoto_hpl.def
  93. dyn : $(LIBDYNNAME)
  94. zip : dll
  95. zip $(LIBZIPNAME) $(LIBDLLNAME) $(LIBNAME)
  96. dll : ../$(LIBDLLNAME)
  97. # On Windows, we only generate a DLL without a version suffix. This is because
  98. # applications which link against the dynamic library reference a fixed DLL name
  99. # in their import table. By instead using a stable name it is possible to
  100. # upgrade between library versions, without needing to re-link an application.
  101. # For more details see: https://github.com/xianyi/OpenBLAS/issues/127.
  102. ../$(LIBDLLNAME) : ../$(LIBNAME) $(LIBPREFIX).def dllinit.$(SUFFIX)
  103. $(RANLIB) ../$(LIBNAME)
  104. $(CC) $(CFLAGS) $(LDFLAGS) $(LIBPREFIX).def dllinit.$(SUFFIX) \
  105. -shared -o ../$(LIBDLLNAME) -Wl,--out-implib,../$(IMPLIBNAME) \
  106. -Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive $(FEXTRALIB) $(EXTRALIB)
  107. $(LIBPREFIX).def : $(GENSYM)
  108. ./$(GENSYM) win2k $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" $(BUILD_LAPACK_DEPRECATED) $(BUILD_BFLOAT16) $(BUILD_HFLOAT16) $(BUILD_SINGLE) $(BUILD_DOUBLE) $(BUILD_COMPLEX) $(BUILD_COMPLEX16) > $(@F)
  109. libgoto_hpl.def : $(GENSYM)
  110. ./$(GENSYM) win2khpl $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" $(BUILD_LAPACK_DEPRECATED) $(BUILD_BFLOAT16) $(BUILD_HFLOAT16) $(BUILD_SINGLE) $(BUILD_DOUBLE) $(BUILD_COMPLEX) $(BUILD_COMPLEX16) > $(@F)
  111. ifeq ($(OSNAME), Darwin)
  112. ifeq ($(FIXED_LIBNAME),1)
  113. INTERNALNAME = $(LIBPREFIX).dylib
  114. else
  115. INTERNALNAME = $(LIBPREFIX).$(MAJOR_VERSION).dylib
  116. endif
  117. endif
  118. ifeq (, $(SYMBOLPREFIX)$(SYMBOLSUFFIX))
  119. $(LIBDYNNAME) : ../$(LIBNAME) osx.def
  120. else
  121. ../$(LIBNAME).osx.renamed : ../$(LIBNAME) objconv.def
  122. $(OBJCONV) @objconv.def ../$(LIBNAME) ../$(LIBNAME).osx.renamed
  123. $(LIBDYNNAME) : ../$(LIBNAME).osx.renamed osx.def
  124. endif
  125. ifneq (,$(filter 1 2,$(NOFORTRAN)))
  126. #only build without Fortran
  127. $(CC) $(CFLAGS) $(LDFLAGS) -all_load -headerpad_max_install_names -install_name "$(CURDIR)/../$(INTERNALNAME)" -dynamiclib -o ../$(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def $(FEXTRALIB)
  128. else
  129. ifeq ($(F_COMPILER), INTEL)
  130. $(FC) $(FFLAGS) $(LDFLAGS) -all-load -headerpad_max_install_names -install_name "$(CURDIR)/../$(INTERNALNAME)" -dynamiclib -o ../$(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def
  131. else
  132. ifeq ($(F_COMPILER), FLANG)
  133. $(FC) $(FFLAGS) $(LDFLAGS) -fno-fortran-main -Mnomain -all_load -headerpad_max_install_names -install_name "$(CURDIR)/../$(INTERNALNAME)" -dynamiclib -o ../$(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def $(FEXTRALIB)
  134. else
  135. $(FC) $(FFLAGS) $(LDFLAGS) -all_load -headerpad_max_install_names -install_name "$(CURDIR)/../$(INTERNALNAME)" -dynamiclib -o ../$(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def $(FEXTRALIB)
  136. endif
  137. endif
  138. endif
  139. dllinit.$(SUFFIX) : dllinit.c
  140. $(CC) $(CFLAGS) -c -o $(@F) -s $<
  141. ifeq ($(OSNAME), $(filter $(OSNAME),Linux SunOS Android Haiku FreeBSD DragonFly))
  142. so : ../$(LIBSONAME)
  143. ifeq ($(OSNAME), Android)
  144. INTERNALNAME = $(LIBPREFIX).so
  145. FEXTRALIB += -lm
  146. EXTRALIB += -lm
  147. else
  148. ifeq ($(FIXED_LIBNAME),1)
  149. INTERNALNAME = $(LIBPREFIX).so
  150. else
  151. INTERNALNAME = $(LIBPREFIX).so.$(MAJOR_VERSION)
  152. endif
  153. endif
  154. ifeq (, $(SYMBOLPREFIX)$(SYMBOLSUFFIX))
  155. ../$(LIBSONAME) : ../$(LIBNAME) linktest.c
  156. else
  157. ../$(LIBNAME).renamed : ../$(LIBNAME) objcopy.def
  158. $(OBJCOPY) --redefine-syms objcopy.def ../$(LIBNAME) ../$(LIBNAME).renamed
  159. ../$(LIBSONAME) : ../$(LIBNAME).renamed linktest.c
  160. endif
  161. ifeq ($(F_COMPILER), INTEL)
  162. $(FC) $(FFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
  163. -Wl,--whole-archive $< -Wl,--no-whole-archive \
  164. -Wl,-soname,$(INTERNALNAME) $(EXTRALIB)
  165. $(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
  166. else ifeq ($(F_COMPILER), $(filter $(F_COMPILER),FLANG FLANGNEW))
  167. $(FC) $(FFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
  168. -Wl,--whole-archive $< -Wl,--no-whole-archive \
  169. -Wl,-soname,$(INTERNALNAME) $(EXTRALIB)
  170. $(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
  171. else
  172. ifneq ($(C_COMPILER), LSB)
  173. $(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
  174. -Wl,--whole-archive $< -Wl,--no-whole-archive \
  175. -Wl,-soname,$(INTERNALNAME) $(EXTRALIB)
  176. $(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
  177. else
  178. #for LSB
  179. env LSBCC_SHAREDLIBS=gfortran $(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
  180. -Wl,--whole-archive $< -Wl,--no-whole-archive \
  181. -Wl,-soname,$(INTERNALNAME) $(EXTRALIB)
  182. $(FC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
  183. endif
  184. endif
  185. rm -f linktest
  186. endif
  187. #http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
  188. ifeq ($(OSNAME), $(filter $(OSNAME),OpenBSD NetBSD))
  189. so : ../$(LIBSONAME)
  190. ifeq (, $(SYMBOLPREFIX)$(SYMBOLSUFFIX))
  191. ../$(LIBSONAME) : ../$(LIBNAME) linktest.c
  192. else
  193. ../$(LIBNAME).renamed : ../$(LIBNAME) objcopy.def
  194. $(OBJCOPY) --redefine-syms objcopy.def ../$(LIBNAME) ../$(LIBNAME).renamed
  195. ../$(LIBSONAME) : ../$(LIBNAME).renamed linktest.c
  196. endif
  197. $(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
  198. -Wl,--whole-archive $< -Wl,--no-whole-archive \
  199. $(FEXTRALIB) $(EXTRALIB)
  200. $(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
  201. rm -f linktest
  202. endif
  203. ifeq ($(OSNAME), OSF1)
  204. so : ../$(LIBSONAME)
  205. ../$(LIBSONAME) :
  206. $(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) ../$(LIBNAME)
  207. endif
  208. ifeq ($(OSNAME), SunOS)
  209. so : ../$(LIBSONAME)
  210. $(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
  211. -Wl,--whole-archive ../$(LIBNAME) -Wl,--no-whole-archive $(EXTRALIB)
  212. $(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(FEXTRALIB) && echo OK.
  213. rm -f linktest
  214. endif
  215. ifeq ($(OSNAME), AIX)
  216. so : ../$(LIBSONAME) linktest.c
  217. $(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) $(EXTRALIB) && echo OK.
  218. rm -f linktest
  219. ../$(LIBSONAME) : aix.exp
  220. $(CC) $(CFLAGS) $(LDFLAGS) -shared -o ../$(LIBSONAME) \
  221. -Wl,-bcdtors:all:-2147481648:s,-bE:aix.exp -Wl,-bbigtoc ../$(LIBNAME) $(EXTRALIB)
  222. aix.exp :
  223. /usr/bin/nm -X32_64 -PCpgl ../$(LIBNAME) | /usr/bin/awk '{ if ((($$ 2 == "T") \
  224. || ($$ 2 == "D") || ($$ 2 == "B") || ($$ 2 == "W") || ($$ 2 == "V") || ($$ 2 == "Z")) && (substr($$ 1,1,1) != ".")) \
  225. { if (($$ 2 == "W") || ($$ 2 == "V") || ($$ 2 == "Z")) { print $$ 1 " weak" } else { print $$ 1 } } }' | \
  226. /usr/bin/sort -u > aix.exp
  227. ifeq ($(COMPILER_F77), xlf)
  228. goto32.$(SUFFIX) : ../$(LIBNAME) aix.def
  229. ld -o $(@F) ../$(LIBNAME) -bE:aix.def -bM:SRE -bnoexpall -bnoentry -L$(HOME)/misc/lib -lxlf90 -lc -lm -lpthread
  230. goto64.$(SUFFIX) : ../$(LIBNAME) aix.def
  231. ld -b64 -o $(@F) ../$(LIBNAME) -bE:aix.def -bM:SRE -bnoexpall -bnoentry -L$(HOME)/misc/lib/ppc64 -lxlf90 -lc -lm -lpthread
  232. else
  233. goto32.$(SUFFIX) : ../$(LIBNAME) aix.def
  234. ld -o $(@F) ../$(LIBNAME) -bE:aix.def -bM:SRE -bnoexpall -bnoentry -L$(HOME)/misc/lib -lg2c -lc -lm
  235. goto64.$(SUFFIX) : ../$(LIBNAME) aix.def
  236. ld -b64 -o $(@F) ../$(LIBNAME) -bE:aix.def -bM:SRE -bnoexpall -bnoentry -L$(HOME)/misc/lib/ppc64 -lg2c -lc -lm
  237. endif
  238. endif
  239. static : ../$(LIBNAME)
  240. $(LD) $(LDFLAGS) -r -o goto.$(SUFFIX) \
  241. --whole-archive ../$(LIBNAME) --no-whole-archive
  242. rm -f ../$(LIBNAME)
  243. $(AR) -cq ../$(LIBNAME) goto.$(SUFFIX)
  244. rm -f goto.$(SUFFIX)
  245. osx.def : $(GENSYM) ../Makefile.system ../getarch.c
  246. ./$(GENSYM) osx $(ARCH) "$(BU)" $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" $(BUILD_LAPACK_DEPRECATED) $(BUILD_BFLOAT16) $(BUILD_HFLOAT16) $(BUILD_SINGLE) $(BUILD_DOUBLE) $(BUILD_COMPLEX) $(BUILD_COMPLEX16) > $(@F)
  247. aix.def : $(GENSYM) ../Makefile.system ../getarch.c
  248. ./$(GENSYM) aix $(ARCH) "$(BU)" $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" $(BUILD_LAPACK_DEPRECATED) $(BUILD_BFLOAT16) $(BUILD_HFLOAT16) $(BUILD_SINGLE) $(BUILD_DOUBLE) $(BUILD_COMPLEX) $(BUILD_COMPLEX16) > $(@F)
  249. objcopy.def : $(GENSYM) ../Makefile.system ../getarch.c
  250. ./$(GENSYM) objcopy $(ARCH) "$(BU)" $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" $(BUILD_LAPACK_DEPRECATED) $(BUILD_BFLOAT16) $(BUILD_HFLOAT16) $(BUILD_SINGLE) $(BUILD_DOUBLE) $(BUILD_COMPLEX) $(BUILD_COMPLEX16) > $(@F)
  251. objconv.def : $(GENSYM) ../Makefile.system ../getarch.c
  252. ./$(GENSYM) objconv $(ARCH) "$(BU)" $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" $(BUILD_LAPACK_DEPRECATED) $(BUILD_BFLOAT16) $(BUILD_HFLOAT16) $(BUILD_SINGLE) $(BUILD_DOUBLE) $(BUILD_COMPLEX) $(BUILD_COMPLEX16) > $(@F)
  253. test : linktest.c
  254. $(CC) $(CFLAGS) $(LDFLAGS) -w -o linktest linktest.c ../$(LIBSONAME) -lm && echo OK.
  255. rm -f linktest
  256. linktest.c : $(GENSYM) ../Makefile.system ../getarch.c
  257. ./$(GENSYM) linktest $(ARCH) "$(BU)" $(EXPRECISION) $(NO_CBLAS) $(NO_LAPACK) $(NO_LAPACKE) $(NEED2UNDERSCORES) $(ONLY_CBLAS) "$(SYMBOLPREFIX)" "$(SYMBOLSUFFIX)" $(BUILD_LAPACK_DEPRECATED) $(BUILD_BFLOAT16) $(BUILD_HFLOAT16) $(BUILD_SINGLE) $(BUILD_DOUBLE) $(BUILD_COMPLEX) $(BUILD_COMPLEX16) > linktest.c
  258. clean ::
  259. @rm -f *.def *.dylib __.SYMDEF* *.renamed
  260. include ../Makefile.tail