1*8fb009dcSAndroid Build Coastguard Worker# binary_dir_relative_path sets outvar to 2*8fb009dcSAndroid Build Coastguard Worker# ${CMAKE_CURRENT_BINARY_DIR}/${cur_bin_dir_relative}, but expressed relative to 3*8fb009dcSAndroid Build Coastguard Worker# ${CMAKE_BINARY_DIR}. 4*8fb009dcSAndroid Build Coastguard Worker# 5*8fb009dcSAndroid Build Coastguard Worker# TODO(davidben): When we require CMake 3.20 or later, this can be replaced with 6*8fb009dcSAndroid Build Coastguard Worker# the built-in cmake_path(RELATIVE_PATH) function. 7*8fb009dcSAndroid Build Coastguard Workerfunction(binary_dir_relative_path cur_bin_dir_relative outvar) 8*8fb009dcSAndroid Build Coastguard Worker string(LENGTH "${CMAKE_BINARY_DIR}/" root_dir_length) 9*8fb009dcSAndroid Build Coastguard Worker string(SUBSTRING "${CMAKE_CURRENT_BINARY_DIR}/${cur_bin_dir_relative}" ${root_dir_length} -1 result) 10*8fb009dcSAndroid Build Coastguard Worker set(${outvar} ${result} PARENT_SCOPE) 11*8fb009dcSAndroid Build Coastguard Workerendfunction() 12*8fb009dcSAndroid Build Coastguard Worker 13*8fb009dcSAndroid Build Coastguard Worker# copy_post_build causes targets in ${ARGN} to be copied to 14*8fb009dcSAndroid Build Coastguard Worker# ${CMAKE_CURRENT_BINARY_DIR}/${dir} after being built. 15*8fb009dcSAndroid Build Coastguard Workerfunction(copy_post_build dir) 16*8fb009dcSAndroid Build Coastguard Worker foreach(target ${ARGN}) 17*8fb009dcSAndroid Build Coastguard Worker add_custom_command( 18*8fb009dcSAndroid Build Coastguard Worker TARGET ${target} 19*8fb009dcSAndroid Build Coastguard Worker POST_BUILD 20*8fb009dcSAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/${dir}" 21*8fb009dcSAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${target}> "${CMAKE_CURRENT_BINARY_DIR}/${dir}") 22*8fb009dcSAndroid Build Coastguard Worker endforeach() 23*8fb009dcSAndroid Build Coastguard Workerendfunction() 24