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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. ##
  2. ## Author: Hank Anderson <hank@statease.com>
  3. ## Description: Ported from OpenBLAS/Makefile.system
  4. ##
  5. set(NETLIB_LAPACK_DIR "${CMAKE_SOURCE_DIR}/lapack-netlib")
  6. # TODO: Makefile.system detects Darwin (mac) and switches to clang here -hpa
  7. # http://stackoverflow.com/questions/714100/os-detecting-makefile
  8. # TODO: Makefile.system sets HOSTCC = $(CC) here if not already set -hpa
  9. # TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
  10. if (DEFINED TARGET_CORE)
  11. set(TARGET ${TARGET_CORE})
  12. endif ()
  13. # Force fallbacks for 32bit
  14. if (DEFINED BINARY AND DEFINED TARGET AND BINARY EQUAL 32)
  15. message(STATUS "Compiling a ${BINARY}-bit binary.")
  16. set(NO_AVX 1)
  17. if (${TARGET} STREQUAL "HASWELL" OR ${TARGET} STREQUAL "SANDYBRIDGE")
  18. set(TARGET "NEHALEM")
  19. endif ()
  20. if (${TARGET} STREQUAL "BULLDOZER" OR ${TARGET} STREQUAL "PILEDRIVER")
  21. set(TARGET "BARCELONA")
  22. endif ()
  23. endif ()
  24. if (DEFINED TARGET)
  25. message(STATUS "Targetting the ${TARGET} architecture.")
  26. set(GETARCH_FLAGS "-DFORCE_${TARGET}")
  27. endif ()
  28. if (${INTERFACE64})
  29. message(STATUS "Using 64-bit integers.")
  30. set(GETARCH_FLAGS "${GETARCH_FLAGS} -DUSE64BITINT")
  31. endif ()
  32. if (NOT DEFINED GEMM_MULTITHREAD_THRESHOLD)
  33. set(GEMM_MULTITHREAD_THRESHOLD 4)
  34. endif ()
  35. message(STATUS "GEMM multithread threshold set to ${GEMM_MULTITHREAD_THRESHOLD}.")
  36. set(GETARCH_FLAGS "${GETARCH_FLAGS} -DGEMM_MULTITHREAD_THRESHOLD=${GEMM_MULTITHREAD_THRESHOLD}")
  37. if (${NO_AVX})
  38. message(STATUS "Disabling Advanced Vector Extensions (AVX).")
  39. set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_AVX")
  40. endif ()
  41. if (${NO_AVX2})
  42. message(STATUS "Disabling Advanced Vector Extensions 2 (AVX2).")
  43. set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_AVX2")
  44. endif ()
  45. if (CMAKE_BUILD_TYPE STREQUAL Debug)
  46. set(GETARCH_FLAGS "${GETARCH_FLAGS} -g")
  47. endif ()
  48. # TODO: let CMake handle this? -hpa
  49. #if (${QUIET_MAKE})
  50. # set(MAKE "${MAKE} -s")
  51. #endif()
  52. if (NOT DEFINED NO_PARALLEL_MAKE)
  53. set(NO_PARALLEL_MAKE 0)
  54. endif ()
  55. set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_PARALLEL_MAKE=${NO_PARALLEL_MAKE}")
  56. if (CMAKE_CXX_COMPILER STREQUAL loongcc)
  57. set(GETARCH_FLAGS "${GETARCH_FLAGS} -static")
  58. endif ()
  59. #if don't use Fortran, it will only compile CBLAS.
  60. if (ONLY_CBLAS)
  61. set(NO_LAPACK 1)
  62. else ()
  63. set(ONLY_CBLAS 0)
  64. endif ()
  65. include("${CMAKE_SOURCE_DIR}/cmake/prebuild.cmake")
  66. if (NOT DEFINED NUM_THREADS)
  67. set(NUM_THREADS ${NUM_CORES})
  68. endif ()
  69. if (${NUM_THREADS} EQUAL 1)
  70. set(USE_THREAD 0)
  71. endif ()
  72. if (DEFINED USE_THREAD)
  73. if (NOT ${USE_THREAD})
  74. unset(SMP)
  75. else ()
  76. set(SMP 1)
  77. endif ()
  78. else ()
  79. # N.B. this is NUM_THREAD in Makefile.system which is probably a bug -hpa
  80. if (${NUM_THREADS} EQUAL 1)
  81. unset(SMP)
  82. else ()
  83. set(SMP 1)
  84. endif ()
  85. endif ()
  86. if (${SMP})
  87. message(STATUS "SMP enabled.")
  88. endif ()
  89. if (NOT DEFINED NEED_PIC)
  90. set(NEED_PIC 1)
  91. endif ()
  92. # TODO: I think CMake should be handling all this stuff -hpa
  93. unset(ARFLAGS)
  94. set(CPP "${COMPILER} -E")
  95. set(AR "${CROSS_SUFFIX}ar")
  96. set(AS "${CROSS_SUFFIX}as")
  97. set(LD "${CROSS_SUFFIX}ld")
  98. set(RANLIB "${CROSS_SUFFIX}ranlib")
  99. set(NM "${CROSS_SUFFIX}nm")
  100. set(DLLWRAP "${CROSS_SUFFIX}dllwrap")
  101. set(OBJCOPY "${CROSS_SUFFIX}objcopy")
  102. set(OBJCONV "${CROSS_SUFFIX}objconv")
  103. # OS dependent settings
  104. include("${CMAKE_SOURCE_DIR}/cmake/os.cmake")
  105. # Architecture dependent settings
  106. include("${CMAKE_SOURCE_DIR}/cmake/arch.cmake")
  107. # C Compiler dependent settings
  108. include("${CMAKE_SOURCE_DIR}/cmake/cc.cmake")
  109. # Fortran Compiler dependent settings
  110. include("${CMAKE_SOURCE_DIR}/cmake/fc.cmake")
  111. if (BINARY64)
  112. if (INTERFACE64)
  113. # CCOMMON_OPT += -DUSE64BITINT
  114. endif ()
  115. endif ()
  116. if (NEED_PIC)
  117. if (${CMAKE_C_COMPILER} STREQUAL "IBM")
  118. set(CCOMMON_OPT "${CCOMMON_OPT} -qpic=large")
  119. else ()
  120. set(CCOMMON_OPT "${CCOMMON_OPT} -fPIC")
  121. endif ()
  122. if (${F_COMPILER} STREQUAL "SUN")
  123. set(FCOMMON_OPT "${FCOMMON_OPT} -pic")
  124. else ()
  125. set(FCOMMON_OPT "${FCOMMON_OPT} -fPIC")
  126. endif ()
  127. endif ()
  128. if (DYNAMIC_ARCH)
  129. set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_ARCH")
  130. endif ()
  131. if (NO_LAPACK)
  132. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_LAPACK")
  133. #Disable LAPACK C interface
  134. set(NO_LAPACKE 1)
  135. endif ()
  136. if (NO_LAPACKE)
  137. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_LAPACKE")
  138. endif ()
  139. if (NO_AVX)
  140. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX")
  141. endif ()
  142. if (${ARCH} STREQUAL "x86")
  143. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX")
  144. endif ()
  145. if (NO_AVX2)
  146. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX2")
  147. endif ()
  148. if (SMP)
  149. set(CCOMMON_OPT "${CCOMMON_OPT} -DSMP_SERVER")
  150. if (${ARCH} STREQUAL "mips64")
  151. if (NOT ${CORE} STREQUAL "LOONGSON3B")
  152. set(USE_SIMPLE_THREADED_LEVEL3 1)
  153. endif ()
  154. endif ()
  155. if (USE_OPENMP)
  156. # USE_SIMPLE_THREADED_LEVEL3 = 1
  157. # NO_AFFINITY = 1
  158. set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_OPENMP")
  159. endif ()
  160. if (BIGNUMA)
  161. set(CCOMMON_OPT "${CCOMMON_OPT} -DBIGNUMA")
  162. endif ()
  163. endif ()
  164. if (NO_WARMUP)
  165. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_WARMUP")
  166. endif ()
  167. if (CONSISTENT_FPCSR)
  168. set(CCOMMON_OPT "${CCOMMON_OPT} -DCONSISTENT_FPCSR")
  169. endif ()
  170. # Only for development
  171. # set(CCOMMON_OPT "${CCOMMON_OPT} -DPARAMTEST")
  172. # set(CCOMMON_OPT "${CCOMMON_OPT} -DPREFETCHTEST")
  173. # set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_SWITCHING")
  174. # set(USE_PAPI 1)
  175. if (USE_PAPI)
  176. set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_PAPI")
  177. set(EXTRALIB "${EXTRALIB} -lpapi -lperfctr")
  178. endif ()
  179. if (DYNAMIC_THREADS)
  180. set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_THREADS")
  181. endif ()
  182. set(CCOMMON_OPT "${CCOMMON_OPT} -DMAX_CPU_NUMBER=${NUM_THREADS}")
  183. if (USE_SIMPLE_THREADED_LEVEL3)
  184. set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_SIMPLE_THREADED_LEVEL3")
  185. endif ()
  186. if (DEFINED LIBNAMESUFFIX)
  187. set(LIBPREFIX "libopenblas_${LIBNAMESUFFIX}")
  188. else ()
  189. set(LIBPREFIX "libopenblas")
  190. endif ()
  191. if (NOT DEFINED SYMBOLPREFIX)
  192. set(SYMBOLPREFIX "")
  193. endif ()
  194. if (NOT DEFINED SYMBOLSUFFIX)
  195. set(SYMBOLSUFFIX "")
  196. endif ()
  197. set(KERNELDIR "${CMAKE_SOURCE_DIR}/kernel/${ARCH}")
  198. # TODO: nead to convert these Makefiles
  199. # include ${CMAKE_SOURCE_DIR}/cmake/${ARCH}.cmake
  200. # TODO: Need to figure out how to get $(*F) in cmake
  201. set(CCOMMON_OPT "${CCOMMON_OPT} -DASMNAME=${FU}$(*F) -DASMFNAME=${FU}$(*F)${BU} -DNAME=$(*F)${BU} -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)${BU}\" -DCHAR_CNAME=\"$(*F)\"")
  202. if (${CORE} STREQUAL "PPC440")
  203. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_QALLOC")
  204. endif ()
  205. if (${CORE} STREQUAL "PPC440FP2")
  206. set(STATIC_ALLOCATION 1)
  207. endif ()
  208. if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
  209. set(NO_AFFINITY 1)
  210. endif ()
  211. if (NOT ${ARCH} STREQUAL "x86_64" AND NOT ${ARCH} STREQUAL "x86" AND NOT ${CORE} STREQUAL "LOONGSON3B")
  212. set(NO_AFFINITY 1)
  213. endif ()
  214. if (NO_AFFINITY)
  215. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AFFINITY")
  216. endif ()
  217. if (FUNCTION_PROFILE)
  218. set(CCOMMON_OPT "${CCOMMON_OPT} -DFUNCTION_PROFILE")
  219. endif ()
  220. if (HUGETLB_ALLOCATION)
  221. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_HUGETLB")
  222. endif ()
  223. if (DEFINED HUGETLBFILE_ALLOCATION)
  224. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=${HUGETLBFILE_ALLOCATION})")
  225. endif ()
  226. if (STATIC_ALLOCATION)
  227. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_STATIC")
  228. endif ()
  229. if (DEVICEDRIVER_ALLOCATION)
  230. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"")
  231. endif ()
  232. if (MIXED_MEMORY_ALLOCATION)
  233. set(CCOMMON_OPT "${CCOMMON_OPT} -DMIXED_MEMORY_ALLOCATION")
  234. endif ()
  235. if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
  236. set(TAR gtar)
  237. set(PATCH gpatch)
  238. set(GREP ggrep)
  239. else ()
  240. set(TAR tar)
  241. set(PATCH patch)
  242. set(GREP grep)
  243. endif ()
  244. if (NOT DEFINED MD5SUM)
  245. set(MD5SUM md5sum)
  246. endif ()
  247. set(AWK awk)
  248. set(REVISION "-r${OpenBLAS_VERSION}")
  249. set(MAJOR_VERSION ${OpenBLAS_MAJOR_VERSION})
  250. if (DEBUG)
  251. set(COMMON_OPT "${COMMON_OPT} -g")
  252. endif ()
  253. if (NOT DEFINED COMMON_OPT)
  254. set(COMMON_OPT "-O2")
  255. endif ()
  256. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_OPT} ${CCOMMON_OPT}")
  257. # TODO: not sure what PFLAGS is -hpa
  258. set(PFLAGS "${PFLAGS} ${COMMON_OPT} ${CCOMMON_OPT} -I${TOPDIR} -DPROFILE ${COMMON_PROF}")
  259. set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${COMMON_OPT} ${FCOMMON_OPT}")
  260. # TODO: not sure what FPFLAGS is -hpa
  261. set(FPFLAGS "${FPFLAGS} ${COMMON_OPT} ${FCOMMON_OPT} ${COMMON_PROF}")
  262. #For LAPACK Fortran codes.
  263. set(LAPACK_FFLAGS "${LAPACK_FFLAGS} ${CMAKE_Fortran_FLAGS}")
  264. set(LAPACK_FPFLAGS "${LAPACK_FPFLAGS} ${FPFLAGS}")
  265. #Disable -fopenmp for LAPACK Fortran codes on Windows.
  266. if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  267. message(STATUS "FFLAGS: ${LAPACK_FFLAGS}")
  268. set(FILTER_FLAGS "-fopenmp;-mp;-openmp;-xopenmp=parralel")
  269. foreach (FILTER_FLAG ${FILTER_FLAGS})
  270. string(REPLACE ${FILTER_FLAG} "" LAPACK_FFLAGS ${LAPACK_FFLAGS})
  271. string(REPLACE ${FILTER_FLAG} "" LAPACK_FPFLAGS ${LAPACK_FPFLAGS})
  272. endforeach ()
  273. endif ()
  274. set(LAPACK_CFLAGS "${CMAKE_C_CFLAGS} -DHAVE_LAPACK_CONFIG_H")
  275. if (INTERFACE64)
  276. set(LAPACK_CFLAGS "${LAPACK_CFLAGS} -DLAPACK_ILP64")
  277. endif ()
  278. if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  279. set(LAPACK_CFLAGS "${LAPACK_CFLAGS} -DOPENBLAS_OS_WINDOWS")
  280. endif ()
  281. if (${CMAKE_C_COMPILER} STREQUAL "LSB")
  282. set(LAPACK_CFLAGS "${LAPACK_CFLAGS} -DLAPACK_COMPLEX_STRUCTURE")
  283. endif ()