Moved loop over define combos into a function.

This function takes a set of sources and a set of preprocessor
definitions. It will iterate over the sources and build an object
file for each combination of preprocessor definitions for each
source file.
This commit is contained in:
Hank Anderson 2015-01-30 12:14:44 -06:00
parent a6cf8aafc0
commit 8d9b196e0d
2 changed files with 35 additions and 27 deletions

View File

@ -58,35 +58,41 @@ function(AllCombinations list_in)
set(LIST_OUT ${LIST_OUT} PARENT_SCOPE)
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})
foreach (trm_source ${TRM_SOURCES})
foreach (trm_defines ${TRM_DEFINE_COMBOS})
# generates object files for each of the sources for each of the combinations of the preprocessor definitions passed in
function(GenerateObjects sources_in defines_in)
AllCombinations("${defines_in}")
set(define_combos ${LIST_OUT})
foreach (source_file ${sources_in})
foreach (def_combo ${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})
string(REPLACE ":" ";" def_combo ${def_combo})
# 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}")
set(obj_name "")
foreach (combo_elem ${def_combo})
string(REGEX MATCH "^[A-Z][A-Z]" letter ${combo_elem})
set(obj_name "${obj_name}${letter}")
endforeach ()
# parse file name
string(REGEX MATCH "[a-z]+_[LR]" trm_name ${trm_source})
string(TOUPPER ${trm_name} trm_name)
string(REGEX MATCH "[a-z]+_[LR]" source_name ${source_file})
string(TOUPPER ${source_name} source_name)
# prepend the uppercased file name to the obj name
set(trm_obj_name "${trm_name}_${trm_obj_name}_OBJS")
set(obj_name "${source_name}_${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}")
add_library(${obj_name} OBJECT ${source_file})
set_target_properties(${obj_name} PROPERTIES COMPILE_DEFINITIONS "${def_combo}")
endforeach ()
endforeach ()
endforeach ()
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)
set(TRM_DEFINES TRANS UPPER UNIT)
GenerateObjects("${TRM_SOURCES}" "${TRM_DEFINES}")
# dsymm_LU.c dsymm_LL.c dsymm_RU.c dsymm_RL.c
# dsyrk_UN.c dsyrk_UT.c dsyrk_LN.c dsyrk_LT.c

View File

@ -0,0 +1,2 @@
# NYI