@@ -10,73 +10,88 @@ set(THIRD_PARTY_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/third-party")
1010
1111# --- XNNPACK
1212
13- # Setting this global PIC flag for all XNNPACK targets. This is needed for
14- # Object libraries within XNNPACK which must be PIC to successfully link this
15- # static libXNNPACK
16- set (ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG
17- ${CMAKE_POSITION_INDEPENDENT_CODE}
18- )
19- set (CMAKE_POSITION_INDEPENDENT_CODE ON )
20-
2113set (XNNPACK_SOURCE_DIR "${THIRD_PARTY_ROOT} /XNNPACK" )
2214set (XNNPACK_INCLUDE_DIR "${XNNPACK_SOURCE_DIR} /include" )
23- set (XNNPACK_LIBRARY_TYPE
24- "static"
25- CACHE STRING ""
15+
16+ include (ExternalProject)
17+ include (GNUInstallDirs) # For CMAKE_INSTALL_LIBDIR
18+ set (XNNPACK_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR} /XNNPACK/install" )
19+ set (XNNPACK_STATIC_LIB
20+ "${XNNPACK_INSTALL_DIR} /${CMAKE_INSTALL_LIBDIR} /libXNNPACK.a"
2621)
27- set (XNNPACK_BUILD_BENCHMARKS
28- OFF
29- CACHE BOOL ""
22+ set (XNNPACK_MICROKERNELS_STATIC_LIB
23+ "${XNNPACK_INSTALL_DIR} /${CMAKE_INSTALL_LIBDIR} /libxnnpack-microkernels-prod.a"
3024)
31- set (XNNPACK_BUILD_TESTS
32- OFF
33- CACHE BOOL ""
25+ set (KLEIDIAI_STATIC_LIB
26+ "${XNNPACK_INSTALL_DIR} /${CMAKE_INSTALL_LIBDIR} /libkleidiai.a"
27+ )
28+ get_extra_cmake_args_for_external_project(XNNPACK_EXTRA_CMAKE_ARGS)
29+ ExternalProject_Add(
30+ XNNPACKExternalProject
31+ SOURCE_DIR ${XNNPACK_SOURCE_DIR}
32+ # Not 100% clear on these locations
33+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /XNNPACK
34+ INSTALL_DIR ${XNNPACK_INSTALL_DIR}
35+ INSTALL_BYPRODUCTS ${XNNPACK_STATIC_LIB} ${XNNPACK_MICROKERNELS_STATIC_LIB}
36+ ${KLEIDIAI_STATIC_LIB}
37+ CMAKE_ARGS
38+ ${XNNPACK_EXTRA_CMAKE_ARGS}
39+ -D
40+ XNNPACK_LIBRARY_TYPE=static
41+ -D
42+ XNNPACK_BUILD_BENCHMARKS=OFF
43+ -D
44+ XNNPACK_BUILD_TESTS=OFF
45+ -D
46+ XNNPACK_ENABLE_AVXVNNI=OFF
47+ # Work around observed failure:
48+ # https://github.com/pytorch/executorch/pull/10362#issuecomment-2906391232
49+ -D
50+ XNNPACK_ENABLE_AVX512VNNIGFNI=OFF
51+ -D
52+ ENABLE_XNNPACK_WEIGHTS_CACHE=${EXECUTORCH_XNNPACK_ENABLE_WEIGHT_CACHE}
53+ -D
54+ ENABLE_XNNPACK_SHARED_WORKSPACE=${EXECUTORCH_XNNPACK_SHARED_WORKSPACE}
55+ -D
56+ XNNPACK_ENABLE_KLEIDIAI=${EXECUTORCH_XNNPACK_ENABLE_KLEIDI}
57+ -D
58+ CMAKE_INSTALL_PREFIX =<INSTALL_DIR>
59+ -D
60+ XNNPACK_BUILD_ALL_MICROKERNELS=OFF
61+ -D
62+ CMAKE_POSITION_INDEPENDENT_CODE =ON
3463)
35- set (XNNPACK_ENABLE_AVXVNNI
36- OFF
37- CACHE BOOL ""
38- )
39- # Work around observed failure: https://github.com/pytorch/executorch/pull/10362#issuecomment-2906391232
40- set (XNNPACK_ENABLE_AVX512VNNIGFNI
41- OFF
42- CACHE BOOL "" )
4364
44- if (EXECUTORCH_XNNPACK_ENABLE_KLEIDI)
45- set (XNNPACK_ENABLE_KLEIDIAI
46- ON
47- CACHE BOOL ""
48- )
49- else ()
50- set (XNNPACK_ENABLE_KLEIDIAI
51- OFF
52- CACHE BOOL ""
53- )
54- endif ()
65+ add_library (XNNPACK STATIC IMPORTED GLOBAL )
66+ # TODO: this probably doesn't work on Windows.
67+ set_property (TARGET XNNPACK PROPERTY IMPORTED_LOCATION ${XNNPACK_STATIC_LIB} )
5568
69+ add_dependencies (XNNPACK XNNPACKExternalProject)
5670
57- set (XNNPACK_BUILD_ALL_MICROKERNELS
58- OFF
59- CACHE BOOL ""
71+ add_library (xnnpack-microkernels-prod STATIC IMPORTED GLOBAL )
72+ set_property (
73+ TARGET xnnpack-microkernels-prod PROPERTY IMPORTED_LOCATION
74+ ${XNNPACK_MICROKERNELS_STATIC_LIB}
6075)
61- add_subdirectory ("${XNNPACK_SOURCE_DIR} " )
62- include_directories (SYSTEM ${XNNPACK_INCLUDE_DIR} )
63- list (APPEND xnnpack_third_party XNNPACK)
64- install (TARGETS xnnpack-microkernels-prod
65- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
66- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
67- PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
76+ add_dependencies (xnnpack-microkernels-prod XNNPACKExternalProject)
6877
78+ set_target_properties (
79+ XNNPACK PROPERTIES INTERFACE_LINK_LIBRARIES xnnpack-microkernels-prod
80+ )
81+
82+ install (DIRECTORY ${XNNPACK_INSTALL_DIR} / DESTINATION ${CMAKE_INSTALL_PREFIX} )
6983
7084if (EXECUTORCH_XNNPACK_ENABLE_KLEIDI)
71- if (TARGET kleidiai)
72- install (TARGETS kleidiai
73- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
74- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
75- PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
76- endif ()
85+ add_library (kleidiai SHARED IMPORTED )
86+ install (FILES ${KLEIDIAI_STATIC_LIB} PUBLIC_HEADER
87+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
88+ )
89+ set_property (
90+ TARGET kleidiai PROPERTY IMPORTED_LOCATION ${KLEIDIAI_STATIC_LIB}
91+ )
92+ set_property (
93+ TARGET XNNPACK
94+ APPEND
95+ PROPERTY INTERFACE_LINK_LIBRARIES kleidiai
96+ )
7797endif ()
78-
79- # Revert PIC Flag to what it originally was
80- set (CMAKE_POSITION_INDEPENDENT_CODE
81- ${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
82- )
0 commit comments