Skip to content

Commit 7f09f5d

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: 0f66acd ghstack-comment-id: 3071359023 Pull-Request: #12468
1 parent 3c27f10 commit 7f09f5d

File tree

1 file changed

+41
-23
lines changed

1 file changed

+41
-23
lines changed

CMakeLists.txt

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -220,36 +220,54 @@ 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+
include(GNUInstallDirs)
234+
set(PTHREADPOOL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/pthreadpool")
235+
set(PTHREADPOOL_INSTALL_DIR "${PTHREADPOOL_BINARY_DIR}/install")
236+
set(PTHREADPOOL_LIBRARY
237+
"${PTHREADPOOL_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libpthreadpool.a"
238+
)
239+
get_extra_cmake_args_for_external_project(PTHREADPOOL_EXTRA_CMAKE_ARGS)
240+
ExternalProject_Add(
241+
pthreadpoolExternalProject
242+
SOURCE_DIR "${PTHREADPOOL_SOURCE_DIR}"
243+
BINARY_DIR "${PTHREADPOOL_BINARY_DIR}"
244+
INSTALL_DIR "${PTHREADPOOL_INSTALL_DIR}"
245+
BUILD_BYPRODUCTS "${PTHREADPOOL_LIBRARY}"
246+
CMAKE_ARGS ${PTHREADPOOL_EXTRA_CMAKE_ARGS}
247+
-D
248+
PTHREADPOOL_BUILD_TESTS=OFF
249+
-D
250+
PTHREADPOOL_BUILD_BENCHMARKS=OFF
251+
-D
252+
PTHREADPOOL_LIBRARY_TYPE=static
253+
-D
254+
PTHREADPOOL_ALLOW_DEPRECATED_API=ON
255+
-D
256+
PTHREADPOOL_SYNC_PRIMITVE=${PTHREADPOOL_SYNC_PRIMITIVE}
257+
-D
258+
CMAKE_POSITION_INDEPENDENT_CODE=ON
259+
-D
260+
CMAKE_INSTALL_PREFIX=<INSTALL_DIR>
261+
)
262+
add_library(pthreadpool STATIC IMPORTED)
263+
set_property(
264+
TARGET pthreadpool PROPERTY IMPORTED_LOCATION "${PTHREADPOOL_LIBRARY}"
265+
)
266+
add_dependencies(pthreadpool pthreadpoolExternalProject)
267+
# Trailing slash matters here! "Move everything from the temporary pthreadpool
268+
# install directory to the proper install directory."
269+
install(DIRECTORY "${PTHREADPOOL_INSTALL_DIR}/"
270+
DESTINATION "${CMAKE_INSTALL_PREFIX}"
253271
)
254272
endif()
255273

0 commit comments

Comments
 (0)