| @@ -1,88 +1,87 @@ | |||
| include_directories(${CMAKE_SOURCE_DIR}) | |||
| # sources that need to be compiled twice, once with no flags and once with LOWER | |||
| set(UL_SOURCES | |||
| sbmv_k.c | |||
| spmv_k.c | |||
| spr_k.c | |||
| spr2_k.c | |||
| syr_k.c | |||
| syr2_k.c | |||
| ) | |||
| # sources that need to be compiled several times, for UNIT, TRANS | |||
| set(NU_SOURCES | |||
| tbmv_U.c | |||
| tbsv_U.c | |||
| tpmv_U.c | |||
| tpsv_U.c | |||
| trmv_U.c | |||
| trsv_U.c | |||
| tbmv_L.c | |||
| tbsv_L.c | |||
| tpmv_L.c | |||
| tpsv_L.c | |||
| trmv_L.c | |||
| trsv_L.c | |||
| ) | |||
| # first compile all the objects that don't need specific preprocessor defines | |||
| add_library(DBLAS_NONE OBJECT | |||
| gbmv_k.c # gbmv_N | |||
| ${UL_SOURCES} | |||
| ${NU_SOURCES} | |||
| ) | |||
| # then do objects with transpose/triangular/etc definitions | |||
| # objects that need TRANS set | |||
| add_library(DBLAS_T OBJECT gbmv_k.c ${NU_SOURCES}) | |||
| set_target_properties(DBLAS_T PROPERTIES COMPILE_DEFINITIONS TRANS) | |||
| # objects that need LOWER set | |||
| add_library(DBLAS_L OBJECT ${UL_SOURCES}) | |||
| set_target_properties(DBLAS_L PROPERTIES COMPILE_DEFINITIONS LOWER) | |||
| # objects that need UNIT set | |||
| add_library(DBLAS_U OBJECT ${NU_SOURCES}) | |||
| set_target_properties(DBLAS_U PROPERTIES COMPILE_DEFINITIONS UNIT) | |||
| # objects that need TRANS and UNIT set | |||
| add_library(DBLAS_TU OBJECT ${NU_SOURCES}) | |||
| set_target_properties(DBLAS_TU PROPERTIES COMPILE_DEFINITIONS UNIT) | |||
| set_target_properties(DBLAS_TU PROPERTIES COMPILE_DEFINITIONS TRANS) | |||
| #if (DEFINED SMP) | |||
| # add_library(DBLASOBJS_SMP | |||
| # dgemv_thread_n.c dgemv_thread_t.c | |||
| # dger_thread.c | |||
| # dsymv_thread_U.c dsymv_thread_L.c | |||
| # dsyr_thread_U.c dsyr_thread_L.c | |||
| # dsyr2_thread_U.c dsyr2_thread_L.c | |||
| # dspr_thread_U.c dspr_thread_L.c | |||
| # dspr2_thread_U.c dspr2_thread_L.c | |||
| # dtrmv_thread_NUU.c dtrmv_thread_NUN.c | |||
| # dtrmv_thread_NLU.c dtrmv_thread_NLN.c | |||
| # dtrmv_thread_TUU.c dtrmv_thread_TUN.c | |||
| # dtrmv_thread_TLU.c dtrmv_thread_TLN.c | |||
| # dspmv_thread_U.c dspmv_thread_L.c | |||
| # dtpmv_thread_NUU.c dtpmv_thread_NUN.c | |||
| # dtpmv_thread_NLU.c dtpmv_thread_NLN.c | |||
| # dtpmv_thread_TUU.c dtpmv_thread_TUN.c | |||
| # dtpmv_thread_TLU.c dtpmv_thread_TLN.c | |||
| # dgbmv_thread_n.c dgbmv_thread_t.c | |||
| # dsbmv_thread_U.c dsbmv_thread_L.c | |||
| # dtbmv_thread_NUU.c dtbmv_thread_NUN.c | |||
| # dtbmv_thread_NLU.c dtbmv_thread_NLN.c | |||
| # dtbmv_thread_TUU.c dtbmv_thread_TUN.c | |||
| # dtbmv_thread_TLU.c dtbmv_thread_TLN.c | |||
| # ) | |||
| #endif () | |||
| set(DBLAS_TARGETS DBLAS_NONE DBLAS_T DBLAS_L DBLAS_U DBLAS_TU) | |||
| foreach (DBLAS_TARGET ${DBLAS_TARGETS}) | |||
| set_target_properties(${DBLAS_TARGET} PROPERTIES COMPILE_DEFINITIONS DOUBLE) | |||
| endforeach () | |||
| include_directories(${CMAKE_SOURCE_DIR}) | |||
| # sources that need to be compiled twice, once with no flags and once with LOWER | |||
| set(UL_SOURCES | |||
| sbmv_k.c | |||
| spmv_k.c | |||
| spr_k.c | |||
| spr2_k.c | |||
| syr_k.c | |||
| syr2_k.c | |||
| ) | |||
| # sources that need to be compiled several times, for UNIT, TRANS | |||
| set(NU_SOURCES | |||
| tbmv_U.c | |||
| tbsv_U.c | |||
| tpmv_U.c | |||
| tpsv_U.c | |||
| trmv_U.c | |||
| trsv_U.c | |||
| tbmv_L.c | |||
| tbsv_L.c | |||
| tpmv_L.c | |||
| tpsv_L.c | |||
| trmv_L.c | |||
| trsv_L.c | |||
| ) | |||
| # first compile all the objects that don't need specific preprocessor defines | |||
| add_library(DBLAS_NONE OBJECT | |||
| gbmv_k.c # gbmv_N | |||
| ${UL_SOURCES} | |||
| ${NU_SOURCES} | |||
| ) | |||
| # then do objects with transpose/triangular/etc definitions | |||
| # objects that need TRANS set | |||
| add_library(DBLAS_T OBJECT gbmv_k.c ${NU_SOURCES}) | |||
| set_target_properties(DBLAS_T PROPERTIES COMPILE_DEFINITIONS "TRANS") | |||
| # objects that need LOWER set | |||
| add_library(DBLAS_L OBJECT ${UL_SOURCES}) | |||
| set_target_properties(DBLAS_L PROPERTIES COMPILE_DEFINITIONS "LOWER") | |||
| # objects that need UNIT set | |||
| add_library(DBLAS_U OBJECT ${NU_SOURCES}) | |||
| set_target_properties(DBLAS_U PROPERTIES COMPILE_DEFINITIONS "UNIT") | |||
| # objects that need TRANS and UNIT set | |||
| add_library(DBLAS_TU OBJECT ${NU_SOURCES}) | |||
| set_target_properties(DBLAS_TU PROPERTIES COMPILE_DEFINITIONS "UNIT;TRANS") | |||
| #if (DEFINED SMP) | |||
| # add_library(DBLASOBJS_SMP | |||
| # dgemv_thread_n.c dgemv_thread_t.c | |||
| # dger_thread.c | |||
| # dsymv_thread_U.c dsymv_thread_L.c | |||
| # dsyr_thread_U.c dsyr_thread_L.c | |||
| # dsyr2_thread_U.c dsyr2_thread_L.c | |||
| # dspr_thread_U.c dspr_thread_L.c | |||
| # dspr2_thread_U.c dspr2_thread_L.c | |||
| # dtrmv_thread_NUU.c dtrmv_thread_NUN.c | |||
| # dtrmv_thread_NLU.c dtrmv_thread_NLN.c | |||
| # dtrmv_thread_TUU.c dtrmv_thread_TUN.c | |||
| # dtrmv_thread_TLU.c dtrmv_thread_TLN.c | |||
| # dspmv_thread_U.c dspmv_thread_L.c | |||
| # dtpmv_thread_NUU.c dtpmv_thread_NUN.c | |||
| # dtpmv_thread_NLU.c dtpmv_thread_NLN.c | |||
| # dtpmv_thread_TUU.c dtpmv_thread_TUN.c | |||
| # dtpmv_thread_TLU.c dtpmv_thread_TLN.c | |||
| # dgbmv_thread_n.c dgbmv_thread_t.c | |||
| # dsbmv_thread_U.c dsbmv_thread_L.c | |||
| # dtbmv_thread_NUU.c dtbmv_thread_NUN.c | |||
| # dtbmv_thread_NLU.c dtbmv_thread_NLN.c | |||
| # dtbmv_thread_TUU.c dtbmv_thread_TUN.c | |||
| # dtbmv_thread_TLU.c dtbmv_thread_TLN.c | |||
| # ) | |||
| #endif () | |||
| set(DBLAS_TARGETS DBLAS_NONE DBLAS_T DBLAS_L DBLAS_U DBLAS_TU) | |||
| foreach (DBLAS_TARGET ${DBLAS_TARGETS}) | |||
| set_target_properties(${DBLAS_TARGET} PROPERTIES COMPILE_DEFINITIONS DOUBLE) | |||
| endforeach () | |||
| @@ -60,16 +60,31 @@ endfunction () | |||
| # these sources are compiled with combinations of TRANS, UPPER, and UNIT, for 32 combinations total | |||
| set(TRM_SOURCES trmm_L.c trmm_R.c trsm_L.c trsm_R.c) | |||
| AllCombinations("TRANS UPPER UNIT") | |||
| set(TRM_DEFINE_COMBOS LIST_OUT) | |||
| message(STATUS "alcombos result: ${LIST_OUT}") | |||
| foreach (TRM_SOURCE ${TRM_SOURCES}) | |||
| foreach (TRM_DEFINES ${TRM_DEFINE_COMBOS}) | |||
| string(REGEX MATCH "[a-z]+_[LR]" TRM_NAME ${TRM_SOURCE}) | |||
| string(TOUPPER ${TRM_NAME} TRM_NAME) | |||
| # TODO: TRM_DEFINES is a colon-separated list of defines to set for this object - need to parse it and set them using set_target_properties, and also come up with a unique id for the lib name (e.g. first letter of each define, so TRANS UPPER UNIT is TUU) | |||
| #add_library(${TRM_NAME}_${TRM_DEFINE}_OBJS OBJECT ${TRM_SOURCE}) | |||
| #set_target_properties(${TRM_NAME}_${TRM_DEFINE}_OBJS PROPERTIES COMPILE_DEFINITIONS ${TRM_DEFINE}) | |||
| AllCombinations("TRANS;UPPER;UNIT") | |||
| set(TRM_DEFINE_COMBOS ${LIST_OUT}) | |||
| foreach (trm_source ${TRM_SOURCES}) | |||
| foreach (trm_defines ${TRM_DEFINE_COMBOS}) | |||
| # replace colon separated list with semicolons, this turns it into a CMake list that we can use foreach with | |||
| string(REPLACE ":" ";" trm_defines ${trm_defines}) | |||
| # build a unique variable name for this obj file by picking two letters from the defines (can't use one in this case) | |||
| set(trm_obj_name "") | |||
| foreach (trm_define ${trm_defines}) | |||
| string(REGEX MATCH "^[A-Z][A-Z]" letter ${trm_define}) | |||
| set(trm_obj_name "${trm_obj_name}${letter}") | |||
| endforeach () | |||
| # parse file name | |||
| string(REGEX MATCH "[a-z]+_[LR]" trm_name ${trm_source}) | |||
| string(TOUPPER ${trm_name} trm_name) | |||
| # prepend the uppercased file name to the obj name | |||
| set(trm_obj_name "${trm_name}_${trm_obj_name}_OBJS") | |||
| # now add the object and set the defines | |||
| add_library(${trm_obj_name} OBJECT ${trm_source}) | |||
| set_target_properties(${trm_obj_name} PROPERTIES COMPILE_DEFINITIONS "${trm_defines}") | |||
| endforeach () | |||
| endforeach () | |||
| @@ -1,46 +1,45 @@ | |||
| include_directories(${CMAKE_SOURCE_DIR}) | |||
| # TODO: Need to generate object files for S, D, C, Q and X - start with D for now. | |||
| # The sources are the same, but there are additional preprocessor definitions depending on the precision (see Makefile.tail). | |||
| add_library(DBLAS1OBJS OBJECT | |||
| axpy.c swap.c | |||
| copy.c scal.c | |||
| dot.c | |||
| asum.c nrm2.c | |||
| max.c # amax/min/amin compiled later from same source | |||
| rot.c rotg.c rotm.c rotmg.c | |||
| axpby.c | |||
| ) | |||
| # N.B. The original Makefile passed in -UUSE_MIN and -UUSE_ABS (where appropriate), no way to do that at a source-level in cmake. REMOVE_DEFINITIONS removes a definition for the rest of the compilation. | |||
| add_library(AMAX_OBJ OBJECT max.c) | |||
| set_target_properties(AMAX_OBJ PROPERTIES COMPILE_DEFINITIONS USE_ABS) | |||
| add_library(AMIN_OBJ OBJECT max.c) | |||
| set_target_properties(AMIN_OBJ PROPERTIES COMPILE_DEFINITIONS USE_ABS) | |||
| set_target_properties(AMIN_OBJ PROPERTIES COMPILE_DEFINITIONS USE_MIN) | |||
| add_library(MIN_OBJ OBJECT max.c) | |||
| set_target_properties(MIN_OBJ PROPERTIES COMPILE_DEFINITIONS USE_MIN) | |||
| # TODO: USE_NETLIB_GEMV shoudl switch gemv.c to netlib/*gemv.f | |||
| add_library(DBLAS2OBJS OBJECT | |||
| gemv.c ger.c | |||
| trsv.c trmv.c symv.c | |||
| syr.c syr2.c gbmv.c | |||
| sbmv.c spmv.c | |||
| spr.c spr2.c | |||
| tbsv.c tbmv.c | |||
| tpsv.c tpmv.c | |||
| ) | |||
| add_library(DBLAS3OBJS OBJECT | |||
| gemm.c symm.c | |||
| trsm.c syrk.c syr2k.c | |||
| omatcopy.c imatcopy.c | |||
| ) | |||
| # trmm is trsm with a compiler flag set | |||
| add_library(TRMM_OBJ OBJECT trsm.c) | |||
| set_target_properties(TRMM_OBJ PROPERTIES COMPILE_DEFINITIONS TRMM) | |||
| include_directories(${CMAKE_SOURCE_DIR}) | |||
| # TODO: Need to generate object files for S, D, C, Q and X - start with D for now. | |||
| # The sources are the same, but there are additional preprocessor definitions depending on the precision (see Makefile.tail). | |||
| add_library(DBLAS1OBJS OBJECT | |||
| axpy.c swap.c | |||
| copy.c scal.c | |||
| dot.c | |||
| asum.c nrm2.c | |||
| max.c # amax/min/amin compiled later from same source | |||
| rot.c rotg.c rotm.c rotmg.c | |||
| axpby.c | |||
| ) | |||
| # N.B. The original Makefile passed in -UUSE_MIN and -UUSE_ABS (where appropriate), no way to do that at a source-level in cmake. REMOVE_DEFINITIONS removes a definition for the rest of the compilation. | |||
| add_library(AMAX_OBJ OBJECT max.c) | |||
| set_target_properties(AMAX_OBJ PROPERTIES COMPILE_DEFINITIONS "USE_ABS") | |||
| add_library(AMIN_OBJ OBJECT max.c) | |||
| set_target_properties(AMIN_OBJ PROPERTIES COMPILE_DEFINITIONS "USE_ABS;USE_MIN") | |||
| add_library(MIN_OBJ OBJECT max.c) | |||
| set_target_properties(MIN_OBJ PROPERTIES COMPILE_DEFINITIONS "USE_MIN") | |||
| # TODO: USE_NETLIB_GEMV shoudl switch gemv.c to netlib/*gemv.f | |||
| add_library(DBLAS2OBJS OBJECT | |||
| gemv.c ger.c | |||
| trsv.c trmv.c symv.c | |||
| syr.c syr2.c gbmv.c | |||
| sbmv.c spmv.c | |||
| spr.c spr2.c | |||
| tbsv.c tbmv.c | |||
| tpsv.c tpmv.c | |||
| ) | |||
| add_library(DBLAS3OBJS OBJECT | |||
| gemm.c symm.c | |||
| trsm.c syrk.c syr2k.c | |||
| omatcopy.c imatcopy.c | |||
| ) | |||
| # trmm is trsm with a compiler flag set | |||
| add_library(TRMM_OBJ OBJECT trsm.c) | |||
| set_target_properties(TRMM_OBJ PROPERTIES COMPILE_DEFINITIONS TRMM) | |||