@@ -10,71 +10,86 @@ 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 ""
26- )
27- set (XNNPACK_BUILD_BENCHMARKS
28- OFF
29- CACHE BOOL ""
15+
16+ include (ExternalProject)
17+ set (XNNPACK_STATIC_LIB "${CMAKE_CURRENT_BINARY_DIR} /XNNPACK/lib/libXNNPACK.a" )
18+ set (XNNPACK_MICROKERNELS_STATIC_LIB
19+ "${CMAKE_CURRENT_BINARY_DIR} /XNNPACK/lib/libxnnpack-microkernels-prod.a"
3020)
31- set (XNNPACK_BUILD_TESTS
32- OFF
33- CACHE BOOL ""
21+ ExternalProject_Add(
22+ XNNPACKExternalProject
23+ SOURCE_DIR ${XNNPACK_SOURCE_DIR}
24+ # XXX should we install to CMAKE_INSTALL_PREFIX instead? Review how we do it
25+ # with flatbuffers
26+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}
27+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} /XNNPACK
28+ INSTALL_BYPRODUCTS ${XNNPACK_STATIC_LIB} ${XNNPACK_MICROKERNELS_STATIC_LIB}
29+ CMAKE_ARGS
30+ -D
31+ XNNPACK_LIBRARY_TYPE=static
32+ -D
33+ XNNPACK_BUILD_BENCHMARKS=OFF
34+ -D
35+ XNNPACK_BUILD_TESTS=OFF
36+ -D
37+ XNNPACK_ENABLE_AVXVNNI=OFF
38+ # Work around observed failure:
39+ # https://github.com/pytorch/executorch/pull/10362#issuecomment-2906391232
40+ -D
41+ XNNPACK_ENABLE_AVX512VNNIGFNI=OFF
42+ -D
43+ ENABLE_XNNPACK_WEIGHTS_CACHE=${EXECUTORCH_XNNPACK_ENABLE_WEIGHT_CACHE}
44+ -D
45+ ENABLE_XNNPACK_SHARED_WORKSPACE=${EXECUTORCH_XNNPACK_SHARED_WORKSPACE}
46+ -D
47+ XNNPACK_ENABLE_KLEIDIAI=${EXECUTORCH_XNNPACK_ENABLE_KLEIDIAI}
48+ -D
49+ CMAKE_INSTALL_PREFIX =<INSTALL_DIR>
50+ -D
51+ XNNPACK_BUILD_ALL_MICROKERNELS=OFF
52+ -D
53+ CMAKE_POSITION_INDEPENDENT_CODE =ON
3454)
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 "" )
4355
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 ()
56+ # add_subdirectory("${XNNPACK_SOURCE_DIR}") include_directories(SYSTEM
57+ # ${XNNPACK_INCLUDE_DIR})
58+
59+ add_library (XNNPACK STATIC IMPORTED GLOBAL )
60+ # TODO: this probably doesn't work on Windows.
61+ set_property (TARGET XNNPACK PROPERTY IMPORTED_LOCATION ${XNNPACK_STATIC_LIB} )
5562
63+ add_dependencies (XNNPACK XNNPACKExternalProject)
5664
57- set (XNNPACK_BUILD_ALL_MICROKERNELS
58- OFF
59- CACHE BOOL ""
65+ add_library (xnnpack-microkernels-prod STATIC IMPORTED GLOBAL )
66+ set_property (
67+ TARGET xnnpack-microkernels-prod PROPERTY IMPORTED_LOCATION
68+ ${XNNPACK_MICROKERNELS_STATIC_LIB}
6069)
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} )
70+ add_dependencies (xnnpack-microkernels-prod XNNPACKExternalProject)
6871
72+ set_target_properties (
73+ XNNPACK PROPERTIES INTERFACE_LINK_LIBRARIES xnnpack-microkernels-prod
74+ )
75+
76+ install (FILES ${XNNPACK_MICROKERNELS_STATIC_LIB}
77+ DESTINATION ${CMAKE_INSTALL_LIBDIR}
78+ )
6979
7080if (EXECUTORCH_XNNPACK_ENABLE_KLEIDI)
71- install (TARGETS kleidiai
72- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
73- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
74- PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
81+ add_library (kleidiai SHARED IMPORTED )
82+ find_library (
83+ KLEIDIAI_LIBRARY kleidiai
84+ PATHS "${CMAKE_CURRENT_BINARY_DIR} /XNNPACK/kleidiai-source"
85+ )
86+ if (not KLEIDIAI_LIBRARY)
87+ message (FATAL_ERROR "Can't find KleidiAI" )
88+ endif ()
89+ install (
90+ TARGETS kleidiai
91+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
92+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
93+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
94+ )
7595endif ()
76-
77- # Revert PIC Flag to what it originally was
78- set (CMAKE_POSITION_INDEPENDENT_CODE
79- ${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
80- )
0 commit comments