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

7 years ago
7 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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. GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
  10. GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
  11. ifeq ($(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ7), 11)
  12. AVX2OPT = -mavx2
  13. endif
  14. endif
  15. ifeq ($(C_COMPILER), CLANG)
  16. # Any clang posing as gcc 4.2 should be new enough (3.4 or later)
  17. GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
  18. GCCMINORVERSIONGTEQ2 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 2)
  19. ifeq ($(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ2), 11)
  20. AVX2OPT = -mavx2
  21. endif
  22. endif
  23. ifdef NO_AVX2
  24. AVX2OPT=
  25. endif
  26. ifdef TARGET_CORE
  27. ifeq ($(TARGET_CORE), SKYLAKEX)
  28. override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) -march=skylake-avx512
  29. ifeq ($(OSNAME), CYGWIN_NT)
  30. override CFLAGS += -fno-asynchronous-unwind-tables
  31. endif
  32. ifeq ($(OSNAME), WINNT)
  33. ifeq ($(C_COMPILER), GCC)
  34. override CFLAGS += -fno-asynchronous-unwind-tables
  35. endif
  36. endif
  37. else ifeq ($(TARGET_CORE), HASWELL)
  38. override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) $(AVX2OPT)
  39. else
  40. override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
  41. endif
  42. BUILD_KERNEL = 1
  43. KDIR =
  44. TSUFFIX = _$(TARGET_CORE)
  45. else
  46. TARGET_CORE = $(CORE)
  47. KDIR =
  48. TSUFFIX =
  49. endif
  50. -include $(KERNELDIR)/KERNEL.$(TARGET_CORE)
  51. include $(KERNELDIR)/KERNEL
  52. include Makefile.L1
  53. include Makefile.L2
  54. include Makefile.L3
  55. include Makefile.LA
  56. HPLOBJS = \
  57. dgemm_kernel.$(SUFFIX) \
  58. $(DGEMMINCOPYOBJ) $(DGEMMITCOPYOBJ) \
  59. $(DGEMMONCOPYOBJ) $(DGEMMOTCOPYOBJ) \
  60. dtrsm_kernel_LN.$(SUFFIX) dtrsm_kernel_LT.$(SUFFIX) \
  61. dtrsm_kernel_RN.$(SUFFIX) dtrsm_kernel_RT.$(SUFFIX) \
  62. daxpy_k.$(SUFFIX) dcopy_k.$(SUFFIX) ddot_k.$(SUFFIX) \
  63. dger_k.$(SUFFIX) dscal_k.$(SUFFIX) idamax_k.$(SUFFIX) \
  64. dgemv_n.$(SUFFIX) dgemv_t.$(SUFFIX) dgemm_beta.$(SUFFIX) \
  65. dtrsm_iunucopy.$(SUFFIX) dtrsm_iunncopy.$(SUFFIX) \
  66. dtrsm_ilnucopy.$(SUFFIX) dtrsm_ilnncopy.$(SUFFIX) \
  67. dtrsm_iutucopy.$(SUFFIX) dtrsm_iutncopy.$(SUFFIX) \
  68. dtrsm_iltucopy.$(SUFFIX) dtrsm_iltncopy.$(SUFFIX) \
  69. dtrsm_ounucopy.$(SUFFIX) dtrsm_ounncopy.$(SUFFIX) \
  70. dtrsm_olnucopy.$(SUFFIX) dtrsm_olnncopy.$(SUFFIX) \
  71. dtrsm_outucopy.$(SUFFIX) dtrsm_outncopy.$(SUFFIX) \
  72. dtrsm_oltucopy.$(SUFFIX) dtrsm_oltncopy.$(SUFFIX)
  73. COMMONOBJS += lsame.$(SUFFIX) scabs1.$(SUFFIX) dcabs1.$(SUFFIX)
  74. ifeq ($(DYNAMIC_ARCH), 1)
  75. SBLASOBJS += setparam$(TSUFFIX).$(SUFFIX)
  76. CCOMMON_OPT += -DTS=$(TSUFFIX)
  77. endif
  78. KERNEL_INTERFACE = ../common_level1.h ../common_level2.h ../common_level3.h
  79. ifneq ($(NO_LAPACK), 1)
  80. KERNEL_INTERFACE += ../common_lapack.h
  81. endif
  82. ifeq ($(ARCH), x86)
  83. COMMONOBJS += cpuid.$(SUFFIX)
  84. endif
  85. ifdef EXPRECISION
  86. COMMONOBJS += qconjg.$(SUFFIX) qcabs1.$(SUFFIX)
  87. endif
  88. ifdef QUAD_PRECISION
  89. COMMONOBJS += qconjg.$(SUFFIX) qcabs1.$(SUFFIX)
  90. endif
  91. all : libs
  92. scabs1.$(SUFFIX): $(KERNELDIR)/$(SCABS_KERNEL)
  93. $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -DF_INTERFACE $< -o $(@F)
  94. dcabs1.$(SUFFIX): $(KERNELDIR)/$(DCABS_KERNEL)
  95. $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE -DF_INTERFACE $< -o $(@F)
  96. qcabs1.$(SUFFIX): $(KERNELDIR)/$(QCABS_KERNEL)
  97. $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
  98. qconjg.$(SUFFIX): $(KERNELDIR)/qconjg.S
  99. $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
  100. lsame.$(SUFFIX): $(KERNELDIR)/$(LSAME_KERNEL)
  101. $(CC) -c $(CFLAGS) -DF_INTERFACE $< -o $(@F)
  102. setparam$(TSUFFIX).$(SUFFIX): setparam$(TSUFFIX).c kernel$(TSUFFIX).h
  103. ifeq ($(USE_GEMM3M), 1)
  104. $(CC) -c $(CFLAGS) -DUSE_GEMM3M $< -o $@
  105. else
  106. $(CC) -c $(CFLAGS) $< -o $@
  107. endif
  108. setparam$(TSUFFIX).c : setparam-ref.c
  109. sed 's/TS/$(TSUFFIX)/g' $< > $(@F)
  110. kernel$(TSUFFIX).h : $(KERNEL_INTERFACE)
  111. sed 's/\ *(/$(TSUFFIX)(/g' $^ > $(@F)
  112. cpuid.$(SUFFIX): $(KERNELDIR)/cpuid.S
  113. $(CC) -c $(CFLAGS) $< -o $(@F)
  114. scabs1.$(PSUFFIX): $(KERNELDIR)/$(SCABS_KERNEL)
  115. $(CC) -c $(PFLAGS) -DCOMPLEX -UDOUBLE -DF_INTERFACE $< -o $(@F)
  116. dcabs1.$(PSUFFIX): $(KERNELDIR)/$(DCABS_KERNEL)
  117. $(CC) -c $(PFLAGS) -DCOMPLEX -DDOUBLE -DF_INTERFACE $< -o $(@F)
  118. qcabs1.$(PSUFFIX): $(KERNELDIR)/$(QCABS_KERNEL)
  119. $(CC) -c $(PFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
  120. qconjg.$(PSUFFIX): $(KERNELDIR)/qconjg.S
  121. $(CC) -c $(PFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
  122. lsame.$(PSUFFIX): $(KERNELDIR)/$(LSAME_KERNEL)
  123. $(CC) -c $(PFLAGS) -DF_INTERFACE $< -o $(@F)
  124. cpuid.$(PSUFFIX): $(KERNELDIR)/cpuid.S
  125. $(CC) -c $(PFLAGS) $< -o $(@F)
  126. #ifdef DYNAMIC_ARCH
  127. clean ::
  128. @rm -f setparam_*.c kernel_*.h setparam.h kernel.h
  129. #endif
  130. include $(TOPDIR)/Makefile.tail