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.4 kB

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