Skip to content

Commit 1894e7f

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: bb49709 ghstack-comment-id: 3071359023 Pull-Request: #12468
1 parent fad071b commit 1894e7f

File tree

1 file changed

+40
-25
lines changed

1 file changed

+40
-25
lines changed

CMakeLists.txt

Lines changed: 40 additions & 25 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}
223+
set(PTHREADPOOL_SOURCE_DIR
224+
"${CMAKE_CURRENT_LIST_DIR}/backends/xnnpack/third-party/pthreadpool"
225225
)
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 ""
226+
include(ExternalProject)
227+
include(GNUInstallDirs)
228+
set(PTHREADPOOL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/pthreadpool")
229+
set(PTHREADPOOL_INSTALL_DIR "${PTHREADPOOL_BINARY_DIR}/install")
230+
set(PTHREADPOOL_LIBRARY
231+
"${PTHREADPOOL_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libpthreadpool.a"
243232
)
233+
get_extra_cmake_args_for_external_project(PTHREADPOOL_EXTRA_CMAKE_ARGS)
244234
if(APPLE)
245-
set(PTHREADPOOL_SYNC_PRIMITIVE
246-
"condvar"
247-
CACHE STRING ""
235+
list(APPEND PTHREADPOOL_EXTRA_CMAKE_ARGS -D
236+
PTHREADPOOL_SYNC_PRIMITIVE=condvar
248237
)
249238
endif()
250-
add_subdirectory("${PTHREADPOOL_SOURCE_DIR}")
251-
set(CMAKE_POSITION_INDEPENDENT_CODE
252-
${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
239+
ExternalProject_Add(
240+
pthreadpoolExternalProject
241+
SOURCE_DIR "${PTHREADPOOL_SOURCE_DIR}"
242+
BINARY_DIR "${PTHREADPOOL_BINARY_DIR}"
243+
INSTALL_DIR "${PTHREADPOOL_INSTALL_DIR}"
244+
BUILD_BYPRODUCTS "${PTHREADPOOL_LIBRARY}"
245+
CMAKE_ARGS ${PTHREADPOOL_EXTRA_CMAKE_ARGS}
246+
-D
247+
PTHREADPOOL_BUILD_TESTS=OFF
248+
-D
249+
PTHREADPOOL_BUILD_BENCHMARKS=OFF
250+
-D
251+
PTHREADPOOL_LIBRARY_TYPE=static
252+
-D
253+
PTHREADPOOL_ALLOW_DEPRECATED_API=ON
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)