diff --git a/CMakeLists.txt b/CMakeLists.txt index eb15fa4bc..41cb52b23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,8 +9,8 @@ set(OpenBLAS_MINOR_VERSION 2) set(OpenBLAS_PATCH_VERSION 13) set(OpenBLAS_VERSION "${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.${OpenBLAS_PATCH_VERSION}") -# is this necessary? lapack-netlib has its own fortran checks in its CMakeLists.txt enable_language(Fortran) +enable_language(ASM) message(WARNING "CMake support is experimental. This will not produce the same Makefiles that OpenBLAS ships with.") @@ -19,7 +19,7 @@ include("${CMAKE_SOURCE_DIR}/cmake/system.cmake") set(BLASDIRS interface driver/level2 driver/level3 driver/others) -if (NOT ${DYNAMIC_ARCH}) +if (NOT DYNAMIC_ARCH) list(APPEND BLASDIRS kernel) endif () diff --git a/cmake/c_check.cmake b/cmake/c_check.cmake index 2e5ce5edc..aaa3da7bc 100644 --- a/cmake/c_check.cmake +++ b/cmake/c_check.cmake @@ -26,8 +26,8 @@ # N.B. c_check (and ctest.c) is not cross-platform, so instead try to use CMake variables. -# TODO: detect NEED_FU/FU -set(NEED_FU 1) +# TODO: detect FU (front underscore) by compiling ctest1.c +set(FU "_") # Convert CMake vars into the format that OpenBLAS expects string(TOUPPER ${CMAKE_SYSTEM_NAME} HOST_OS) @@ -74,5 +74,5 @@ file(WRITE ${TARGET_CONF} "#define ARCH_${ARCH}\t1\n" "#define C_${COMPILER_ID}\t1\n" "#define __${BINARY}BIT__\t1\n" - "#define FUNDERSCORE\t${NEED_FU}\n") + "#define FUNDERSCORE\t${FU}\n") diff --git a/cmake/prebuild.cmake b/cmake/prebuild.cmake index 6312a515e..32faeeea7 100644 --- a/cmake/prebuild.cmake +++ b/cmake/prebuild.cmake @@ -54,7 +54,6 @@ include("${CMAKE_SOURCE_DIR}/cmake/c_check.cmake") include("${CMAKE_SOURCE_DIR}/cmake/f_check.cmake") # compile getarch -enable_language(ASM) set(GETARCH_DIR "${PROJECT_BINARY_DIR}/getarch_build") set(GETARCH_BIN "getarch${CMAKE_EXECUTABLE_SUFFIX}") file(MAKE_DIRECTORY ${GETARCH_DIR}) diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt new file mode 100644 index 000000000..a36cb8332 --- /dev/null +++ b/kernel/CMakeLists.txt @@ -0,0 +1,85 @@ + +include_directories(${CMAKE_SOURCE_DIR}) + +# TODO: need to read ${KERNELDIR}/KERNEL into CMake vars + + +# Makefile.L1 + +# these are using hardcoded filenames for now, should get them from the KERNEL vars, e.g. DAMAXKERNEL instead of amax.S +GenerateNamedObjects("${KERNELDIR}/amax.S" "DOUBLE" "USE_ABS" "amax_k" 0) +list(APPEND DBLAS_OBJS ${OBJ_LIST_OUT}) + +GenerateNamedObjects("${KERNELDIR}/amax.S" "DOUBLE" "USE_ABS;USE_MIN" "amin_k" 0) +list(APPEND DBLAS_OBJS ${OBJ_LIST_OUT}) + +GenerateNamedObjects("${KERNELDIR}/amax.S" "DOUBLE" "" "max_k" 0) +list(APPEND DBLAS_OBJS ${OBJ_LIST_OUT}) + +GenerateNamedObjects("${KERNELDIR}/amax.S" "DOUBLE" "" "min_k" 0) +list(APPEND DBLAS_OBJS ${OBJ_LIST_OUT}) + +GenerateNamedObjects("${KERNELDIR}/iamax.S" "DOUBLE" "USE_ABS" "i*amax_k" 0) +list(APPEND DBLAS_OBJS ${OBJ_LIST_OUT}) + +GenerateNamedObjects("${KERNELDIR}/iamax.S" "DOUBLE" "USE_ABS;USE_MIN" "i*amin_k" 0) +list(APPEND DBLAS_OBJS ${OBJ_LIST_OUT}) + +GenerateNamedObjects("${KERNELDIR}/iamax.S" "DOUBLE" "" "i*max_k" 0) +list(APPEND DBLAS_OBJS ${OBJ_LIST_OUT}) + +GenerateNamedObjects("${KERNELDIR}/iamax.S" "DOUBLE" "" "i*min_k" 0) +list(APPEND DBLAS_OBJS ${OBJ_LIST_OUT}) + +#DBLASOBJS += \ +# dasum_k$(TSUFFIX).$(SUFFIX) daxpy_k$(TSUFFIX).$(SUFFIX) dcopy_k$(TSUFFIX).$(SUFFIX) ddot_k$(TSUFFIX).$(SUFFIX) \ +# dnrm2_k$(TSUFFIX).$(SUFFIX) drot_k$(TSUFFIX).$(SUFFIX) dscal_k$(TSUFFIX).$(SUFFIX) dswap_k$(TSUFFIX).$(SUFFIX) \ +# daxpby_k$(TSUFFIX).$(SUFFIX) + +# Makefile.L2 +#DBLASOBJS += \ +# dgemv_n$(TSUFFIX).$(SUFFIX) dgemv_t$(TSUFFIX).$(SUFFIX) dsymv_U$(TSUFFIX).$(SUFFIX) dsymv_L$(TSUFFIX).$(SUFFIX) \ +# dger_k$(TSUFFIX).$(SUFFIX) + + +# Makefile.L3 +#DKERNELOBJS += \ +# dgemm_kernel$(TSUFFIX).$(SUFFIX) \ +# $(DGEMMINCOPYOBJ) $(DGEMMITCOPYOBJ) \ +# $(DGEMMONCOPYOBJ) $(DGEMMOTCOPYOBJ) + +#DBLASOBJS += \ +# dgemm_beta$(TSUFFIX).$(SUFFIX) \ +# dtrmm_kernel_LN$(TSUFFIX).$(SUFFIX) dtrmm_kernel_LT$(TSUFFIX).$(SUFFIX) \ +# dtrmm_kernel_RN$(TSUFFIX).$(SUFFIX) dtrmm_kernel_RT$(TSUFFIX).$(SUFFIX) \ +# dtrsm_kernel_LN$(TSUFFIX).$(SUFFIX) dtrsm_kernel_LT$(TSUFFIX).$(SUFFIX) \ +# dtrsm_kernel_RN$(TSUFFIX).$(SUFFIX) dtrsm_kernel_RT$(TSUFFIX).$(SUFFIX) \ + +#DBLASOBJS += \ +# dtrmm_iunucopy$(TSUFFIX).$(SUFFIX) dtrmm_iunncopy$(TSUFFIX).$(SUFFIX) \ +# dtrmm_ilnucopy$(TSUFFIX).$(SUFFIX) dtrmm_ilnncopy$(TSUFFIX).$(SUFFIX) \ +# dtrmm_iutucopy$(TSUFFIX).$(SUFFIX) dtrmm_iutncopy$(TSUFFIX).$(SUFFIX) \ +# dtrmm_iltucopy$(TSUFFIX).$(SUFFIX) dtrmm_iltncopy$(TSUFFIX).$(SUFFIX) \ +# dtrmm_ounucopy$(TSUFFIX).$(SUFFIX) dtrmm_ounncopy$(TSUFFIX).$(SUFFIX) \ +# dtrmm_olnucopy$(TSUFFIX).$(SUFFIX) dtrmm_olnncopy$(TSUFFIX).$(SUFFIX) \ +# dtrmm_outucopy$(TSUFFIX).$(SUFFIX) dtrmm_outncopy$(TSUFFIX).$(SUFFIX) \ +# dtrmm_oltucopy$(TSUFFIX).$(SUFFIX) dtrmm_oltncopy$(TSUFFIX).$(SUFFIX) \ +# dtrsm_iunucopy$(TSUFFIX).$(SUFFIX) dtrsm_iunncopy$(TSUFFIX).$(SUFFIX) \ +# dtrsm_ilnucopy$(TSUFFIX).$(SUFFIX) dtrsm_ilnncopy$(TSUFFIX).$(SUFFIX) \ +# dtrsm_iutucopy$(TSUFFIX).$(SUFFIX) dtrsm_iutncopy$(TSUFFIX).$(SUFFIX) \ +# dtrsm_iltucopy$(TSUFFIX).$(SUFFIX) dtrsm_iltncopy$(TSUFFIX).$(SUFFIX) \ +# dtrsm_ounucopy$(TSUFFIX).$(SUFFIX) dtrsm_ounncopy$(TSUFFIX).$(SUFFIX) \ +# dtrsm_olnucopy$(TSUFFIX).$(SUFFIX) dtrsm_olnncopy$(TSUFFIX).$(SUFFIX) \ +# dtrsm_outucopy$(TSUFFIX).$(SUFFIX) dtrsm_outncopy$(TSUFFIX).$(SUFFIX) \ +# dtrsm_oltucopy$(TSUFFIX).$(SUFFIX) dtrsm_oltncopy$(TSUFFIX).$(SUFFIX) \ +# dsymm_iutcopy$(TSUFFIX).$(SUFFIX) dsymm_iltcopy$(TSUFFIX).$(SUFFIX) \ +# dsymm_outcopy$(TSUFFIX).$(SUFFIX) dsymm_oltcopy$(TSUFFIX).$(SUFFIX) + +#DBLASOBJS += \ +# domatcopy_k_cn$(TSUFFIX).$(SUFFIX) domatcopy_k_rn$(TSUFFIX).$(SUFFIX) \ +# domatcopy_k_ct$(TSUFFIX).$(SUFFIX) domatcopy_k_rt$(TSUFFIX).$(SUFFIX) + +# Makefile.LA +#DBLASOBJS += dneg_tcopy$(TSUFFIX).$(SUFFIX) dlaswp_ncopy$(TSUFFIX).$(SUFFIX) + +set(DBLAS_OBJS ${DBLAS_OBJS} PARENT_SCOPE) # list append removes the scope from DBLAS_OBJS