From d2eea9b3ae1fc494cc1770ac0958c103ccc23a5d Mon Sep 17 00:00:00 2001 From: Adonis Ling Date: Tue, 14 Nov 2023 12:21:08 +0800 Subject: [PATCH] [chore](macOS) Reduce the size of executables on macOS arm64 (#26894) Like #15641, we should reduce the size of executables on macOS arm64. Otherwise, we can not run doris_be and doris_be_test with ASAN build type on macOS arm64 now. --- be/src/service/CMakeLists.txt | 33 ++++++++++++++++++++++++-------- be/test/CMakeLists.txt | 4 +++- be/test/util/threadpool_test.cpp | 5 +---- bin/start_be.sh | 10 +++++----- build.sh | 4 ++++ run-be-ut.sh | 4 ++-- 6 files changed, 40 insertions(+), 20 deletions(-) diff --git a/be/src/service/CMakeLists.txt b/be/src/service/CMakeLists.txt index f0831f7317..c5832d8433 100644 --- a/be/src/service/CMakeLists.txt +++ b/be/src/service/CMakeLists.txt @@ -45,14 +45,31 @@ if (${MAKE_TEST} STREQUAL "OFF") install(DIRECTORY DESTINATION ${OUTPUT_DIR}/lib/) install(TARGETS doris_be DESTINATION ${OUTPUT_DIR}/lib/) - if ("${STRIP_DEBUG_INFO}" STREQUAL "ON") - add_custom_command(TARGET doris_be POST_BUILD - COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $ $.dbg - COMMAND ${CMAKE_STRIP} --strip-debug --strip-unneeded $ - COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=$.dbg $ - ) + if (OS_MACOSX AND ARCH_ARM AND "${CMAKE_BUILD_TYPE}" STREQUAL "ASAN") + set(SHOULD_STRIP_DEBUG_INFO "ON") + endif() - install(DIRECTORY DESTINATION ${OUTPUT_DIR}/lib/debug_info/) - install(FILES $.dbg DESTINATION ${OUTPUT_DIR}/lib/debug_info/) + if ("${STRIP_DEBUG_INFO}" STREQUAL "ON" OR "${SHOULD_STRIP_DEBUG_INFO}" STREQUAL "ON") + if (OS_MACOSX) + find_program(DSYMUTIL NAMES dsymutil) + message(STATUS "dsymutil found: ${DSYMUTIL}") + find_program(LLVM_STRIP NAMES llvm-strip) + message(STATUS "llvm-strip found: ${LLVM_STRIP}") + add_custom_command(TARGET doris_be POST_BUILD + COMMAND ${DSYMUTIL} $ + COMMAND ${LLVM_STRIP} --strip-all $ + COMMAND mkdir -p ${OUTPUT_DIR}/lib + COMMAND cp -rf doris_be.dSYM ${OUTPUT_DIR}/lib/ + ) + else() + add_custom_command(TARGET doris_be POST_BUILD + COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $ $.dbg + COMMAND ${CMAKE_STRIP} --strip-debug --strip-unneeded $ + COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=$.dbg $ + ) + + install(DIRECTORY DESTINATION ${OUTPUT_DIR}/lib/debug_info/) + install(FILES $.dbg DESTINATION ${OUTPUT_DIR}/lib/debug_info/) + endif() endif() endif() diff --git a/be/test/CMakeLists.txt b/be/test/CMakeLists.txt index 3189da0791..6d5f7c7c86 100644 --- a/be/test/CMakeLists.txt +++ b/be/test/CMakeLists.txt @@ -67,9 +67,11 @@ set_target_properties(doris_be_test PROPERTIES COMPILE_FLAGS "-fno-access-contro if (OS_MACOSX AND ARCH_ARM) find_program(DSYMUTIL NAMES dsymutil) message(STATUS "dsymutil found: ${DSYMUTIL}") + find_program(LLVM_STRIP NAMES llvm-strip) + message(STATUS "llvm-strip found: ${LLVM_STRIP}") add_custom_command(TARGET doris_be_test POST_BUILD COMMAND ${DSYMUTIL} $ - COMMAND ${CMAKE_STRIP} -S $ + COMMAND ${LLVM_STRIP} --strip-all $ ) endif() diff --git a/be/test/util/threadpool_test.cpp b/be/test/util/threadpool_test.cpp index 124a1749a0..cd33aaaa64 100644 --- a/be/test/util/threadpool_test.cpp +++ b/be/test/util/threadpool_test.cpp @@ -331,10 +331,7 @@ TEST_F(ThreadPoolTest, TestDeadlocks) { #ifdef NDEBUG const char* death_msg = "doris::ThreadPool::check_not_pool_thread_unlocked()"; #elif defined(__APPLE__) - const char* death_msg = - "_ZNSt3__1L8__invokeIRNS_6__bindIMN5doris10ThreadPoolEFvvEJPS3_EEEJEEEDTclscT_fp_" - "spscT0_fp0_EEOS9_DpOSA_|6__bindIMN5doris10ThreadPoolEFvvEJPS3_" - "EEEJEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS9_DpOSA_"; + const char* death_msg = "pthread_start"; #else const char* death_msg = "_ZNSt5_BindIFMN5doris10ThreadPoolEFvvEPS1_EE6__callIvJEJLm0EEEET_OSt5tupleIJDpT0_" diff --git a/bin/start_be.sh b/bin/start_be.sh index 15e26912ac..debf0eda7d 100755 --- a/bin/start_be.sh +++ b/bin/start_be.sh @@ -75,6 +75,11 @@ if [[ "$(uname -s)" != 'Darwin' ]]; then echo "Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=2000000'." exit 1 fi + + if [[ "$(swapon -s | wc -l)" -gt 1 ]]; then + echo "Please disable swap memory before installation." + exit 1 + fi fi MAX_FILE_COUNT="$(ulimit -n)" @@ -83,11 +88,6 @@ if [[ "${MAX_FILE_COUNT}" -lt 60000 ]]; then exit 1 fi -if [[ "$(swapon -s | wc -l)" -gt 1 ]]; then - echo "Please disable swap memory before installation." - exit 1 -fi - # add java libs preload_jars=("preload-extensions") preload_jars+=("java-udf") diff --git a/build.sh b/build.sh index 00a5b59735..1ff1a3284c 100755 --- a/build.sh +++ b/build.sh @@ -669,6 +669,10 @@ EOF # See: https://stackoverflow.com/questions/67378106/mac-m1-cping-binary-over-another-results-in-crash rm -f "${DORIS_OUTPUT}/be/lib/doris_be" cp -r -p "${DORIS_HOME}/be/output/lib/doris_be" "${DORIS_OUTPUT}/be/lib"/ + if [[ -d "${DORIS_HOME}/be/output/lib/doris_be.dSYM" ]]; then + rm -rf "${DORIS_OUTPUT}/be/lib/doris_be.dSYM" + cp -r "${DORIS_HOME}/be/output/lib/doris_be.dSYM" "${DORIS_OUTPUT}/be/lib"/ + fi if [[ -f "${DORIS_HOME}/be/output/lib/fs_benchmark_tool" ]]; then cp -r -p "${DORIS_HOME}/be/output/lib/fs_benchmark_tool" "${DORIS_OUTPUT}/be/lib"/ fi diff --git a/run-be-ut.sh b/run-be-ut.sh index 95be87f946..30d2dae48c 100755 --- a/run-be-ut.sh +++ b/run-be-ut.sh @@ -388,11 +388,11 @@ MACHINE_OS=$(uname -s) if [[ "${MACHINE_OS}" == "Darwin" ]]; then max_fd_limit='-XX:-MaxFDLimit' - if ! echo "${final_java_opt}" | grep "${max_fd_limit/-/\-}" >/dev/null; then + if ! echo "${final_java_opt}" | grep "${max_fd_limit/-/\\-}" >/dev/null; then final_java_opt="${final_java_opt} ${max_fd_limit}" fi - if [[ -n "${JAVA_OPTS}" ]] && ! echo "${JAVA_OPTS}" | grep "${max_fd_limit/-/\-}" >/dev/null; then + if [[ -n "${JAVA_OPTS}" ]] && ! echo "${JAVA_OPTS}" | grep "${max_fd_limit/-/\\-}" >/dev/null; then JAVA_OPTS="${JAVA_OPTS} ${max_fd_limit}" fi fi