Skip to content

Commit d18a52d

Browse files
authored
Fix libflatccrt race (#10918)
### Summary Seems like there is a race in building `libflatccrt.a`. This issue has existed for a while: #7300. It was temporarily mitigated in #7570 by just reducing the parallelism. In this diff I attempt to fix it. This is just my assumption of what is wrong. Given flatccrt builds a debug version with a `_d` suffix, if the target isn't depended on (i.e. some target don't use the conditional target name) then the order of how the lib is built causes a race. So for now, always use the non-debug version. Given it's a race, I was never able to repro the issue locally — I can't guarantee this is the problem. However, it seems my recent changes in #10855 has increased the frequency of the problem in CI. ### Test plan CI cc @larryliu0820
1 parent 502db64 commit d18a52d

File tree

7 files changed

+22
-34
lines changed

7 files changed

+22
-34
lines changed

.ci/scripts/build-qnn-sdk.sh

100644100755
Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,12 @@ set -o xtrace
1111

1212
build_qnn_backend() {
1313
echo "Start building qnn backend."
14-
export ANDROID_NDK_ROOT=/opt/ndk
15-
export QNN_SDK_ROOT=/tmp/qnn/2.28.0.241029
14+
export ANDROID_NDK_ROOT=${ANDROID_NDK_ROOT:-/opt/ndk}
15+
export QNN_SDK_ROOT=${QNN_SDK_ROOT:-/tmp/qnn/2.28.0.241029}
1616
export EXECUTORCH_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)"
1717

18-
# Workaround to avoid issues around missing flatccrt library (depending on the
19-
# number of jobs used), see issue #7300:
20-
# Build twice (second time with `--no_clean`) to make sure libflatccrt.a is
21-
# available.
22-
# TODO: Remove this workaround once the underlying issue is fixed.
23-
bash backends/qualcomm/scripts/build.sh --skip_aarch64 --job_number 2 --release || \
24-
bash backends/qualcomm/scripts/build.sh --skip_aarch64 --job_number 2 --release --no_clean
18+
parallelism=$(( $(nproc) - 1 ))
19+
bash backends/qualcomm/scripts/build.sh --skip_aarch64 --job_number ${parallelism} --release
2520
}
2621

2722
set_up_aot() {

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,7 @@ if(EXECUTORCH_BUILD_PYBIND)
582582
${TORCH_PYTHON_LIBRARY}
583583
bundled_program
584584
etdump
585+
flatccrt
585586
executorch
586587
extension_data_loader
587588
util

examples/apple/mps/CMakeLists.txt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,6 @@ if(NOT CMAKE_TOOLCHAIN_FILE MATCHES ".*(iOS|ios\.toolchain)\.cmake$")
9797
list(TRANSFORM _mps_executor_runner__srcs PREPEND "${EXECUTORCH_ROOT}/")
9898
add_executable(mps_executor_runner ${_mps_executor_runner__srcs})
9999

100-
if(CMAKE_BUILD_TYPE MATCHES "Debug")
101-
set(FLATCC_LIB flatccrt_d)
102-
else()
103-
set(FLATCC_LIB flatccrt)
104-
endif()
105-
106100
if(CMAKE_BUILD_TYPE MATCHES "Debug")
107101
target_link_options(mps_executor_runner PUBLIC -fsanitize=undefined)
108102
endif()
@@ -113,7 +107,7 @@ if(NOT CMAKE_TOOLCHAIN_FILE MATCHES ".*(iOS|ios\.toolchain)\.cmake$")
113107
executorch
114108
gflags
115109
etdump
116-
${FLATCC_LIB}
110+
flatccrt
117111
mpsdelegate
118112
mps_portable_ops_lib
119113
${mps_executor_runner_libs}

examples/arm/executor_runner/CMakeLists.txt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -583,22 +583,16 @@ if(EXECUTORCH_ENABLE_EVENT_TRACER)
583583
"${ET_BUILD_DIR_PATH}/lib/libetdump.a"
584584
)
585585

586-
if(CMAKE_BUILD_TYPE MATCHES "Debug")
587-
set(FLATCCRT_LIB flatccrt_d)
588-
else()
589-
set(FLATCCRT_LIB flatccrt)
590-
endif()
591-
592-
add_library(${FLATCCRT_LIB} STATIC IMPORTED)
586+
add_library(flatccrt STATIC IMPORTED)
593587
set_property(
594-
TARGET ${FLATCCRT_LIB}
588+
TARGET flatccrt
595589
PROPERTY IMPORTED_LOCATION
596-
"${ET_BUILD_DIR_PATH}/lib/lib${FLATCCRT_LIB}.a"
590+
"${ET_BUILD_DIR_PATH}/lib/libflatccrt.a"
597591
)
598592

599593
list(APPEND arm_executor_runner_link
600594
etdump
601-
${FLATCCRT_LIB}
595+
flatccrt
602596
)
603597
endif()
604598

examples/qualcomm/executor_runner/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ target_include_directories(
2020
)
2121
target_link_libraries(
2222
qnn_executor_runner qnn_executorch_backend full_portable_ops_lib etdump
23-
${FLATCCRT_LIB} gflags
23+
flatccrt gflags
2424
)
2525
set_target_properties(
2626
qnn_executor_runner PROPERTIES LINK_FLAGS "-Wl,-rpath='$ORIGIN'"

third-party/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ ExternalProject_Add(
6868
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET}
6969
BUILD_BYPRODUCTS <INSTALL_DIR>/bin/flatcc
7070
)
71+
file(REMOVE_RECURSE ${PROJECT_SOURCE_DIR}/third-party/flatcc/lib)
7172
ExternalProject_Get_Property(flatcc_external_project INSTALL_DIR)
7273
add_executable(flatcc_cli IMPORTED GLOBAL)
7374
add_dependencies(flatcc_cli flatcc_external_project)
@@ -83,6 +84,11 @@ set(FLATCC_REFLECTION OFF CACHE BOOL "")
8384
set(FLATCC_DEBUG_CLANG_SANITIZE OFF CACHE BOOL "")
8485
set(FLATCC_INSTALL OFF CACHE BOOL "")
8586
add_subdirectory(flatcc)
87+
# Unfortunately flatcc writes libs directly in to the source tree [1]. So to
88+
# ensure the target lib is created last, force flatcc_cli to build first.
89+
#
90+
# [1] https://github.com/dvidelabs/flatcc/blob/896db54787e8b730a6be482c69324751f3f5f117/CMakeLists.txt#L168
91+
add_dependencies(flatccrt flatcc_cli)
8692
# Fix for "relocation R_X86_64_32 against `.rodata' can not be used when making
8793
# a shared object; recompile with -fPIC" when building on some x86 linux
8894
# systems.

tools/cmake/executorch-config.cmake

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,12 @@ set(EXECUTORCH_FOUND ON)
5656

5757
target_link_libraries(executorch INTERFACE executorch_core)
5858

59-
if(CMAKE_BUILD_TYPE MATCHES "Debug")
60-
set(FLATCCRT_LIB flatccrt_d)
61-
else()
62-
set(FLATCCRT_LIB flatccrt)
63-
endif()
64-
6559
set(lib_list
60+
flatccrt
6661
etdump
6762
bundled_program
6863
extension_data_loader
6964
extension_flat_tensor
70-
${FLATCCRT_LIB}
7165
coreml_util
7266
coreml_inmemoryfs
7367
coremldelegate
@@ -154,6 +148,10 @@ if(TARGET coremldelegate)
154148
)
155149
endif()
156150

151+
if(TARGET etdump)
152+
set_target_properties(etdump PROPERTIES INTERFACE_LINK_LIBRARIES "flatccrt;executorch")
153+
endif()
154+
157155
if(TARGET optimized_native_cpu_ops_lib)
158156
if(TARGET optimized_portable_kernels)
159157
set(_maybe_optimized_portable_kernels_lib optimized_portable_kernels)

0 commit comments

Comments
 (0)