mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
We don't measure Ounchecked anymore. On the other hand we want to benchmark the Osize build.
91 lines
3.3 KiB
CMake
91 lines
3.3 KiB
CMake
|
|
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_Osize)
|
|
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++
|
|
-DSWIFT_BENCHMARK_SUBCMAKE_BUILD=TRUE
|
|
PASSTHROUGH_PREFIXES SWIFT_BENCHMARK
|
|
)
|
|
endfunction()
|