macro(subdirlist result curdir) file(GLOB children RELATIVE ${curdir} ${curdir}/*) set(dirlist "") foreach (child ${children}) if (IS_DIRECTORY ${curdir}/${child}) list(APPEND dirlist ${child}) endif() endforeach() set(${result} ${dirlist}) endmacro() function (platform_config) set(available_platforms "") set(available_platforms_list "") subdirlist(platforms ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/sys) foreach (platform ${platforms}) subdirlist(machines ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/sys/${platform}/machine) foreach (machine ${machines}) set(available_platforms "${available_platforms}${machine}-${platform} ") list(APPEND available_platforms_list ${machine}-${platform}) endforeach (machine) endforeach (platform) if (${ARGC} LESS 1) message(FATAL_ERROR "No target specified!\n" "Available targets: ${available_platforms}") endif () set(target ${ARGV0}) list(FIND available_platforms_list ${target} target_idx) if (${target_idx} EQUAL -1) message(FATAL_ERROR "${target} is not a valid target!\n" "Available targets: ${available_platforms}") endif () string(REPLACE "-" ";" target_parts ${target}) list(GET target_parts 1 platform) list(GET target_parts 0 machine) set(machine ${machine} PARENT_SCOPE) set(platform ${platform} PARENT_SCOPE) endfunction (platform_config)