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.

system.cmake 15 kB

7 years ago
7 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. ##
  2. ## Author: Hank Anderson <hank@statease.com>
  3. ## Description: Ported from OpenBLAS/Makefile.system
  4. ##
  5. set(NETLIB_LAPACK_DIR "${PROJECT_SOURCE_DIR}/lapack-netlib")
  6. # System detection, via CMake.
  7. include("${PROJECT_SOURCE_DIR}/cmake/system_check.cmake")
  8. if(CMAKE_CROSSCOMPILING AND NOT DEFINED TARGET)
  9. # Detect target without running getarch
  10. if (ARM64)
  11. set(TARGET "ARMV8")
  12. elseif(ARM)
  13. set(TARGET "ARMV7") # TODO: Ask compiler which arch this is
  14. else()
  15. message(FATAL_ERROR "When cross compiling, a TARGET is required.")
  16. endif()
  17. endif()
  18. # Other files expect CORE, which is actually TARGET and will become TARGET_CORE for kernel build. Confused yet?
  19. # It seems we are meant to use TARGET as input and CORE internally as kernel.
  20. if(NOT DEFINED CORE AND DEFINED TARGET)
  21. set(CORE ${TARGET})
  22. endif()
  23. # TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
  24. if (DEFINED TARGET_CORE)
  25. set(TARGET ${TARGET_CORE})
  26. endif ()
  27. # Force fallbacks for 32bit
  28. if (DEFINED BINARY AND DEFINED TARGET AND BINARY EQUAL 32)
  29. message(STATUS "Compiling a ${BINARY}-bit binary.")
  30. set(NO_AVX 1)
  31. if (${TARGET} STREQUAL "HASWELL" OR ${TARGET} STREQUAL "SANDYBRIDGE" OR ${TARGET} STREQUAL "SKYLAKEX")
  32. set(TARGET "NEHALEM")
  33. endif ()
  34. if (${TARGET} STREQUAL "BULLDOZER" OR ${TARGET} STREQUAL "PILEDRIVER" OR ${TARGET} STREQUAL "ZEN")
  35. set(TARGET "BARCELONA")
  36. endif ()
  37. if (${TARGET} STREQUAL "ARMV8" OR ${TARGET} STREQUAL "CORTEXA57" OR ${TARGET} STREQUAL "CORTEXA53")
  38. set(TARGET "ARMV7")
  39. endif ()
  40. endif ()
  41. if (DEFINED TARGET)
  42. if (${TARGET} STREQUAL "SKYLAKEX" AND NOT NO_AVX512)
  43. set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512")
  44. endif()
  45. if (${TARGET} STREQUAL "HASWELL" AND NOT NO_AVX2)
  46. if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
  47. execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
  48. if (${GCC_VERSION} VERSION_GREATER 4.7 OR ${GCC_VERSION} VERSION_EQUAL 4.7)
  49. set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mavx2")
  50. endif()
  51. elseif (${CMAKE_C_COMPILER_ID} STREQUAL "CLANG")
  52. set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mavx2")
  53. endif()
  54. endif()
  55. endif()
  56. if (DEFINED TARGET)
  57. message(STATUS "Targeting the ${TARGET} architecture.")
  58. set(GETARCH_FLAGS "-DFORCE_${TARGET}")
  59. endif ()
  60. # On x86_64 build getarch with march=native. This is required to detect AVX512 support in getarch.
  61. if (X86_64 AND NOT ${CMAKE_C_COMPILER_ID} STREQUAL "PGI")
  62. set(GETARCH_FLAGS "${GETARCH_FLAGS} -march=native")
  63. endif ()
  64. # On x86 no AVX support is available
  65. if (X86 OR X86_64)
  66. if ((DEFINED BINARY AND BINARY EQUAL 32) OR ("$CMAKE_SIZEOF_VOID_P}" EQUAL "4"))
  67. set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_AVX -DNO_AVX2 -DNO_AVX512")
  68. endif ()
  69. endif ()
  70. if (INTERFACE64)
  71. message(STATUS "Using 64-bit integers.")
  72. set(GETARCH_FLAGS "${GETARCH_FLAGS} -DUSE64BITINT")
  73. endif ()
  74. if (NOT DEFINED GEMM_MULTITHREAD_THRESHOLD)
  75. set(GEMM_MULTITHREAD_THRESHOLD 4)
  76. endif ()
  77. message(STATUS "GEMM multithread threshold set to ${GEMM_MULTITHREAD_THRESHOLD}.")
  78. set(GETARCH_FLAGS "${GETARCH_FLAGS} -DGEMM_MULTITHREAD_THRESHOLD=${GEMM_MULTITHREAD_THRESHOLD}")
  79. if (NO_AVX)
  80. message(STATUS "Disabling Advanced Vector Extensions (AVX).")
  81. set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_AVX")
  82. endif ()
  83. if (NO_AVX2)
  84. message(STATUS "Disabling Advanced Vector Extensions 2 (AVX2).")
  85. set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_AVX2")
  86. endif ()
  87. if (CMAKE_BUILD_TYPE STREQUAL "Debug")
  88. set(GETARCH_FLAGS "${GETARCH_FLAGS} ${CMAKE_C_FLAGS_DEBUG}")
  89. endif ()
  90. if (NOT DEFINED NO_PARALLEL_MAKE)
  91. set(NO_PARALLEL_MAKE 0)
  92. endif ()
  93. set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_PARALLEL_MAKE=${NO_PARALLEL_MAKE}")
  94. if (CMAKE_C_COMPILER STREQUAL loongcc)
  95. set(GETARCH_FLAGS "${GETARCH_FLAGS} -static")
  96. endif ()
  97. #if don't use Fortran, it will only compile CBLAS.
  98. if (ONLY_CBLAS)
  99. set(NO_LAPACK 1)
  100. else ()
  101. set(ONLY_CBLAS 0)
  102. endif ()
  103. # N.B. this is NUM_THREAD in Makefile.system which is probably a bug -hpa
  104. if (NOT CMAKE_CROSSCOMPILING)
  105. if (NOT DEFINED NUM_CORES)
  106. include(ProcessorCount)
  107. ProcessorCount(NUM_CORES)
  108. endif()
  109. endif()
  110. if (NOT DEFINED NUM_PARALLEL)
  111. set(NUM_PARALLEL 1)
  112. endif()
  113. if (NOT DEFINED NUM_THREADS)
  114. if (DEFINED NUM_CORES AND NOT NUM_CORES EQUAL 0)
  115. # HT?
  116. set(NUM_THREADS ${NUM_CORES})
  117. else ()
  118. set(NUM_THREADS 0)
  119. endif ()
  120. endif()
  121. if (${NUM_THREADS} LESS 2)
  122. set(USE_THREAD 0)
  123. elseif(NOT DEFINED USE_THREAD)
  124. set(USE_THREAD 1)
  125. endif ()
  126. if (USE_THREAD)
  127. message(STATUS "Multi-threading enabled with ${NUM_THREADS} threads.")
  128. else()
  129. if (${USE_LOCKING})
  130. set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_LOCKING")
  131. endif ()
  132. endif ()
  133. include("${PROJECT_SOURCE_DIR}/cmake/prebuild.cmake")
  134. if (DEFINED BINARY)
  135. message(STATUS "Compiling a ${BINARY}-bit binary.")
  136. endif ()
  137. if (NOT DEFINED NEED_PIC)
  138. set(NEED_PIC 1)
  139. endif ()
  140. # OS dependent settings
  141. include("${PROJECT_SOURCE_DIR}/cmake/os.cmake")
  142. # Architecture dependent settings
  143. include("${PROJECT_SOURCE_DIR}/cmake/arch.cmake")
  144. # C Compiler dependent settings
  145. include("${PROJECT_SOURCE_DIR}/cmake/cc.cmake")
  146. if (NOT NOFORTRAN)
  147. # Fortran Compiler dependent settings
  148. include("${PROJECT_SOURCE_DIR}/cmake/fc.cmake")
  149. else ()
  150. set(NO_LAPACK 1)
  151. set(NO_LAPACKE 1)
  152. endif ()
  153. if (BINARY64)
  154. if (INTERFACE64)
  155. # CCOMMON_OPT += -DUSE64BITINT
  156. endif ()
  157. endif ()
  158. if (NEED_PIC)
  159. if (${CMAKE_C_COMPILER} STREQUAL "IBM")
  160. set(CCOMMON_OPT "${CCOMMON_OPT} -qpic=large")
  161. else ()
  162. set(CCOMMON_OPT "${CCOMMON_OPT} -fPIC")
  163. endif ()
  164. if (NOT NOFORTRAN)
  165. if (${F_COMPILER} STREQUAL "SUN")
  166. set(FCOMMON_OPT "${FCOMMON_OPT} -pic")
  167. else ()
  168. set(FCOMMON_OPT "${FCOMMON_OPT} -fPIC")
  169. endif ()
  170. endif()
  171. endif ()
  172. if (DYNAMIC_ARCH)
  173. if (X86 OR X86_64 OR ARM64 OR PPC)
  174. set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_ARCH")
  175. if (DYNAMIC_OLDER)
  176. set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_OLDER")
  177. endif ()
  178. else ()
  179. unset (DYNAMIC_ARCH)
  180. message (STATUS "DYNAMIC_ARCH is not supported on the target architecture, removing")
  181. endif ()
  182. endif ()
  183. if (DYNAMIC_LIST)
  184. set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_LIST")
  185. foreach(DCORE ${DYNAMIC_LIST})
  186. set(CCOMMON_OPT "${CCOMMON_OPT} -DDYN_${DCORE}")
  187. endforeach ()
  188. endif ()
  189. if (NO_LAPACK)
  190. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_LAPACK")
  191. #Disable LAPACK C interface
  192. set(NO_LAPACKE 1)
  193. endif ()
  194. if (NO_LAPACKE)
  195. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_LAPACKE")
  196. endif ()
  197. if (NO_AVX)
  198. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX")
  199. endif ()
  200. if (X86)
  201. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX")
  202. endif ()
  203. if (NO_AVX2)
  204. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX2")
  205. endif ()
  206. if (USE_THREAD)
  207. # USE_SIMPLE_THREADED_LEVEL3 = 1
  208. # NO_AFFINITY = 1
  209. set(CCOMMON_OPT "${CCOMMON_OPT} -DSMP_SERVER")
  210. if (MIPS64)
  211. if (NOT ${CORE} STREQUAL "LOONGSON3B")
  212. set(USE_SIMPLE_THREADED_LEVEL3 1)
  213. endif ()
  214. endif ()
  215. if (BIGNUMA)
  216. set(CCOMMON_OPT "${CCOMMON_OPT} -DBIGNUMA")
  217. endif ()
  218. endif ()
  219. if (NO_WARMUP)
  220. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_WARMUP")
  221. endif ()
  222. if (CONSISTENT_FPCSR)
  223. set(CCOMMON_OPT "${CCOMMON_OPT} -DCONSISTENT_FPCSR")
  224. endif ()
  225. if (USE_TLS)
  226. set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_TLS")
  227. endif ()
  228. # Only for development
  229. # set(CCOMMON_OPT "${CCOMMON_OPT} -DPARAMTEST")
  230. # set(CCOMMON_OPT "${CCOMMON_OPT} -DPREFETCHTEST")
  231. # set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_SWITCHING")
  232. # set(USE_PAPI 1)
  233. if (USE_PAPI)
  234. set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_PAPI")
  235. set(EXTRALIB "${EXTRALIB} -lpapi -lperfctr")
  236. endif ()
  237. if (DYNAMIC_THREADS)
  238. set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_THREADS")
  239. endif ()
  240. set(CCOMMON_OPT "${CCOMMON_OPT} -DMAX_CPU_NUMBER=${NUM_THREADS}")
  241. set(CCOMMON_OPT "${CCOMMON_OPT} -DMAX_PARALLEL_NUMBER=${NUM_PARALLEL}")
  242. if (BUFFERSIZE)
  243. set(CCOMMON_OPT "${CCOMMON_OPT} -DBUFFERSIZE=${BUFFERSIZE}")
  244. endif ()
  245. if (USE_SIMPLE_THREADED_LEVEL3)
  246. set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_SIMPLE_THREADED_LEVEL3")
  247. endif ()
  248. if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  249. if (DEFINED MAX_STACK_ALLOC)
  250. if (NOT ${MAX_STACK_ALLOC} EQUAL 0)
  251. set(CCOMMON_OPT "${CCOMMON_OPT} -DMAX_STACK_ALLOC=${MAX_STACK_ALLOC}")
  252. endif ()
  253. else ()
  254. set(CCOMMON_OPT "${CCOMMON_OPT} -DMAX_STACK_ALLOC=2048")
  255. endif ()
  256. endif ()
  257. if (DEFINED LIBNAMESUFFIX)
  258. set(LIBPREFIX "libopenblas_${LIBNAMESUFFIX}")
  259. else ()
  260. set(LIBPREFIX "libopenblas")
  261. endif ()
  262. if (NOT DEFINED SYMBOLPREFIX)
  263. set(SYMBOLPREFIX "")
  264. endif ()
  265. if (NOT DEFINED SYMBOLSUFFIX)
  266. set(SYMBOLSUFFIX "")
  267. endif ()
  268. set(KERNELDIR "${PROJECT_SOURCE_DIR}/kernel/${ARCH}")
  269. # TODO: need to convert these Makefiles
  270. # include ${PROJECT_SOURCE_DIR}/cmake/${ARCH}.cmake
  271. if (${CORE} STREQUAL "PPC440")
  272. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_QALLOC")
  273. endif ()
  274. if (${CORE} STREQUAL "PPC440FP2")
  275. set(STATIC_ALLOCATION 1)
  276. endif ()
  277. if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
  278. set(NO_AFFINITY 1)
  279. endif ()
  280. if (NOT X86_64 AND NOT X86 AND NOT ${CORE} STREQUAL "LOONGSON3B")
  281. set(NO_AFFINITY 1)
  282. endif ()
  283. if (NO_AFFINITY)
  284. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AFFINITY")
  285. endif ()
  286. if (FUNCTION_PROFILE)
  287. set(CCOMMON_OPT "${CCOMMON_OPT} -DFUNCTION_PROFILE")
  288. endif ()
  289. if (HUGETLB_ALLOCATION)
  290. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_HUGETLB")
  291. endif ()
  292. if (DEFINED HUGETLBFILE_ALLOCATION)
  293. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=${HUGETLBFILE_ALLOCATION})")
  294. endif ()
  295. if (STATIC_ALLOCATION)
  296. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_STATIC")
  297. endif ()
  298. if (DEVICEDRIVER_ALLOCATION)
  299. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"")
  300. endif ()
  301. if (MIXED_MEMORY_ALLOCATION)
  302. set(CCOMMON_OPT "${CCOMMON_OPT} -DMIXED_MEMORY_ALLOCATION")
  303. endif ()
  304. set(CCOMMON_OPT "${CCOMMON_OPT} -DVERSION=\"\\\"${OpenBLAS_VERSION}\\\"\"")
  305. set(REVISION "-r${OpenBLAS_VERSION}")
  306. set(MAJOR_VERSION ${OpenBLAS_MAJOR_VERSION})
  307. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CCOMMON_OPT}")
  308. if(NOT MSVC)
  309. set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${CCOMMON_OPT}")
  310. endif()
  311. # TODO: not sure what PFLAGS is -hpa
  312. set(PFLAGS "${PFLAGS} ${CCOMMON_OPT} -I${TOPDIR} -DPROFILE ${COMMON_PROF}")
  313. set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${FCOMMON_OPT}")
  314. # TODO: not sure what FPFLAGS is -hpa
  315. set(FPFLAGS "${FPFLAGS} ${FCOMMON_OPT} ${COMMON_PROF}")
  316. #For LAPACK Fortran codes.
  317. set(LAPACK_FFLAGS "${LAPACK_FFLAGS} ${CMAKE_Fortran_FLAGS}")
  318. set(LAPACK_FPFLAGS "${LAPACK_FPFLAGS} ${FPFLAGS}")
  319. #Disable -fopenmp for LAPACK Fortran codes on Windows.
  320. if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  321. set(FILTER_FLAGS "-fopenmp;-mp;-openmp;-xopenmp=parallel")
  322. foreach (FILTER_FLAG ${FILTER_FLAGS})
  323. string(REPLACE ${FILTER_FLAG} "" LAPACK_FFLAGS ${LAPACK_FFLAGS})
  324. string(REPLACE ${FILTER_FLAG} "" LAPACK_FPFLAGS ${LAPACK_FPFLAGS})
  325. endforeach ()
  326. endif ()
  327. if ("${F_COMPILER}" STREQUAL "GFORTRAN")
  328. # lapack-netlib is rife with uninitialized warnings -hpa
  329. set(LAPACK_FFLAGS "${LAPACK_FFLAGS} -Wno-maybe-uninitialized")
  330. endif ()
  331. set(LAPACK_CFLAGS "${CMAKE_C_CFLAGS} -DHAVE_LAPACK_CONFIG_H")
  332. if (INTERFACE64)
  333. set(LAPACK_CFLAGS "${LAPACK_CFLAGS} -DLAPACK_ILP64")
  334. endif ()
  335. if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  336. set(LAPACK_CFLAGS "${LAPACK_CFLAGS} -DOPENBLAS_OS_WINDOWS")
  337. endif ()
  338. if (${CMAKE_C_COMPILER} STREQUAL "LSB" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  339. set(LAPACK_CFLAGS "${LAPACK_CFLAGS} -DLAPACK_COMPLEX_STRUCTURE")
  340. endif ()
  341. if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
  342. if ("${F_COMPILER}" STREQUAL "FLANG")
  343. if (${CMAKE_Fortran_COMPILER_VERSION} VERSION_LESS_EQUAL 3)
  344. set(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fno-unroll-loops")
  345. endif ()
  346. endif ()
  347. endif ()
  348. if (NOT DEFINED SUFFIX)
  349. set(SUFFIX o)
  350. endif ()
  351. if (NOT DEFINED PSUFFIX)
  352. set(PSUFFIX po)
  353. endif ()
  354. if (NOT DEFINED LIBSUFFIX)
  355. set(LIBSUFFIX a)
  356. endif ()
  357. if (DYNAMIC_ARCH)
  358. if (USE_THREAD)
  359. set(LIBNAME "${LIBPREFIX}p${REVISION}.${LIBSUFFIX}")
  360. set(LIBNAME_P "${LIBPREFIX}p${REVISION}_p.${LIBSUFFIX}")
  361. else ()
  362. set(LIBNAME "${LIBPREFIX}${REVISION}.${LIBSUFFIX}")
  363. set(LIBNAME_P "${LIBPREFIX}${REVISION}_p.${LIBSUFFIX}")
  364. endif ()
  365. else ()
  366. if (USE_THREAD)
  367. set(LIBNAME "${LIBPREFIX}_${LIBCORE}p${REVISION}.${LIBSUFFIX}")
  368. set(LIBNAME_P "${LIBPREFIX}_${LIBCORE}p${REVISION}_p.${LIBSUFFIX}")
  369. else ()
  370. set(LIBNAME "${LIBPREFIX}_${LIBCORE}${REVISION}.${LIBSUFFIX}")
  371. set(LIBNAME_P "${LIBPREFIX}_${LIBCORE}${REVISION}_p.${LIBSUFFIX}")
  372. endif ()
  373. endif ()
  374. set(LIBDLLNAME "${LIBPREFIX}.dll")
  375. set(LIBSONAME "${LIBNAME}.${LIBSUFFIX}.so")
  376. set(LIBDYNNAME "${LIBNAME}.${LIBSUFFIX}.dylib")
  377. set(LIBDEFNAME "${LIBNAME}.${LIBSUFFIX}.def")
  378. set(LIBEXPNAME "${LIBNAME}.${LIBSUFFIX}.exp")
  379. set(LIBZIPNAME "${LIBNAME}.${LIBSUFFIX}.zip")
  380. set(LIBS "${PROJECT_SOURCE_DIR}/${LIBNAME}")
  381. set(LIBS_P "${PROJECT_SOURCE_DIR}/${LIBNAME_P}")
  382. set(LIB_COMPONENTS BLAS)
  383. if (NOT NO_CBLAS)
  384. set(LIB_COMPONENTS "${LIB_COMPONENTS} CBLAS")
  385. endif ()
  386. if (NOT NO_LAPACK)
  387. set(LIB_COMPONENTS "${LIB_COMPONENTS} LAPACK")
  388. if (NOT NO_LAPACKE)
  389. set(LIB_COMPONENTS "${LIB_COMPONENTS} LAPACKE")
  390. endif ()
  391. if (BUILD_RELAPACK)
  392. set(LIB_COMPONENTS "${LIB_COMPONENTS} ReLAPACK")
  393. endif ()
  394. endif ()
  395. if (ONLY_CBLAS)
  396. set(LIB_COMPONENTS CBLAS)
  397. endif ()
  398. # For GEMM3M
  399. set(USE_GEMM3M 0)
  400. if (DEFINED ARCH)
  401. if (X86 OR X86_64 OR ${ARCH} STREQUAL "ia64" OR MIPS64)
  402. set(USE_GEMM3M 1)
  403. endif ()
  404. if (${CORE} STREQUAL "generic")
  405. set(USE_GEMM3M 0)
  406. endif ()
  407. endif ()
  408. #export OSNAME
  409. #export ARCH
  410. #export CORE
  411. #export LIBCORE
  412. #export PGCPATH
  413. #export CONFIG
  414. #export CC
  415. #export FC
  416. #export BU
  417. #export FU
  418. #export NEED2UNDERSCORES
  419. #export USE_THREAD
  420. #export NUM_THREADS
  421. #export NUM_CORES
  422. #export SMP
  423. #export MAKEFILE_RULE
  424. #export NEED_PIC
  425. #export BINARY
  426. #export BINARY32
  427. #export BINARY64
  428. #export F_COMPILER
  429. #export C_COMPILER
  430. #export USE_OPENMP
  431. #export CROSS
  432. #export CROSS_SUFFIX
  433. #export NOFORTRAN
  434. #export NO_FBLAS
  435. #export EXTRALIB
  436. #export CEXTRALIB
  437. #export FEXTRALIB
  438. #export HAVE_SSE
  439. #export HAVE_SSE2
  440. #export HAVE_SSE3
  441. #export HAVE_SSSE3
  442. #export HAVE_SSE4_1
  443. #export HAVE_SSE4_2
  444. #export HAVE_SSE4A
  445. #export HAVE_SSE5
  446. #export HAVE_AVX
  447. #export HAVE_VFP
  448. #export HAVE_VFPV3
  449. #export HAVE_VFPV4
  450. #export HAVE_NEON
  451. #export KERNELDIR
  452. #export FUNCTION_PROFILE
  453. #export TARGET_CORE
  454. #
  455. #export SHGEMM_UNROLL_M
  456. #export SHGEMM_UNROLL_N
  457. #export SGEMM_UNROLL_M
  458. #export SGEMM_UNROLL_N
  459. #export DGEMM_UNROLL_M
  460. #export DGEMM_UNROLL_N
  461. #export QGEMM_UNROLL_M
  462. #export QGEMM_UNROLL_N
  463. #export CGEMM_UNROLL_M
  464. #export CGEMM_UNROLL_N
  465. #export ZGEMM_UNROLL_M
  466. #export ZGEMM_UNROLL_N
  467. #export XGEMM_UNROLL_M
  468. #export XGEMM_UNROLL_N
  469. #export CGEMM3M_UNROLL_M
  470. #export CGEMM3M_UNROLL_N
  471. #export ZGEMM3M_UNROLL_M
  472. #export ZGEMM3M_UNROLL_N
  473. #export XGEMM3M_UNROLL_M
  474. #export XGEMM3M_UNROLL_N
  475. #if (USE_CUDA)
  476. # export CUDADIR
  477. # export CUCC
  478. # export CUFLAGS
  479. # export CULIB
  480. #endif