Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ OPTION(XNNPACK_BUILD_TESTS "Build XNNPACK unit tests" ON)
OPTION(XNNPACK_BUILD_ALL_MICROKERNELS "Builds all XNNPACK Microkernels" ON)
OPTION(XNNPACK_BUILD_BENCHMARKS "Build XNNPACK benchmarks" ON)
OPTION(XNNPACK_BUILD_WITH_LIBM "Build XNNPACK with libm, can turn off on Windows to avoid mutiple math functions issue." ON)
OPTION(XNNPACK_BUILD_YNNPACK "Build YNNPACK library" ON)
OPTION(XNNPACK_USE_SYSTEM_LIBS "Use system-provided dependency libraries" OFF)
OPTION(USE_GNU_SOURCE "Use _GNU_SOURCE macro" OFF)
IF(XNNPACK_BUILD_BENCHMARKS OR XNNPACK_BUILD_TESTS)
Expand Down Expand Up @@ -1352,3 +1353,8 @@ ENDIF()
IF(XNNPACK_BUILD_BENCHMARKS)
ADD_SUBDIRECTORY(bench)
ENDIF()

# ---[ YNNPACK
IF(XNNPACK_BUILD_YNNPACK)
ADD_SUBDIRECTORY(ynnpack)
ENDIF()
175 changes: 175 additions & 0 deletions ynnpack/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
# Copyright 2026 Google LLC
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

CMAKE_MINIMUM_REQUIRED(VERSION 3.15 FATAL_ERROR)

PROJECT(ynnpack C CXX)

INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/..")

SET(CMAKE_CXX_STANDARD 17)
SET(CMAKE_CXX_STANDARD_REQUIRED YES)
SET(CMAKE_CXX_EXTENSIONS NO)

IF(NOT MSVC)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
ENDIF()

# ---[ Options.
OPTION(YNNPACK_BUILD_TESTS "Build YNNPACK unit tests" ${XNNPACK_BUILD_TESTS})
OPTION(YNNPACK_BUILD_BENCHMARKS "Build YNNPACK benchmarks" ${XNNPACK_BUILD_BENCHMARKS})

IF(YNNPACK_BUILD_TESTS)
ENABLE_TESTING()
ENDIF()

# ---[ Architecture detection.
IF(NOT YNNPACK_TARGET_PROCESSOR)
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^i[3-7]86$")
SET(YNNPACK_TARGET_PROCESSOR "x86")
ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
SET(YNNPACK_TARGET_PROCESSOR "x86_64")
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]")
SET(YNNPACK_TARGET_PROCESSOR "arm")
ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
SET(YNNPACK_TARGET_PROCESSOR "arm64")
ELSE()
SET(YNNPACK_TARGET_PROCESSOR "generic")
ENDIF()
ENDIF()

MESSAGE(STATUS "YNNPACK target processor: ${YNNPACK_TARGET_PROCESSOR}")

# ---[ ISA Options.
SET(YNN_X86_DEFAULT OFF)
IF(YNNPACK_TARGET_PROCESSOR MATCHES "^x86")
SET(YNN_X86_DEFAULT ON)
ENDIF()

SET(YNN_ARM_DEFAULT OFF)
IF(YNNPACK_TARGET_PROCESSOR MATCHES "^arm")
SET(YNN_ARM_DEFAULT ON)
ENDIF()

SET(YNN_ARM64_DEFAULT OFF)
IF(YNNPACK_TARGET_PROCESSOR STREQUAL "arm64")
SET(YNN_ARM64_DEFAULT ON)
ENDIF()

# x86
OPTION(YNN_ENABLE_X86_SSE "Enable x86 SSE" ${YNN_X86_DEFAULT})
OPTION(YNN_ENABLE_X86_SSE2 "Enable x86 SSE2" ${YNN_ENABLE_X86_SSE})
OPTION(YNN_ENABLE_X86_SSSE3 "Enable x86 SSSE3" ${YNN_ENABLE_X86_SSE})
OPTION(YNN_ENABLE_X86_SSE41 "Enable x86 SSE4.1" ${YNN_ENABLE_X86_SSE})
OPTION(YNN_ENABLE_X86_AVX "Enable x86 AVX" ${YNN_ENABLE_X86_SSE})
OPTION(YNN_ENABLE_X86_F16C "Enable x86 F16C" ${YNN_ENABLE_X86_AVX})
OPTION(YNN_ENABLE_X86_AVX2 "Enable x86 AVX2" ${YNN_ENABLE_X86_AVX})
OPTION(YNN_ENABLE_X86_FMA3 "Enable x86 FMA3" ${YNN_ENABLE_X86_AVX})
OPTION(YNN_ENABLE_X86_AVX512 "Enable x86 AVX512" ${YNN_ENABLE_X86_AVX})

IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND YNN_ENABLE_X86_AVX512)
SET(YNN_X86_AVX512BF16_DEFAULT ON)
ELSE()
SET(YNN_X86_AVX512BF16_DEFAULT OFF)
ENDIF()
OPTION(YNN_ENABLE_X86_AVX512BF16 "Enable x86 AVX512BF16" ${YNN_X86_AVX512BF16_DEFAULT})
OPTION(YNN_ENABLE_X86_AVX512FP16 "Enable x86 AVX512FP16" ${YNN_ENABLE_X86_AVX512})
OPTION(YNN_ENABLE_X86_AVX512VNNI "Enable x86 AVX512VNNI" ${YNN_ENABLE_X86_AVX512})

SET(YNN_X86_AMX_DEFAULT OFF)
IF(YNNPACK_TARGET_PROCESSOR STREQUAL "x86_64")
SET(YNN_X86_AMX_DEFAULT ON)
ENDIF()
OPTION(YNN_ENABLE_X86_AMX "Enable x86 AMX" ${YNN_X86_AMX_DEFAULT})
OPTION(YNN_ENABLE_X86_AMXBF16 "Enable x86 AMXBF16" ${YNN_ENABLE_X86_AMX})
OPTION(YNN_ENABLE_X86_AMXFP16 "Enable x86 AMXFP16" ${YNN_ENABLE_X86_AMX})
OPTION(YNN_ENABLE_X86_AMXINT8 "Enable x86 AMXINT8" ${YNN_ENABLE_X86_AMX})

# Derived x86
IF(YNN_ENABLE_X86_F16C AND YNN_ENABLE_X86_FMA3)
SET(YNN_X86_F16C_FMA3_DEFAULT ON)
ELSE()
SET(YNN_X86_F16C_FMA3_DEFAULT OFF)
ENDIF()
OPTION(YNN_ENABLE_X86_F16C_FMA3 "Enable x86 F16C+FMA3" ${YNN_X86_F16C_FMA3_DEFAULT})

IF(YNN_ENABLE_X86_AVX2 AND YNN_ENABLE_X86_FMA3)
SET(YNN_X86_AVX2_FMA3_DEFAULT ON)
ELSE()
SET(YNN_X86_AVX2_FMA3_DEFAULT OFF)
ENDIF()
OPTION(YNN_ENABLE_X86_AVX2_FMA3 "Enable x86 AVX2+FMA3" ${YNN_X86_AVX2_FMA3_DEFAULT})

# ARM
OPTION(YNN_ENABLE_ARM_NEON "Enable ARM NEON" ${YNN_ARM_DEFAULT})
OPTION(YNN_ENABLE_ARM_NEONDOT "Enable ARM NEONDOT" ${YNN_ENABLE_ARM_NEON})
OPTION(YNN_ENABLE_ARM_NEONFMA "Enable ARM NEONFMA" ${YNN_ENABLE_ARM_NEON})
OPTION(YNN_ENABLE_ARM_NEONFP16 "Enable ARM NEONFP16" ${YNN_ENABLE_ARM_NEON})
OPTION(YNN_ENABLE_ARM_NEONFP16ARITH "Enable ARM NEONFP16ARITH" ${YNN_ENABLE_ARM_NEON})
OPTION(YNN_ENABLE_ARM_NEONBF16 "Enable ARM NEONBF16" ${YNN_ENABLE_ARM_NEON})

OPTION(YNN_ENABLE_ARM64 "Enable ARM64" ${YNN_ARM64_DEFAULT})
OPTION(YNN_ENABLE_ARM64_NEONI8MM "Enable ARM64 NEONI8MM" ${YNN_ENABLE_ARM64})
OPTION(YNN_ENABLE_ARM64_NEON "Enable ARM64 NEON" ${YNN_ENABLE_ARM64})
OPTION(YNN_ENABLE_ARM64_SME "Enable ARM64 SME" ${YNN_ENABLE_ARM64})
OPTION(YNN_ENABLE_ARM64_SME2 "Enable ARM64 SME2" ${YNN_ENABLE_ARM64_SME})

IF(YNN_ENABLE_ARM64 AND NOT APPLE)
SET(YNN_ARM64_SVE_DEFAULT ON)
ELSE()
SET(YNN_ARM64_SVE_DEFAULT OFF)
ENDIF()
OPTION(YNN_ENABLE_ARM64_SVE "Enable ARM64 SVE" ${YNN_ARM64_SVE_DEFAULT})

# Others
SET(YNN_HEXAGON_DEFAULT OFF)
IF(YNNPACK_TARGET_PROCESSOR STREQUAL "hexagon")
SET(YNN_HEXAGON_DEFAULT ON)
ENDIF()
OPTION(YNN_ENABLE_HVX "Enable Hexagon HVX" ${YNN_HEXAGON_DEFAULT})

SET(YNN_WASM_DEFAULT OFF)
IF(YNNPACK_TARGET_PROCESSOR STREQUAL "wasm")
SET(YNN_WASM_DEFAULT ON)
ENDIF()
OPTION(YNN_ENABLE_WASM_SIMD128 "Enable Wasm SIMD128" ${YNN_WASM_DEFAULT})

OPTION(YNN_ENABLE_CPUINFO "Enable cpuinfo" ON)

# ---[ Dependencies.
IF(NOT TARGET slinky_base)
IF(XNNPACK_USE_SYSTEM_LIBS)
FIND_PACKAGE(slinky REQUIRED)
ELSE()
SET(SLINKY_ENABLE_TESTS OFF CACHE BOOL "" FORCE)
IF(NOT DEFINED SLINKY_SOURCE_DIR)
MESSAGE(STATUS "Downloading slinky to ${CMAKE_BINARY_DIR}/slinky-source (define SLINKY_SOURCE_DIR to avoid it)")
CONFIGURE_FILE(cmake/DownloadSlinky.cmake "${CMAKE_BINARY_DIR}/slinky-download/CMakeLists.txt")
EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/slinky-download")
EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build .
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/slinky-download")
SET(SLINKY_SOURCE_DIR "${CMAKE_BINARY_DIR}/slinky-source" CACHE STRING "slinky source directory")
ENDIF()
# Temporarily disable testing while adding slinky to avoid including its tests.
INCLUDE_DIRECTORIES("${SLINKY_SOURCE_DIR}")
ADD_SUBDIRECTORY("${SLINKY_SOURCE_DIR}" "${CMAKE_BINARY_DIR}/slinky")
ENDIF()
ENDIF()

# ---[ Includes.
INCLUDE_DIRECTORIES(include)
INCLUDE_DIRECTORIES(.)

# ---[ Subdirectories.
ADD_SUBDIRECTORY(base)
ADD_SUBDIRECTORY(kernels)
ADD_SUBDIRECTORY(subgraph)
ADD_SUBDIRECTORY(xnnpack)

# ---[ Main library.
ADD_LIBRARY(ynnpack INTERFACE)
TARGET_INCLUDE_DIRECTORIES(ynnpack INTERFACE include)
TARGET_LINK_LIBRARIES(ynnpack INTERFACE ynnpack_subgraph)
91 changes: 91 additions & 0 deletions ynnpack/base/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Copyright 2026 Google LLC
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

# ---[ Options.
SET(YNN_LOG_LEVEL "warning" CACHE STRING "Log level (error, warning, info, debug, verbose)")
SET_PROPERTY(CACHE YNN_LOG_LEVEL PROPERTY STRINGS error warning info debug verbose)

# ---[ Log library.
ADD_LIBRARY(ynnpack_log INTERFACE)
TARGET_COMPILE_DEFINITIONS(ynnpack_log INTERFACE YNN_LOG_LEVEL=YNN_LOG_LEVEL_${YNN_LOG_LEVEL})
TARGET_LINK_LIBRARIES(ynnpack_log INTERFACE slinky_base)

# ---[ Base library.
ADD_LIBRARY(ynnpack_base STATIC
arch.cc
to_string.cc
type.cc
)

TARGET_INCLUDE_DIRECTORIES(ynnpack_base PUBLIC .)
TARGET_LINK_LIBRARIES(ynnpack_base PUBLIC ynnpack_log slinky_base)

IF(YNN_ENABLE_CPUINFO)
# Check if cpuinfo target exists (it should if XNNPACK is set up correctly)
IF(TARGET cpuinfo)
TARGET_LINK_LIBRARIES(ynnpack_base PUBLIC cpuinfo)
TARGET_COMPILE_DEFINITIONS(ynnpack_base PUBLIC YNN_ENABLE_CPUINFO)
ENDIF()
ENDIF()

# Architecture-specific defines.
IF(YNNPACK_TARGET_PROCESSOR STREQUAL "x86")
TARGET_COMPILE_DEFINITIONS(ynnpack_base PUBLIC YNN_ARCH_X86 YNN_ARCH_X86_32)
ELSEIF(YNNPACK_TARGET_PROCESSOR STREQUAL "x86_64")
TARGET_COMPILE_DEFINITIONS(ynnpack_base PUBLIC YNN_ARCH_X86 YNN_ARCH_X86_64)
ELSEIF(YNNPACK_TARGET_PROCESSOR STREQUAL "arm")
TARGET_COMPILE_DEFINITIONS(ynnpack_base PUBLIC YNN_ARCH_ARM YNN_ARCH_ARM32)
ELSEIF(YNNPACK_TARGET_PROCESSOR STREQUAL "arm64")
TARGET_COMPILE_DEFINITIONS(ynnpack_base PUBLIC YNN_ARCH_ARM YNN_ARCH_ARM64)
ELSEIF(YNNPACK_TARGET_PROCESSOR STREQUAL "hexagon")
TARGET_COMPILE_DEFINITIONS(ynnpack_base PUBLIC YNN_ARCH_HEXAGON)
ELSEIF(YNNPACK_TARGET_PROCESSOR STREQUAL "wasm")
TARGET_COMPILE_DEFINITIONS(ynnpack_base PUBLIC YNN_ARCH_WASM)
ENDIF()

MACRO(YNN_MAP_OPTION OPTION DEFINE)
IF(${OPTION})
TARGET_COMPILE_DEFINITIONS(ynnpack_base PUBLIC ${DEFINE})
ENDIF()
ENDMACRO()

# x86 mapping
YNN_MAP_OPTION(YNN_ENABLE_X86_SSE2 YNN_ARCH_X86_SSE2)
YNN_MAP_OPTION(YNN_ENABLE_X86_SSSE3 YNN_ARCH_X86_SSSE3)
YNN_MAP_OPTION(YNN_ENABLE_X86_SSE41 YNN_ARCH_X86_SSE41)
YNN_MAP_OPTION(YNN_ENABLE_X86_AVX YNN_ARCH_X86_AVX)
YNN_MAP_OPTION(YNN_ENABLE_X86_F16C YNN_ARCH_X86_F16C)
YNN_MAP_OPTION(YNN_ENABLE_X86_F16C_FMA3 YNN_ARCH_X86_F16C_FMA3)
YNN_MAP_OPTION(YNN_ENABLE_X86_AVX2 YNN_ARCH_X86_AVX2)
YNN_MAP_OPTION(YNN_ENABLE_X86_FMA3 YNN_ARCH_X86_FMA3)
YNN_MAP_OPTION(YNN_ENABLE_X86_AVX2_FMA3 YNN_ARCH_X86_AVX2_FMA3)
YNN_MAP_OPTION(YNN_ENABLE_X86_AVX512 YNN_ARCH_X86_AVX512)
YNN_MAP_OPTION(YNN_ENABLE_X86_AVX512BF16 YNN_ARCH_X86_AVX512BF16)
YNN_MAP_OPTION(YNN_ENABLE_X86_AVX512FP16 YNN_ARCH_X86_AVX512FP16)
YNN_MAP_OPTION(YNN_ENABLE_X86_AVX512VNNI YNN_ARCH_X86_AVX512VNNI)
YNN_MAP_OPTION(YNN_ENABLE_X86_AMXBF16 YNN_ARCH_X86_AMXBF16)
YNN_MAP_OPTION(YNN_ENABLE_X86_AMXFP16 YNN_ARCH_X86_AMXFP16)
YNN_MAP_OPTION(YNN_ENABLE_X86_AMXINT8 YNN_ARCH_X86_AMXINT8)

# ARM mapping
YNN_MAP_OPTION(YNN_ENABLE_ARM_NEON YNN_ARCH_ARM_NEON)
YNN_MAP_OPTION(YNN_ENABLE_ARM_NEONDOT YNN_ARCH_ARM_NEONDOT)
YNN_MAP_OPTION(YNN_ENABLE_ARM_NEONFMA YNN_ARCH_ARM_NEONFMA)
YNN_MAP_OPTION(YNN_ENABLE_ARM_NEONFP16 YNN_ARCH_ARM_NEONFP16)
YNN_MAP_OPTION(YNN_ENABLE_ARM_NEONFP16ARITH YNN_ARCH_ARM_NEONFP16ARITH)
YNN_MAP_OPTION(YNN_ENABLE_ARM_NEONBF16 YNN_ARCH_ARM_NEONBF16)
YNN_MAP_OPTION(YNN_ENABLE_ARM64_NEONI8MM YNN_ARCH_ARM64_NEONI8MM)
YNN_MAP_OPTION(YNN_ENABLE_ARM64_NEON YNN_ARCH_ARM64_NEON)
YNN_MAP_OPTION(YNN_ENABLE_ARM64_SME YNN_ARCH_ARM64_SME)
YNN_MAP_OPTION(YNN_ENABLE_ARM64_SME2 YNN_ARCH_ARM64_SME2)
YNN_MAP_OPTION(YNN_ENABLE_ARM64_SVE YNN_ARCH_ARM64_SVE)

# Others
YNN_MAP_OPTION(YNN_ENABLE_HVX YNN_ARCH_HVX)
YNN_MAP_OPTION(YNN_ENABLE_WASM_SIMD128 YNN_ARCH_WASM_SIMD128)

IF(YNNPACK_BUILD_TESTS)
ADD_SUBDIRECTORY(test)
ENDIF()
1 change: 1 addition & 0 deletions ynnpack/base/arch.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ namespace ynn {

#if defined(YNN_ARCH_X86_64) && defined(__linux__) && !defined(CHROMIUM)
#include <sys/syscall.h>
#include <sys/types.h>

#define XFEATURE_XTILEDATA 18
#define ARCH_REQ_XCOMP_PERM 0x1023
Expand Down
35 changes: 35 additions & 0 deletions ynnpack/base/test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Copyright 2026 Google LLC
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

ADD_LIBRARY(ynnpack_base_test_buffer INTERFACE)
TARGET_INCLUDE_DIRECTORIES(ynnpack_base_test_buffer INTERFACE .)

ADD_LIBRARY(ynnpack_base_test_tensor INTERFACE)
TARGET_INCLUDE_DIRECTORIES(ynnpack_base_test_tensor INTERFACE .)
TARGET_LINK_LIBRARIES(ynnpack_base_test_tensor INTERFACE ynnpack_base_test_buffer ynnpack_base)

ADD_LIBRARY(ynnpack_base_test_random INTERFACE)
TARGET_INCLUDE_DIRECTORIES(ynnpack_base_test_random INTERFACE .)
TARGET_LINK_LIBRARIES(ynnpack_base_test_random INTERFACE ynnpack ynnpack_base)

ADD_LIBRARY(ynnpack_base_test_util STATIC util.cc)
TARGET_INCLUDE_DIRECTORIES(ynnpack_base_test_util PUBLIC .)
TARGET_LINK_LIBRARIES(ynnpack_base_test_util PUBLIC ynnpack_base gtest)

ADD_LIBRARY(ynnpack_base_test_fuzz INTERFACE)
TARGET_INCLUDE_DIRECTORIES(ynnpack_base_test_fuzz INTERFACE .)
TARGET_LINK_LIBRARIES(ynnpack_base_test_fuzz INTERFACE ynnpack_base gtest)

ADD_EXECUTABLE(ynnpack_random_test random_test.cc)
TARGET_LINK_LIBRARIES(ynnpack_random_test ynnpack_base ynnpack_base_test_fuzz ynnpack_base_test_random gtest gtest_main)
ADD_TEST(NAME ynnpack_random_test COMMAND ynnpack_random_test)

ADD_EXECUTABLE(ynnpack_tensor_test tensor_test.cc)
TARGET_LINK_LIBRARIES(ynnpack_tensor_test ynnpack_base_test_fuzz ynnpack_base_test_tensor gmock gtest gtest_main)
ADD_TEST(NAME ynnpack_tensor_test COMMAND ynnpack_tensor_test)

ADD_EXECUTABLE(ynnpack_float_test float_test.cc)
TARGET_LINK_LIBRARIES(ynnpack_float_test ynnpack ynnpack_base ynnpack_base_test_fuzz ynnpack_base_test_random gtest gtest_main)
ADD_TEST(NAME ynnpack_float_test COMMAND ynnpack_float_test)
26 changes: 26 additions & 0 deletions ynnpack/cmake/DownloadSlinky.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Copyright 2026 Google LLC
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

CMAKE_MINIMUM_REQUIRED(VERSION 3.5 FATAL_ERROR)

PROJECT(slinky-download NONE)

# Set file timestamps to the time of extraction.
IF(POLICY CMP0135)
CMAKE_POLICY(SET CMP0135 NEW)
ENDIF()

INCLUDE(ExternalProject)
ExternalProject_Add(slinky
URL https://github.com/dsharlet/slinky/archive/b6b9cdfba51ad17959a8314f338e2931c55f74d6.zip
URL_HASH SHA256=71584e401c60a576cc934353d5d437b49b032dd315820fd810bb44629acff2bf
SOURCE_DIR "${CMAKE_BINARY_DIR}/slinky-source"
BINARY_DIR "${CMAKE_BINARY_DIR}/slinky"
CONFIGURE_COMMAND ""
PATCH_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
12 changes: 12 additions & 0 deletions ynnpack/kernels/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Copyright 2026 Google LLC
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

ADD_SUBDIRECTORY(binary)
ADD_SUBDIRECTORY(dot)
ADD_SUBDIRECTORY(lut)
ADD_SUBDIRECTORY(reduce)
ADD_SUBDIRECTORY(ternary)
ADD_SUBDIRECTORY(transpose)
ADD_SUBDIRECTORY(unary)
Loading
Loading