1## 2## Author: Hank Anderson <hank@statease.com> 3## Description: Ported from OpenBLAS/Makefile.system 4## 5set(NETLIB_LAPACK_DIR "${PROJECT_SOURCE_DIR}/lapack-netlib") 6 7# System detection, via CMake. 8include("${PROJECT_SOURCE_DIR}/cmake/system_check.cmake") 9 10if(CMAKE_CROSSCOMPILING AND NOT DEFINED TARGET) 11 # Detect target without running getarch 12 if (ARM64) 13 set(TARGET "ARMV8") 14 elseif(ARM) 15 set(TARGET "ARMV7") # TODO: Ask compiler which arch this is 16 else() 17 message(FATAL_ERROR "When cross compiling, a TARGET is required.") 18 endif() 19endif() 20 21# Other files expect CORE, which is actually TARGET and will become TARGET_CORE for kernel build. Confused yet? 22# It seems we are meant to use TARGET as input and CORE internally as kernel. 23if(NOT DEFINED CORE AND DEFINED TARGET) 24 set(CORE ${TARGET}) 25endif() 26 27# TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1. 28if (DEFINED TARGET_CORE) 29 set(TARGET ${TARGET_CORE}) 30endif () 31 32# Force fallbacks for 32bit 33if (DEFINED BINARY AND DEFINED TARGET AND BINARY EQUAL 32) 34 message(STATUS "Compiling a ${BINARY}-bit binary.") 35 set(NO_AVX 1) 36 if (${TARGET} STREQUAL "HASWELL" OR ${TARGET} STREQUAL "SANDYBRIDGE" OR ${TARGET} STREQUAL "SKYLAKEX" OR ${TARGET} STREQUAL "COOPERLAKE") 37 set(TARGET "NEHALEM") 38 endif () 39 if (${TARGET} STREQUAL "BULLDOZER" OR ${TARGET} STREQUAL "PILEDRIVER" OR ${TARGET} STREQUAL "ZEN") 40 set(TARGET "BARCELONA") 41 endif () 42 if (${TARGET} STREQUAL "ARMV8" OR ${TARGET} STREQUAL "CORTEXA57" OR ${TARGET} STREQUAL "CORTEXA53" OR ${TARGET} STREQUAL "CORTEXA55") 43 set(TARGET "ARMV7") 44 endif () 45endif () 46 47 48if (DEFINED TARGET) 49 message(STATUS "-- -- -- -- -- -- -- -- -- -- -- -- --") 50 message(STATUS "Targeting the ${TARGET} architecture.") 51 set(GETARCH_FLAGS "-DFORCE_${TARGET}") 52endif () 53 54# On x86_64 build getarch with march=native. This is required to detect AVX512 support in getarch. 55if (X86_64 AND NOT ${CMAKE_C_COMPILER_ID} STREQUAL "PGI") 56 set(GETARCH_FLAGS "${GETARCH_FLAGS} -march=native") 57endif () 58 59# On x86 no AVX support is available 60if (X86 OR X86_64) 61if ((DEFINED BINARY AND BINARY EQUAL 32) OR ("$CMAKE_SIZEOF_VOID_P}" EQUAL "4")) 62 set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_AVX -DNO_AVX2 -DNO_AVX512") 63endif () 64endif () 65 66if (INTERFACE64) 67 message(STATUS "Using 64-bit integers.") 68 set(GETARCH_FLAGS "${GETARCH_FLAGS} -DUSE64BITINT") 69endif () 70 71if (NOT DEFINED GEMM_MULTITHREAD_THRESHOLD) 72 set(GEMM_MULTITHREAD_THRESHOLD 4) 73endif () 74message(STATUS "GEMM multithread threshold set to ${GEMM_MULTITHREAD_THRESHOLD}.") 75set(GETARCH_FLAGS "${GETARCH_FLAGS} -DGEMM_MULTITHREAD_THRESHOLD=${GEMM_MULTITHREAD_THRESHOLD}") 76 77if (NO_AVX) 78 message(STATUS "Disabling Advanced Vector Extensions (AVX).") 79 set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_AVX") 80endif () 81 82if (NO_AVX2) 83 message(STATUS "Disabling Advanced Vector Extensions 2 (AVX2).") 84 set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_AVX2") 85endif () 86 87if (NO_AVX512) 88 message(STATUS "Disabling Advanced Vector Extensions 512 (AVX512).") 89 set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_AVX512") 90endif () 91 92if (CMAKE_BUILD_TYPE STREQUAL "Debug") 93 set(GETARCH_FLAGS "${GETARCH_FLAGS} ${CMAKE_C_FLAGS_DEBUG}") 94endif () 95 96if (NOT DEFINED NO_PARALLEL_MAKE) 97 set(NO_PARALLEL_MAKE 0) 98endif () 99set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_PARALLEL_MAKE=${NO_PARALLEL_MAKE}") 100 101if (CMAKE_C_COMPILER STREQUAL loongcc) 102 set(GETARCH_FLAGS "${GETARCH_FLAGS} -static") 103endif () 104 105#if don't use Fortran, it will only compile CBLAS. 106if (ONLY_CBLAS) 107 set(NO_LAPACK 1) 108else () 109 set(ONLY_CBLAS 0) 110endif () 111 112# N.B. this is NUM_THREAD in Makefile.system which is probably a bug -hpa 113if (NOT CMAKE_CROSSCOMPILING) 114 if (NOT DEFINED NUM_CORES) 115 include(ProcessorCount) 116 ProcessorCount(NUM_CORES) 117 endif() 118 119endif() 120 121if (NOT DEFINED NUM_PARALLEL) 122 set(NUM_PARALLEL 1) 123endif() 124 125if (NOT DEFINED NUM_THREADS) 126 if (DEFINED NUM_CORES AND NOT NUM_CORES EQUAL 0) 127 # HT? 128 set(NUM_THREADS ${NUM_CORES}) 129 else () 130 set(NUM_THREADS 0) 131 endif () 132endif() 133 134if (${NUM_THREADS} LESS 2) 135 set(USE_THREAD 0) 136elseif(NOT DEFINED USE_THREAD) 137 set(USE_THREAD 1) 138endif () 139 140if (USE_THREAD) 141 message(STATUS "Multi-threading enabled with ${NUM_THREADS} threads.") 142else() 143 if (${USE_LOCKING}) 144 set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_LOCKING") 145 endif () 146endif () 147 148include("${PROJECT_SOURCE_DIR}/cmake/prebuild.cmake") 149if (DEFINED TARGET) 150 if (${TARGET} STREQUAL COOPERLAKE AND NOT NO_AVX512) 151 if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU") 152 execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) 153 if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER 10.09) 154 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=cooperlake") 155 else() 156 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512") 157 endif() 158 elseif (${CMAKE_C_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_C_COMPILER_ID} STREQUAL "AppleClang") 159 if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER 8.99) 160 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=cooperlake") 161 else() 162 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512") 163 endif() 164 endif() 165 endif() 166 if (${TARGET} STREQUAL SKYLAKEX AND NOT NO_AVX512) 167 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512") 168 endif() 169 if (${TARGET} STREQUAL HASWELL AND NOT NO_AVX2) 170 if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU") 171 execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) 172 if (${GCC_VERSION} VERSION_GREATER 4.7 OR ${GCC_VERSION} VERSION_EQUAL 4.7) 173 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mavx2") 174 endif() 175 elseif (${CMAKE_C_COMPILER_ID} STREQUAL "CLANG") 176 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mavx2") 177 endif() 178 endif() 179 if (DEFINED HAVE_AVX) 180 if (NOT NO_AVX) 181 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mavx") 182 endif() 183 endif() 184 if (DEFINED HAVE_AVX2) 185 if (NOT NO_AVX2) 186 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mavx2") 187 endif() 188 endif() 189 # if (DEFINED HAVE_FMA3) 190 # if (NOT NO_AVX2) 191 # set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mfma") 192 # endif() 193 # endif() 194 if (DEFINED HAVE_SSE) 195 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -msse") 196 endif() 197 if (DEFINED HAVE_SSE2) 198 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -msse2") 199 endif() 200 if (DEFINED HAVE_SSE3) 201 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -msse3") 202 endif() 203 if (DEFINED HAVE_SSSE3) 204 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mssse3") 205 endif() 206 if (DEFINED HAVE_SSE4_1) 207 set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -msse4.1") 208 endif() 209endif() 210if (DEFINED BINARY) 211 message(STATUS "Compiling a ${BINARY}-bit binary.") 212endif () 213if (NOT DEFINED NEED_PIC) 214 set(NEED_PIC 1) 215endif () 216 217# OS dependent settings 218include("${PROJECT_SOURCE_DIR}/cmake/os.cmake") 219 220# Architecture dependent settings 221include("${PROJECT_SOURCE_DIR}/cmake/arch.cmake") 222 223# C Compiler dependent settings 224include("${PROJECT_SOURCE_DIR}/cmake/cc.cmake") 225 226if (NOT NOFORTRAN) 227 # Fortran Compiler dependent settings 228 include("${PROJECT_SOURCE_DIR}/cmake/fc.cmake") 229else () 230set(NO_LAPACK 1) 231set(NO_LAPACKE 1) 232endif () 233 234if (BINARY64) 235 if (INTERFACE64) 236 # CCOMMON_OPT += -DUSE64BITINT 237 endif () 238endif () 239 240if(EMBEDDED) 241 set(CCOMMON_OPT "${CCOMMON_OPT} -DOS_EMBEDDED") 242 set(CCOMMON_OPT "${CCOMMON_OPT} -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16") 243endif() 244 245if (NEED_PIC) 246 if (${CMAKE_C_COMPILER} STREQUAL "IBM") 247 set(CCOMMON_OPT "${CCOMMON_OPT} -qpic=large") 248 else () 249 set(CCOMMON_OPT "${CCOMMON_OPT} -fPIC") 250 endif () 251 252 if (NOT NOFORTRAN) 253 if (${F_COMPILER} STREQUAL "SUN") 254 set(FCOMMON_OPT "${FCOMMON_OPT} -pic") 255 else () 256 set(FCOMMON_OPT "${FCOMMON_OPT} -fPIC") 257 endif () 258 endif() 259endif () 260 261if (X86_64) 262 set(SMALL_MATRIX_OPT TRUE) 263endif () 264if (SMALL_MATRIX_OPT) 265 set(CCOMMON_OPT "${CCOMMON_OPT} -DSMALL_MATRIX_OPT") 266endif () 267 268if (DYNAMIC_ARCH) 269 if (X86 OR X86_64 OR ARM64 OR PPC) 270 set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_ARCH") 271 if (DYNAMIC_OLDER) 272 set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_OLDER") 273 endif () 274 else () 275 unset (DYNAMIC_ARCH) 276 message (STATUS "DYNAMIC_ARCH is not supported on the target architecture, removing") 277 endif () 278endif () 279 280if (DYNAMIC_LIST) 281 set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_LIST") 282 foreach(DCORE ${DYNAMIC_LIST}) 283 set(CCOMMON_OPT "${CCOMMON_OPT} -DDYN_${DCORE}") 284 endforeach () 285endif () 286 287if (NO_LAPACK) 288 set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_LAPACK") 289 #Disable LAPACK C interface 290 set(NO_LAPACKE 1) 291endif () 292 293if (NO_LAPACKE) 294 set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_LAPACKE") 295endif () 296 297if (NO_AVX) 298 set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX") 299endif () 300 301if (X86) 302 set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX") 303endif () 304 305if (NO_AVX2) 306 set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX2") 307endif () 308 309if (NO_AVX512) 310 set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX512") 311endif () 312 313if (USE_THREAD) 314 # USE_SIMPLE_THREADED_LEVEL3 = 1 315 # NO_AFFINITY = 1 316 set(CCOMMON_OPT "${CCOMMON_OPT} -DSMP_SERVER") 317 318 if (MIPS64) 319 if (NOT ${CORE} STREQUAL "LOONGSON3B") 320 set(USE_SIMPLE_THREADED_LEVEL3 1) 321 endif () 322 endif () 323 324 if (BIGNUMA) 325 set(CCOMMON_OPT "${CCOMMON_OPT} -DBIGNUMA") 326 endif () 327endif () 328 329if (NO_WARMUP) 330 set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_WARMUP") 331endif () 332 333if (CONSISTENT_FPCSR) 334 set(CCOMMON_OPT "${CCOMMON_OPT} -DCONSISTENT_FPCSR") 335endif () 336 337if (USE_TLS) 338 set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_TLS") 339endif () 340 341# Only for development 342# set(CCOMMON_OPT "${CCOMMON_OPT} -DPARAMTEST") 343# set(CCOMMON_OPT "${CCOMMON_OPT} -DPREFETCHTEST") 344# set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_SWITCHING") 345# set(USE_PAPI 1) 346 347if (USE_PAPI) 348 set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_PAPI") 349 set(EXTRALIB "${EXTRALIB} -lpapi -lperfctr") 350endif () 351 352if (DYNAMIC_THREADS) 353 set(CCOMMON_OPT "${CCOMMON_OPT} -DDYNAMIC_THREADS") 354endif () 355 356set(CCOMMON_OPT "${CCOMMON_OPT} -DMAX_CPU_NUMBER=${NUM_THREADS}") 357 358set(CCOMMON_OPT "${CCOMMON_OPT} -DMAX_PARALLEL_NUMBER=${NUM_PARALLEL}") 359 360if (BUFFERSIZE) 361set(CCOMMON_OPT "${CCOMMON_OPT} -DBUFFERSIZE=${BUFFERSIZE}") 362endif () 363 364if (USE_SIMPLE_THREADED_LEVEL3) 365 set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_SIMPLE_THREADED_LEVEL3") 366endif () 367 368if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") 369if (DEFINED MAX_STACK_ALLOC) 370if (NOT ${MAX_STACK_ALLOC} EQUAL 0) 371set(CCOMMON_OPT "${CCOMMON_OPT} -DMAX_STACK_ALLOC=${MAX_STACK_ALLOC}") 372endif () 373else () 374set(CCOMMON_OPT "${CCOMMON_OPT} -DMAX_STACK_ALLOC=2048") 375endif () 376endif () 377if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") 378if (DEFINED BLAS3_MEM_ALLOC_THRESHOLD) 379if (NOT ${BLAS3_MEM_ALLOC_THRESHOLD} EQUAL 32) 380set(CCOMMON_OPT "${CCOMMON_OPT} -DBLAS3_MEM_ALLOC_THRESHOLD=${BLAS3_MEM_ALLOC_THRESHOLD}") 381endif() 382endif() 383endif() 384if (DEFINED LIBNAMESUFFIX) 385 set(LIBPREFIX "libopenblas_${LIBNAMESUFFIX}") 386else () 387 set(LIBPREFIX "libopenblas") 388endif () 389 390if (NOT DEFINED SYMBOLPREFIX) 391 set(SYMBOLPREFIX "") 392endif () 393 394if (NOT DEFINED SYMBOLSUFFIX) 395 set(SYMBOLSUFFIX "") 396endif () 397 398set(KERNELDIR "${PROJECT_SOURCE_DIR}/kernel/${ARCH}") 399 400# TODO: need to convert these Makefiles 401# include ${PROJECT_SOURCE_DIR}/cmake/${ARCH}.cmake 402 403if (${CORE} STREQUAL "PPC440") 404 set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_QALLOC") 405endif () 406 407if (${CORE} STREQUAL "PPC440FP2") 408 set(STATIC_ALLOCATION 1) 409endif () 410 411if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Linux") 412 set(NO_AFFINITY 1) 413endif () 414 415if (NOT X86_64 AND NOT X86 AND NOT ${CORE} STREQUAL "LOONGSON3B") 416 set(NO_AFFINITY 1) 417endif () 418 419if (NO_AFFINITY) 420 set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AFFINITY") 421endif () 422 423if (FUNCTION_PROFILE) 424 set(CCOMMON_OPT "${CCOMMON_OPT} -DFUNCTION_PROFILE") 425endif () 426 427if (HUGETLB_ALLOCATION) 428 set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_HUGETLB") 429endif () 430 431if (DEFINED HUGETLBFILE_ALLOCATION) 432 set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=${HUGETLBFILE_ALLOCATION})") 433endif () 434 435if (STATIC_ALLOCATION) 436 set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_STATIC") 437endif () 438 439if (DEVICEDRIVER_ALLOCATION) 440 set(CCOMMON_OPT "${CCOMMON_OPT} -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"") 441endif () 442 443if (MIXED_MEMORY_ALLOCATION) 444 set(CCOMMON_OPT "${CCOMMON_OPT} -DMIXED_MEMORY_ALLOCATION") 445endif () 446 447set(CCOMMON_OPT "${CCOMMON_OPT} -DVERSION=\"\\\"${OpenBLAS_VERSION}\\\"\"") 448 449set(REVISION "-r${OpenBLAS_VERSION}") 450set(MAJOR_VERSION ${OpenBLAS_MAJOR_VERSION}) 451 452set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CCOMMON_OPT}") 453 454if (NOT BUILD_SINGLE AND NOT BUILD_DOUBLE AND NOT BUILD_COMPLEX AND NOT BUILD_COMPLEX16) 455 set (BUILD_SINGLE ON) 456 set (BUILD_DOUBLE ON) 457 set (BUILD_COMPLEX ON) 458 set (BUILD_COMPLEX16 ON) 459endif() 460if (BUILD_SINGLE) 461 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBUILD_SINGLE") 462endif() 463if (BUILD_DOUBLE) 464 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBUILD_DOUBLE") 465endif() 466if (BUILD_COMPLEX) 467 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBUILD_COMPLEX") 468endif() 469if (BUILD_COMPLEX16) 470 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBUILD_COMPLEX16") 471endif() 472if (BUILD_BFLOAT16) 473 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBUILD_BFLOAT16") 474endif() 475if(NOT MSVC) 476set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${CCOMMON_OPT}") 477endif() 478# TODO: not sure what PFLAGS is -hpa 479set(PFLAGS "${PFLAGS} ${CCOMMON_OPT} -I${TOPDIR} -DPROFILE ${COMMON_PROF}") 480 481set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${FCOMMON_OPT}") 482# TODO: not sure what FPFLAGS is -hpa 483set(FPFLAGS "${FPFLAGS} ${FCOMMON_OPT} ${COMMON_PROF}") 484 485#For LAPACK Fortran codes. 486set(LAPACK_FFLAGS "${LAPACK_FFLAGS} ${CMAKE_Fortran_FLAGS}") 487set(LAPACK_FPFLAGS "${LAPACK_FPFLAGS} ${FPFLAGS}") 488 489#Disable -fopenmp for LAPACK Fortran codes on Windows. 490if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") 491 set(FILTER_FLAGS "-fopenmp;-mp;-openmp;-xopenmp=parallel") 492 foreach (FILTER_FLAG ${FILTER_FLAGS}) 493 string(REPLACE ${FILTER_FLAG} "" LAPACK_FFLAGS ${LAPACK_FFLAGS}) 494 string(REPLACE ${FILTER_FLAG} "" LAPACK_FPFLAGS ${LAPACK_FPFLAGS}) 495 endforeach () 496endif () 497 498if ("${F_COMPILER}" STREQUAL "GFORTRAN") 499 # lapack-netlib is rife with uninitialized warnings -hpa 500 set(LAPACK_FFLAGS "${LAPACK_FFLAGS} -Wno-maybe-uninitialized") 501endif () 502 503set(LAPACK_CFLAGS "${CMAKE_C_CFLAGS} -DHAVE_LAPACK_CONFIG_H") 504if (INTERFACE64) 505 set(LAPACK_CFLAGS "${LAPACK_CFLAGS} -DLAPACK_ILP64") 506endif () 507 508if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") 509 set(LAPACK_CFLAGS "${LAPACK_CFLAGS} -DOPENBLAS_OS_WINDOWS") 510endif () 511 512if (${CMAKE_C_COMPILER} STREQUAL "LSB" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") 513 set(LAPACK_CFLAGS "${LAPACK_CFLAGS} -DLAPACK_COMPLEX_STRUCTURE") 514endif () 515 516if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release") 517if ("${F_COMPILER}" STREQUAL "FLANG") 518if (${CMAKE_Fortran_COMPILER_VERSION} VERSION_LESS_EQUAL 3) 519 set(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fno-unroll-loops") 520endif () 521endif () 522endif () 523 524if (NOT DEFINED SUFFIX) 525 set(SUFFIX o) 526endif () 527 528if (NOT DEFINED PSUFFIX) 529 set(PSUFFIX po) 530endif () 531 532if (NOT DEFINED LIBSUFFIX) 533 set(LIBSUFFIX a) 534endif () 535 536if (DYNAMIC_ARCH) 537 if (USE_THREAD) 538 set(LIBNAME "${LIBPREFIX}p${REVISION}.${LIBSUFFIX}") 539 set(LIBNAME_P "${LIBPREFIX}p${REVISION}_p.${LIBSUFFIX}") 540 else () 541 set(LIBNAME "${LIBPREFIX}${REVISION}.${LIBSUFFIX}") 542 set(LIBNAME_P "${LIBPREFIX}${REVISION}_p.${LIBSUFFIX}") 543 endif () 544else () 545 if (USE_THREAD) 546 set(LIBNAME "${LIBPREFIX}_${LIBCORE}p${REVISION}.${LIBSUFFIX}") 547 set(LIBNAME_P "${LIBPREFIX}_${LIBCORE}p${REVISION}_p.${LIBSUFFIX}") 548 else () 549 set(LIBNAME "${LIBPREFIX}_${LIBCORE}${REVISION}.${LIBSUFFIX}") 550 set(LIBNAME_P "${LIBPREFIX}_${LIBCORE}${REVISION}_p.${LIBSUFFIX}") 551 endif () 552endif () 553 554 555set(LIBDLLNAME "${LIBPREFIX}.dll") 556set(LIBSONAME "${LIBNAME}.${LIBSUFFIX}.so") 557set(LIBDYNNAME "${LIBNAME}.${LIBSUFFIX}.dylib") 558set(LIBDEFNAME "${LIBNAME}.${LIBSUFFIX}.def") 559set(LIBEXPNAME "${LIBNAME}.${LIBSUFFIX}.exp") 560set(LIBZIPNAME "${LIBNAME}.${LIBSUFFIX}.zip") 561 562set(LIBS "${PROJECT_SOURCE_DIR}/${LIBNAME}") 563set(LIBS_P "${PROJECT_SOURCE_DIR}/${LIBNAME_P}") 564 565 566set(LIB_COMPONENTS BLAS) 567if (NOT NO_CBLAS) 568 set(LIB_COMPONENTS "${LIB_COMPONENTS} CBLAS") 569endif () 570 571if (NOT NO_LAPACK) 572 set(LIB_COMPONENTS "${LIB_COMPONENTS} LAPACK") 573 if (NOT NO_LAPACKE) 574 set(LIB_COMPONENTS "${LIB_COMPONENTS} LAPACKE") 575 endif () 576 if (BUILD_RELAPACK) 577 set(LIB_COMPONENTS "${LIB_COMPONENTS} ReLAPACK") 578 endif () 579endif () 580 581if (ONLY_CBLAS) 582 set(LIB_COMPONENTS CBLAS) 583endif () 584 585 586# For GEMM3M 587set(USE_GEMM3M 0) 588 589if (DEFINED ARCH) 590 if (X86 OR X86_64 OR ${ARCH} STREQUAL "ia64" OR MIPS64) 591 set(USE_GEMM3M 1) 592 endif () 593 594 if (${CORE} STREQUAL "generic") 595 set(USE_GEMM3M 0) 596 endif () 597endif () 598 599 600#export OSNAME 601#export ARCH 602#export CORE 603#export LIBCORE 604#export PGCPATH 605#export CONFIG 606#export CC 607#export FC 608#export BU 609#export FU 610#export NEED2UNDERSCORES 611#export USE_THREAD 612#export NUM_THREADS 613#export NUM_CORES 614#export SMP 615#export MAKEFILE_RULE 616#export NEED_PIC 617#export BINARY 618#export BINARY32 619#export BINARY64 620#export F_COMPILER 621#export C_COMPILER 622#export USE_OPENMP 623#export CROSS 624#export CROSS_SUFFIX 625#export NOFORTRAN 626#export NO_FBLAS 627#export EXTRALIB 628#export CEXTRALIB 629#export FEXTRALIB 630#export HAVE_SSE 631#export HAVE_SSE2 632#export HAVE_SSE3 633#export HAVE_SSSE3 634#export HAVE_SSE4_1 635#export HAVE_SSE4_2 636#export HAVE_SSE4A 637#export HAVE_SSE5 638#export HAVE_AVX 639#export HAVE_VFP 640#export HAVE_VFPV3 641#export HAVE_VFPV4 642#export HAVE_NEON 643#export KERNELDIR 644#export FUNCTION_PROFILE 645#export TARGET_CORE 646# 647#export SBGEMM_UNROLL_M 648#export SBGEMM_UNROLL_N 649#export SGEMM_UNROLL_M 650#export SGEMM_UNROLL_N 651#export DGEMM_UNROLL_M 652#export DGEMM_UNROLL_N 653#export QGEMM_UNROLL_M 654#export QGEMM_UNROLL_N 655#export CGEMM_UNROLL_M 656#export CGEMM_UNROLL_N 657#export ZGEMM_UNROLL_M 658#export ZGEMM_UNROLL_N 659#export XGEMM_UNROLL_M 660#export XGEMM_UNROLL_N 661#export CGEMM3M_UNROLL_M 662#export CGEMM3M_UNROLL_N 663#export ZGEMM3M_UNROLL_M 664#export ZGEMM3M_UNROLL_N 665#export XGEMM3M_UNROLL_M 666#export XGEMM3M_UNROLL_N 667 668 669#if (USE_CUDA) 670# export CUDADIR 671# export CUCC 672# export CUFLAGS 673# export CULIB 674#endif 675