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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  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. # TODO: NUM_CORES comes from `getarch.c` or `cpuid_x86.c`. This is built and executed above in `Makefile.prebuild`, and the results are in `Makefile.conf` and `Makefile_kernel.conf`. -hpa
  68. set(NUM_THREADS ${NUM_CORES})
  69. endif ()
  70. if (${NUM_THREADS} EQUAL 1)
  71. # TODO: was "override USE_THREAD = 0", do we need "override" here? -hpa
  72. set(USE_THREAD 0)
  73. endif ()
  74. if (DEFINED USE_THREAD)
  75. if (NOT ${USE_THREAD})
  76. unset(SMP)
  77. else ()
  78. set(SMP 1)
  79. endif ()
  80. else ()
  81. # N.B. this is NUM_THREAD in Makefile.system which is probably a bug -hpa
  82. if (${NUM_THREADS} EQUAL 1)
  83. unset(SMP)
  84. else ()
  85. set(SMP 1)
  86. endif ()
  87. endif ()
  88. if (${SMP})
  89. message(STATUS "SMP enabled.")
  90. endif ()
  91. if (NOT DEFINED NEED_PIC)
  92. set(NEED_PIC 1)
  93. endif ()
  94. # TODO: I think CMake should be handling all this stuff -hpa
  95. unset(ARFLAGS)
  96. set(CPP "${COMPILER} -E")
  97. set(AR "${CROSS_SUFFIX}ar")
  98. set(AS "${CROSS_SUFFIX}as")
  99. set(LD "${CROSS_SUFFIX}ld")
  100. set(RANLIB "${CROSS_SUFFIX}ranlib")
  101. set(NM "${CROSS_SUFFIX}nm")
  102. set(DLLWRAP "${CROSS_SUFFIX}dllwrap")
  103. set(OBJCOPY "${CROSS_SUFFIX}objcopy")
  104. set(OBJCONV "${CROSS_SUFFIX}objconv")
  105. # OS dependent settings
  106. include("${CMAKE_SOURCE_DIR}/cmake/os.cmake")
  107. # Architecture dependent settings
  108. include("${CMAKE_SOURCE_DIR}/cmake/arch.cmake")
  109. # C Compiler dependent settings
  110. include("${CMAKE_SOURCE_DIR}/cmake/cc.cmake")
  111. # Fortran Compiler dependent settings
  112. include("${CMAKE_SOURCE_DIR}/cmake/fc.cmake")
  113. if (BINARY64)
  114. if (INTERFACE64)
  115. # CCOMMON_OPT += -DUSE64BITINT
  116. endif ()
  117. endif ()
  118. if (NEED_PIC)
  119. if (${CMAKE_C_COMPILER} STREQUAL "IBM")
  120. set(CCOMMON_OPT "${CCOMMON_OPT} -qpic=large")
  121. else ()
  122. set(CCOMMON_OPT "${CCOMMON_OPT} -fPIC")
  123. endif ()
  124. if (${CMAKE_Fortran_COMPILER} STREQUAL "SUN")
  125. set(FCOMMON_OPT "${FCOMMON_OPT} -pic")
  126. else ()
  127. set(FCOMMON_OPT "${FCOMMON_OPT} -fPIC")
  128. endif ()
  129. endif ()
  130. if (DYNAMIC_ARCH)
  131. set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_ARCH")
  132. endif ()
  133. if (NO_LAPACK)
  134. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_LAPACK")
  135. #Disable LAPACK C interface
  136. set(NO_LAPACKE 1)
  137. endif ()
  138. if (NO_LAPACKE)
  139. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_LAPACKE")
  140. endif ()
  141. if (NO_AVX)
  142. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX")
  143. endif ()
  144. if (${ARCH} STREQUAL "x86")
  145. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX")
  146. endif ()
  147. if (NO_AVX2)
  148. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX2")
  149. endif ()
  150. if (SMP)
  151. set(CCOMMON_OPT "${CCOMMON_OPT} -DSMP_SERVER")
  152. if (${ARCH} STREQUAL "mips64")
  153. if (NOT ${CORE} STREQUAL "LOONGSON3B")
  154. set(USE_SIMPLE_THREADED_LEVEL3 1)
  155. endif ()
  156. endif ()
  157. if (USE_OPENMP)
  158. # USE_SIMPLE_THREADED_LEVEL3 = 1
  159. # NO_AFFINITY = 1
  160. set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_OPENMP")
  161. endif ()
  162. if (BIGNUMA)
  163. set(CCOMMON_OPT "${CCOMMON_OPT} -DBIGNUMA")
  164. endif ()
  165. endif ()
  166. if (NO_WARMUP)
  167. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_WARMUP")
  168. endif ()
  169. if (CONSISTENT_FPCSR)
  170. set(CCOMMON_OPT "${CCOMMON_OPT} -DCONSISTENT_FPCSR")
  171. endif ()
  172. # Only for development
  173. # set(CCOMMON_OPT "${CCOMMON_OPT} -DPARAMTEST")
  174. # set(CCOMMON_OPT "${CCOMMON_OPT} -DPREFETCHTEST")
  175. # set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_SWITCHING")
  176. # set(USE_PAPI 1)
  177. if (USE_PAPI)
  178. set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_PAPI")
  179. set(EXTRALIB "${EXTRALIB} -lpapi -lperfctr")
  180. endif ()
  181. if (DYNAMIC_THREADS)
  182. set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_THREADS")
  183. endif ()
  184. set(CCOMMON_OPT "${CCOMMON_OPT} -DMAX_CPU_NUMBER=${NUM_THREADS}")
  185. if (USE_SIMPLE_THREADED_LEVEL3)
  186. set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_SIMPLE_THREADED_LEVEL3")
  187. endif ()
  188. if (DEFINED LIBNAMESUFFIX)
  189. set(LIBPREFIX "libopenblas_${LIBNAMESUFFIX}")
  190. else ()
  191. set(LIBPREFIX "libopenblas")
  192. endif ()
  193. if (NOT DEFINED SYMBOLPREFIX)
  194. set(SYMBOLPREFIX "")
  195. endif ()
  196. if (NOT DEFINED SYMBOLSUFFIX)
  197. set(SYMBOLSUFFIX "")
  198. endif ()
  199. set(KERNELDIR "${CMAKE_SOURCE_DIR}/kernel/${ARCH}")
  200. # TODO: nead to convert these Makefiles
  201. # include ${CMAKE_SOURCE_DIR}/cmake/${ARCH}.cmake
  202. # TODO: Need to figure out how to get $(*F) in cmake
  203. set(CCOMMON_OPT "${CCOMMON_OPT} -DASMNAME=${FU}$(*F) -DASMFNAME=${FU}$(*F)${BU} -DNAME=$(*F)${BU} -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)${BU}\" -DCHAR_CNAME=\"$(*F)\"")
  204. if (${CORE} STREQUAL "PPC440")
  205. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_QALLOC")
  206. endif ()
  207. if (${CORE} STREQUAL "PPC440FP2")
  208. set(STATIC_ALLOCATION 1)
  209. endif ()
  210. if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
  211. set(NO_AFFINITY 1)
  212. endif ()
  213. if (NOT ${ARCH} STREQUAL "x86_64" AND NOT ${ARCH} STREQUAL "x86" AND NOT ${CORE} STREQUAL "LOONGSON3B")
  214. set(NO_AFFINITY 1)
  215. endif ()
  216. if (NO_AFFINITY)
  217. set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AFFINITY")
  218. endif ()
  219. if (FUNCTION_PROFILE)
  220. set(CCOMMON_OPT "${CCOMMON_OPT} -DFUNCTION_PROFILE")
  221. endif ()
  222. if (HUGETLB_ALLOCATION)
  223. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_HUGETLB")
  224. endif ()
  225. if (DEFINED HUGETLBFILE_ALLOCATION)
  226. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=${HUGETLBFILE_ALLOCATION})")
  227. endif ()
  228. if (STATIC_ALLOCATION)
  229. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_STATIC")
  230. endif ()
  231. if (DEVICEDRIVER_ALLOCATION)
  232. set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"")
  233. endif ()
  234. if (MIXED_MEMORY_ALLOCATION)
  235. set(CCOMMON_OPT "${CCOMMON_OPT} -DMIXED_MEMORY_ALLOCATION")
  236. endif ()
  237. if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
  238. set(TAR gtar)
  239. set(PATCH gpatch)
  240. set(GREP ggrep)
  241. else ()
  242. set(TAR tar)
  243. set(PATCH patch)
  244. set(GREP grep)
  245. endif ()
  246. if (NOT DEFINED MD5SUM)
  247. set(MD5SUM md5sum)
  248. endif ()
  249. set(AWK awk)
  250. set(REVISION "-r${OpenBLAS_VERSION}")
  251. set(MAJOR_VERSION ${OpenBLAS_MAJOR_VERSION})
  252. if (DEBUG)
  253. set(COMMON_OPT "${COMMON_OPT} -g")
  254. endif ()
  255. if (NOT DEFINED COMMON_OPT)
  256. set(COMMON_OPT "-O2")
  257. endif ()