@@ -10,73 +10,88 @@ set(THIRD_PARTY_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/third-party")
10
10
11
11
# --- XNNPACK
12
12
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
-
21
13
set (XNNPACK_SOURCE_DIR "${THIRD_PARTY_ROOT} /XNNPACK" )
22
14
set (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"
26
21
)
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"
30
24
)
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
34
63
)
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 "" )
43
64
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} )
55
68
69
+ add_dependencies (XNNPACK XNNPACKExternalProject )
56
70
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}
60
75
)
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 )
68
77
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} )
69
83
70
84
if (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
+ )
77
97
endif ()
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