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 6.2 kB

5 years ago
7 years ago
5 years ago
5 years ago
7 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. ifdef TARGET_CORE
  2. TARGET = $(TARGET_CORE)
  3. endif
  4. TOPDIR = ..
  5. include $(TOPDIR)/Makefile.system
  6. ifdef HAVE_SSE3
  7. CFLAGS += -msse3
  8. endif
  9. ifdef HAVE_SSSE3
  10. CFLAGS += -mssse3
  11. endif
  12. ifeq ($(C_COMPILER), GCC)
  13. GCCVERSIONGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9)
  14. GCCVERSIONGTEQ10 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 10)
  15. endif
  16. ifeq ($(ARCH), power)
  17. ifeq ($(C_COMPILER), CLANG)
  18. override CFLAGS += -fno-integrated-as
  19. endif
  20. endif
  21. AVX2OPT =
  22. ifeq ($(C_COMPILER), GCC)
  23. # AVX2 support was added in 4.7.0
  24. GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
  25. GCCVERSIONGTEQ5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 5)
  26. GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
  27. GCCVERSIONCHECK := $(GCCVERSIONGTEQ5)$(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ7)
  28. ifeq ($(GCCVERSIONCHECK), $(filter $(GCCVERSIONCHECK), 011 110 111))
  29. AVX2OPT = -mavx2
  30. endif
  31. endif
  32. ifeq ($(C_COMPILER), CLANG)
  33. # Any clang posing as gcc 4.2 should be new enough (3.4 or later)
  34. GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
  35. GCCVERSIONGTEQ5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 5)
  36. GCCMINORVERSIONGTEQ2 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 2)
  37. GCCVERSIONCHECK := $(GCCVERSIONGTEQ5)$(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ7)
  38. ifeq ($(GCCVERSIONCHECK), $(filter $(GCCVERSIONCHECK), 011 110 111))
  39. AVX2OPT = -mavx2
  40. endif
  41. endif
  42. ifdef NO_AVX2
  43. AVX2OPT=
  44. endif
  45. ifdef TARGET_CORE
  46. ifeq ($(TARGET_CORE), $(filter $(TARGET_CORE),PRESCOTT CORE2 PENRYN DUNNINGTON ATOM NANO SANDYBRIDGE HASWELL NEHALEM ZEN BARCELONA BOBCAT BULLDOZER PILEDRIVER EXCAVATOR STEAMROLLER OPTERON_SSE3))
  47. override CFLAGS += -msse -msse2 -msse3 -mssse3 -msse4.1
  48. endif
  49. ifeq ($(TARGET_CORE), $(filter $(TARGET_CORE),KATMAI COPPERMINE BANIAS NORTHWOOD ATHLON OPTERON))
  50. override CFLAGS += -msse -msse2
  51. endif
  52. ifeq ($(TARGET_CORE), COOPERLAKE)
  53. override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
  54. ifeq ($(GCCVERSIONGTEQ10), 1)
  55. override CFLAGS += -march=cooperlake
  56. else
  57. override CFLAGS += -march=skylake-avx512
  58. endif
  59. ifeq ($(OSNAME), CYGWIN_NT)
  60. override CFLAGS += -fno-asynchronous-unwind-tables
  61. endif
  62. ifeq ($(OSNAME), WINNT)
  63. ifeq ($(C_COMPILER), GCC)
  64. override CFLAGS += -fno-asynchronous-unwind-tables
  65. endif
  66. endif
  67. else ifeq ($(TARGET_CORE), SKYLAKEX)
  68. override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) -march=skylake-avx512
  69. ifeq ($(OSNAME), CYGWIN_NT)
  70. override CFLAGS += -fno-asynchronous-unwind-tables
  71. endif
  72. ifeq ($(OSNAME), WINNT)
  73. ifeq ($(C_COMPILER), GCC)
  74. override CFLAGS += -fno-asynchronous-unwind-tables
  75. endif
  76. endif
  77. else ifeq ($(TARGET_CORE), HASWELL)
  78. override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) $(AVX2OPT)
  79. else
  80. override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
  81. endif
  82. BUILD_KERNEL = 1
  83. KDIR =
  84. TSUFFIX = _$(TARGET_CORE)
  85. else
  86. TARGET_CORE = $(CORE)
  87. KDIR =
  88. TSUFFIX =
  89. endif
  90. -include $(KERNELDIR)/KERNEL.$(TARGET_CORE)
  91. include $(KERNELDIR)/KERNEL
  92. include Makefile.L1
  93. include Makefile.L2
  94. include Makefile.L3
  95. include Makefile.LA
  96. HPLOBJS = \
  97. dgemm_kernel.$(SUFFIX) \
  98. $(DGEMMINCOPYOBJ) $(DGEMMITCOPYOBJ) \
  99. $(DGEMMONCOPYOBJ) $(DGEMMOTCOPYOBJ) \
  100. dtrsm_kernel_LN.$(SUFFIX) dtrsm_kernel_LT.$(SUFFIX) \
  101. dtrsm_kernel_RN.$(SUFFIX) dtrsm_kernel_RT.$(SUFFIX) \
  102. daxpy_k.$(SUFFIX) dcopy_k.$(SUFFIX) ddot_k.$(SUFFIX) \
  103. dger_k.$(SUFFIX) dscal_k.$(SUFFIX) idamax_k.$(SUFFIX) \
  104. dgemv_n.$(SUFFIX) dgemv_t.$(SUFFIX) dgemm_beta.$(SUFFIX) \
  105. dtrsm_iunucopy.$(SUFFIX) dtrsm_iunncopy.$(SUFFIX) \
  106. dtrsm_ilnucopy.$(SUFFIX) dtrsm_ilnncopy.$(SUFFIX) \
  107. dtrsm_iutucopy.$(SUFFIX) dtrsm_iutncopy.$(SUFFIX) \
  108. dtrsm_iltucopy.$(SUFFIX) dtrsm_iltncopy.$(SUFFIX) \
  109. dtrsm_ounucopy.$(SUFFIX) dtrsm_ounncopy.$(SUFFIX) \
  110. dtrsm_olnucopy.$(SUFFIX) dtrsm_olnncopy.$(SUFFIX) \
  111. dtrsm_outucopy.$(SUFFIX) dtrsm_outncopy.$(SUFFIX) \
  112. dtrsm_oltucopy.$(SUFFIX) dtrsm_oltncopy.$(SUFFIX)
  113. COMMONOBJS += lsame.$(SUFFIX) scabs1.$(SUFFIX) dcabs1.$(SUFFIX)
  114. ifeq ($(DYNAMIC_ARCH), 1)
  115. SBLASOBJS += setparam$(TSUFFIX).$(SUFFIX)
  116. CCOMMON_OPT += -DTS=$(TSUFFIX)
  117. endif
  118. KERNEL_INTERFACE = ../common_level1.h ../common_level2.h ../common_level3.h
  119. ifneq ($(NO_LAPACK), 1)
  120. KERNEL_INTERFACE += ../common_lapack.h
  121. endif
  122. ifeq ($(ARCH), x86)
  123. COMMONOBJS += cpuid.$(SUFFIX)
  124. endif
  125. ifdef EXPRECISION
  126. COMMONOBJS += qconjg.$(SUFFIX) qcabs1.$(SUFFIX)
  127. endif
  128. ifdef QUAD_PRECISION
  129. COMMONOBJS += qconjg.$(SUFFIX) qcabs1.$(SUFFIX)
  130. endif
  131. all : libs
  132. scabs1.$(SUFFIX): $(KERNELDIR)/$(SCABS_KERNEL)
  133. $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -DF_INTERFACE $< -o $(@F)
  134. dcabs1.$(SUFFIX): $(KERNELDIR)/$(DCABS_KERNEL)
  135. $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE -DF_INTERFACE $< -o $(@F)
  136. qcabs1.$(SUFFIX): $(KERNELDIR)/$(QCABS_KERNEL)
  137. $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
  138. qconjg.$(SUFFIX): $(KERNELDIR)/qconjg.S
  139. $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
  140. lsame.$(SUFFIX): $(KERNELDIR)/$(LSAME_KERNEL)
  141. $(CC) -c $(CFLAGS) -DF_INTERFACE $< -o $(@F)
  142. setparam$(TSUFFIX).$(SUFFIX): setparam$(TSUFFIX).c kernel$(TSUFFIX).h
  143. ifeq ($(USE_GEMM3M), 1)
  144. $(CC) -c $(CFLAGS) -DUSE_GEMM3M $< -o $@
  145. else
  146. $(CC) -c $(CFLAGS) $< -o $@
  147. endif
  148. setparam$(TSUFFIX).c : setparam-ref.c
  149. sed 's/TS/$(TSUFFIX)/g' $< > $(@F)
  150. kernel$(TSUFFIX).h : $(KERNEL_INTERFACE)
  151. sed 's/\ *(/$(TSUFFIX)(/g' $^ > $(@F)
  152. cpuid.$(SUFFIX): $(KERNELDIR)/cpuid.S
  153. $(CC) -c $(CFLAGS) $< -o $(@F)
  154. scabs1.$(PSUFFIX): $(KERNELDIR)/$(SCABS_KERNEL)
  155. $(CC) -c $(PFLAGS) -DCOMPLEX -UDOUBLE -DF_INTERFACE $< -o $(@F)
  156. dcabs1.$(PSUFFIX): $(KERNELDIR)/$(DCABS_KERNEL)
  157. $(CC) -c $(PFLAGS) -DCOMPLEX -DDOUBLE -DF_INTERFACE $< -o $(@F)
  158. qcabs1.$(PSUFFIX): $(KERNELDIR)/$(QCABS_KERNEL)
  159. $(CC) -c $(PFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
  160. qconjg.$(PSUFFIX): $(KERNELDIR)/qconjg.S
  161. $(CC) -c $(PFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
  162. lsame.$(PSUFFIX): $(KERNELDIR)/$(LSAME_KERNEL)
  163. $(CC) -c $(PFLAGS) -DF_INTERFACE $< -o $(@F)
  164. cpuid.$(PSUFFIX): $(KERNELDIR)/cpuid.S
  165. $(CC) -c $(PFLAGS) $< -o $(@F)
  166. #ifdef DYNAMIC_ARCH
  167. clean ::
  168. @rm -f setparam_*.c kernel_*.h setparam.h kernel.h
  169. #endif
  170. include $(TOPDIR)/Makefile.tail