Skip to content

Commit 32cce07

Browse files
committed
Convert pthreadpool to ExternalProject
As with the previous PR #12425, I think this is needed to get EXPORT to work. ghstack-source-id: 2286359 ghstack-comment-id: 3071359023 Pull-Request: #12468
1 parent 99f0dc8 commit 32cce07

File tree

1 file changed

+38
-23
lines changed

1 file changed

+38
-23
lines changed

CMakeLists.txt

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -220,36 +220,51 @@ endif()
220220

221221
if(EXECUTORCH_BUILD_PTHREADPOOL)
222222
# --- pthreadpool
223-
set(ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG
224-
${CMAKE_POSITION_INDEPENDENT_CODE}
225-
)
226-
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
227-
set(PTHREADPOOL_SOURCE_DIR "backends/xnnpack/third-party/pthreadpool")
228-
set(PTHREADPOOL_BUILD_TESTS
229-
OFF
230-
CACHE BOOL ""
231-
)
232-
set(PTHREADPOOL_BUILD_BENCHMARKS
233-
OFF
234-
CACHE BOOL ""
235-
)
236-
set(PTHREADPOOL_LIBRARY_TYPE
237-
"static"
238-
CACHE STRING ""
239-
)
240-
set(PTHREADPOOL_ALLOW_DEPRECATED_API
241-
ON
242-
CACHE BOOL ""
223+
set(PTHREADPOOL_SOURCE_DIR
224+
"${CMAKE_CURRENT_LIST_DIR}/backends/xnnpack/third-party/pthreadpool"
243225
)
244226
if(APPLE)
245227
set(PTHREADPOOL_SYNC_PRIMITIVE
246228
"condvar"
247229
CACHE STRING ""
248230
)
249231
endif()
250-
add_subdirectory("${PTHREADPOOL_SOURCE_DIR}")
251-
set(CMAKE_POSITION_INDEPENDENT_CODE
252-
${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
232+
include(ExternalProject)
233+
set(PTHREADPOOL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/pthreadpool")
234+
set(PTHREADPOOL_INSTALL_DIR "${PTHREADPOOL_BINARY_DIR}/install")
235+
set(PTHREADPOOL_LIBRARY "${PTHREADPOOL_INSTALL_DIR}/lib/libpthreadpool.a")
236+
get_extra_cmake_args_for_external_project(PTHREADPOOL_EXTRA_CMAKE_ARGS)
237+
ExternalProject_Add(
238+
pthreadpoolExternalProject
239+
SOURCE_DIR "${PTHREADPOOL_SOURCE_DIR}"
240+
BINARY_DIR "${PTHREADPOOL_BINARY_DIR}"
241+
INSTALL_DIR "${PTHREADPOOL_INSTALL_DIR}"
242+
BUILD_BYPRODUCTS "${PTHREADPOOL_LIBRARY}"
243+
CMAKE_ARGS ${PTHREADPOOL_EXTRA_CMAKE_ARGS}
244+
-D
245+
PTHREADPOOL_BUILD_TESTS=OFF
246+
-D
247+
PTHREADPOOL_BUILD_BENCHMARKS=OFF
248+
-D
249+
PTHREADPOOL_LIBRARY_TYPE=static
250+
-D
251+
PTHREADPOOL_ALLOW_DEPRECATED_API=ON
252+
-D
253+
PTHREADPOOL_SYNC_PRIMITVE=${PTHREADPOOL_SYNC_PRIMITIVE}
254+
-D
255+
CMAKE_POSITION_INDEPENDENT_CODE=ON
256+
-D
257+
CMAKE_INSTALL_PREFIX=<INSTALL_DIR>
258+
)
259+
add_library(pthreadpool STATIC IMPORTED)
260+
set_property(
261+
TARGET pthreadpool PROPERTY IMPORTED_LOCATION "${PTHREADPOOL_LIBRARY}"
262+
)
263+
add_dependencies(pthreadpool pthreadpoolExternalProject)
264+
# Trailing slash matters here! "Move everything from the temporary pthreadpool
265+
# install directory to the proper install directory."
266+
install(DIRECTORY "${PTHREADPOOL_INSTALL_DIR}/"
267+
DESTINATION "${CMAKE_INSTALL_PREFIX}"
253268
)
254269
endif()
255270

0 commit comments

Comments
 (0)