blob: 64db306252364e3e718c61b644805dd3d8292dea [file] [log] [blame]
include(CMakeParseArguments)
include(LLVMExternalProjectUtils)
include(SwiftUtils)
# This is the name of the target on the parent cmake side that is associated
# with an external project target.
#
# If LLVMExternalProjectUtils refactors its external target code, so we can
# easily add individual forwarded targets with different dependencies, this can
# be removed.
function(compute_external_target_name target_name_out target)
string(REPLACE ":" ";" target_list ${target})
list(GET target_list 0 target)
list(LENGTH target_list target_list_len)
if(${target_list_len} GREATER 1)
list(GET target_list 1 target_name)
else()
set(target_name "${target}")
endif()
set(${target_name_out} "${target_name}" PARENT_SCOPE)
endfunction()
function(compute_stdlib_dependencies stdlib_dependencies_out platform)
foreach(stdlib_dependency ${UNIVERSAL_LIBRARY_NAMES_${platform}})
string(FIND "${stdlib_dependency}" "Unittest" find_output)
if("${find_output}" STREQUAL "-1")
list(APPEND stdlib_dependencies "${stdlib_dependency}")
endif()
endforeach()
set(${stdlib_dependencies_out} "${stdlib_dependencies}" PARENT_SCOPE)
endfunction()
set(ONLY_PLATFORMS "macosx" "iphoneos" "appletvos" "watchos")
function (get_platform_from_target target_platform_out target)
foreach (platform ${ONLY_PLATFORMS})
string(FIND "${target}" "${platform}" FOUND_TARGET_PLATFORM)
if (NOT FOUND_TARGET_PLATFORM)
continue()
endif()
set(${target_platform_out} "${platform}" PARENT_SCOPE)
break()
endforeach()
endfunction()
function (compute_target_stdlib_dependencies dependencies_out target)
get_platform_from_target(target_platform ${target})
precondition(target_platform
MESSAGE "Failed to find a platform for ${target_platform}")
compute_stdlib_dependencies(stdlib_dependencies ${target_platform})
set(${dependencies_out} ${stdlib_dependencies} PARENT_SCOPE)
endfunction()
function (add_external_benchmark_suite)
set(name swift-benchmark)
set(src_dir ${SWIFT_SOURCE_DIR}/benchmark)
set(bin_dir ${SWIFT_BINARY_DIR}/external-benchmark/binary)
set(stamp_dir ${SWIFT_BINARY_DIR}/external-benchmark/stamps)
set(prefix_dir ${SWIFT_BINARY_DIR}/external-benchmark/prefix)
set(bench_targets Benchmark_O Benchmark_Onone Benchmark_Ounchecked)
set(library_targets swift-benchmark-macosx-x86_64-external)
set(all_stdlib_dependencies)
foreach (target ${library_targets})
compute_target_stdlib_dependencies(stdlib_dependencies ${target})
precondition(stdlib_dependencies)
# Add dependencies from all of our stdlib dependencies to
# swift-bench-configure. This will ensure the stdlib is ready to be poked at
# in the configure script if we ever want to do so.
list(APPEND all_stdlib_dependencies ${stdlib_dependencies})
endforeach()
llvm_ExternalProject_add(swift-bench ${src_dir}
SOURCE_DIR ${src_dir}
EXCLUDE_FROM_ALL
DEPENDS swift ${all_stdlib_dependencies}
EXTRA_TARGETS ${bench_targets} ${library_targets}
CMAKE_ARGS
-DSWIFT_EXEC=${SWIFT_BINARY_DIR}/bin/swiftc
-DSWIFT_LIBRARY_PATH=${SWIFT_BINARY_DIR}/lib/swift
-DCMAKE_C_COMPILER=${PATH_TO_CLANG_BUILD}/bin/clang
-DCMAKE_CXX_COMPILER=${PATH_TO_CLANG_BUILD}/bin/clang++
PASSTHROUGH_PREFIXES SWIFT_BENCHMARK
)
endfunction()