aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt330
1 files changed, 330 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000..c67479ce41
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,330 @@
+# Copyright (c) 2023-2024 Arm Limited.
+#
+# SPDX-License-Identifier: MIT
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
+
+# ---------------------------------------------------------------------
+# Project ArmCompute
+
+list(APPEND CMAKE_MESSAGE_CONTEXT ArmCompute)
+project(
+ ArmCompute
+ VERSION 36.0.0
+ DESCRIPTION
+ "The Arm Compute Library is a collection of low-level machine learning functions optimized for Arm® Cortex®-A CPU and Arm® Mali™ GPU architectures"
+ LANGUAGES C CXX ASM)
+
+include(GNUInstallDirs)
+
+set(CMAKE_C_STANDARD 99)
+set(CMAKE_C_STANDARD_REQUIRED ON)
+set(CMAKE_C_EXTENSIONS OFF)
+
+set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Options.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Version.cmake)
+
+# Require at least gcc/g++ 11) CMAKE_CXX_COMPILER_VERSION OR
+if(CMAKE_C_COMPILER_VERSION VERSION_LESS 10.2 OR CMAKE_CXX_COMPILER_VERSION
+ VERSION_LESS 10.2)
+ message(
+ FATAL_ERROR "gcc and g++ version => 10.2 is required for building project!")
+endif()
+
+# ---------------------------------------------------------------------
+# Configuration
+
+set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -gdwarf-2 -DARM_COMPUTE_ASSERTS_ENABLED -DARM_COMPUTE_DEBUG_ENABLED")
+set(CMAKE_CXX_FLAGS_RELEASE "-O3")
+# Default to Release Build
+if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ set(CMAKE_BUILD_TYPE
+ "Release"
+ CACHE
+ STRING
+ "Choose build type, available options are: Debug, Release, RelWithDebInfo"
+ FORCE)
+endif()
+
+# ---------------------------------------------------------------------
+# Information
+
+message(STATUS "Arm Compute Library ${PROJECT_VERSION}")
+
+message(VERBOSE "-----------------------------------------------------")
+message(VERBOSE "Build information:")
+list(APPEND CMAKE_MESSAGE_INDENT " ")
+message(VERBOSE "Host system: ${CMAKE_SYSTEM_NAME}")
+message(VERBOSE "Host processor: ${CMAKE_SYSTEM_PROCESSOR}")
+message(VERBOSE "Build path: ${CMAKE_CURRENT_BINARY_DIR}")
+message(VERBOSE "Enable OpenCL acceleration: ${ENABLE_OPENCL}")
+message(VERBOSE "Enable CPU acceleration: ${ENABLE_NEON}")
+list(POP_BACK CMAKE_MESSAGE_INDENT)
+message(VERBOSE "-----------------------------------------------------")
+
+# ---------------------------------------------------------------------
+# Compile options and features
+
+set(COMMON_CXX_FLAGS
+ -Wall
+ -DARCH_ARM
+ -Wextra
+ -Wdisabled-optimization
+ -Wformat=2
+ -Winit-self
+ -Wstrict-overflow=2
+ -Wswitch-default
+ -Woverloaded-virtual
+ -Wformat-security
+ -Wctor-dtor-privacy
+ -Wsign-promo
+ -Weffc++
+ -Wno-overlength-strings
+ -Wno-ignored-attributes
+ -Wlogical-op
+ -Wnoexcept
+ -Wstrict-null-sentinel
+ -Wno-misleading-indentation)
+
+# Disable note popups on compiler ABI changes
+if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ add_compile_options("-Wno-psabi")
+endif()
+
+# Compile with -Werror if ARM_COMPUTE_WERROR set
+if(ARM_COMPUTE_WERROR)
+ add_compile_options("-Werror")
+endif()
+
+# Compile with -fno-exceptions flag and define ARM_COMPUTE_EXCEPTIONS_DISABLED
+# if ARM_COMPUTE_EXCEPTIONS not set
+if(NOT ARM_COMPUTE_EXCEPTIONS)
+ add_compile_options("-fno-exceptions")
+ add_definitions(-DARM_COMPUTE_EXCEPTIONS_DISABLED)
+endif()
+
+# Link OpenMP libraries if ARM_COMPUTE_OPENMP set
+if(ARM_COMPUTE_OPENMP)
+ find_package(OpenMP)
+ if(OpenMP_CXX_FOUND)
+ link_libraries(OpenMP::OpenMP_CXX)
+ add_definitions(-DARM_COMPUTE_OPENMP_SCHEDULER)
+ else()
+ message(FATAL_ERROR "OPENMP was set but no OpenMP library was found!")
+ endif()
+endif()
+
+# ---------------------------------------------------------------------
+# SVE Library
+
+add_library(arm_compute_sve "")
+target_compile_options(arm_compute_sve
+ PRIVATE "-march=armv8.2-a+sve+fp16+dotprod")
+target_compile_definitions(arm_compute_sve PRIVATE ARM_COMPUTE_ENABLE_BF16)
+target_compile_definitions(arm_compute_sve PRIVATE ENABLE_SVE)
+target_compile_definitions(arm_compute_sve PRIVATE ARM_COMPUTE_ENABLE_SVE)
+target_include_directories(
+ arm_compute_sve
+ PUBLIC $<INSTALL_INTERFACE:include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ PUBLIC src
+ src/core/NEON/kernels/arm_conv
+ src/core/NEON/kernels/arm_gemm
+ src/core/NEON/kernels/assembly
+ src/core/cpu/kernels/assembly
+ src/cpu/kernels/assembly
+ src/core/NEON/kernels/arm_gemm/merges)
+
+# ---------------------------------------------------------------------
+# SVE2 Library
+
+add_library(arm_compute_sve2 "")
+target_compile_options(arm_compute_sve2
+ PRIVATE "-march=armv8.6-a+sve2+fp16+dotprod")
+target_compile_definitions(arm_compute_sve2 PRIVATE ARM_COMPUTE_ENABLE_SVE2)
+target_compile_definitions(arm_compute_sve2 PRIVATE ARM_COMPUTE_ENABLE_BF16)
+target_compile_definitions(arm_compute_sve2 PRIVATE ENABLE_SVE)
+target_compile_definitions(arm_compute_sve2 PRIVATE ARM_COMPUTE_ENABLE_SVE)
+target_include_directories(
+ arm_compute_sve2
+ PUBLIC $<INSTALL_INTERFACE:include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ PUBLIC src
+ src/core/NEON/kernels/arm_conv
+ src/core/NEON/kernels/arm_gemm
+ src/core/NEON/kernels/assembly
+ src/core/cpu/kernels/assembly
+ src/cpu/kernels/assembly
+ src/core/NEON/kernels/arm_gemm/merges)
+
+# ---------------------------------------------------------------------
+# Core Library
+
+add_library(arm_compute "")
+target_compile_options(arm_compute PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+target_compile_definitions(arm_compute PRIVATE ARM_COMPUTE_ENABLE_BF16)
+target_compile_definitions(arm_compute PRIVATE ENABLE_SVE)
+target_compile_definitions(arm_compute PRIVATE ARM_COMPUTE_ENABLE_SVE)
+target_include_directories(
+ arm_compute
+ PUBLIC $<INSTALL_INTERFACE:include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE src
+ src/cpu/kernels/assembly
+ src/core/NEON/kernels/arm_gemm
+ src/core/NEON/kernels/assembly
+ src/core/NEON/kernels/convolution/common
+ src/core/NEON/kernels/arm_conv/depthwise
+ src/core/NEON/kernels/convolution/winograd)
+target_compile_options(arm_compute PUBLIC ${COMMON_CXX_FLAGS})
+
+add_library(ArmCompute::Core ALIAS arm_compute)
+target_link_libraries(
+ arm_compute PUBLIC arm_compute_sve arm_compute_sve2)
+
+# ---------------------------------------------------------------------
+# Graph Library
+
+add_library(arm_compute_graph "")
+target_compile_options(arm_compute_graph PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+target_compile_definitions(arm_compute_graph PRIVATE ENABLE_SVE)
+target_compile_definitions(arm_compute_graph PRIVATE ARM_COMPUTE_ENABLE_SVE)
+# add_subdirectory(src/graph)
+
+target_include_directories(
+ arm_compute_graph
+ PUBLIC $<INSTALL_INTERFACE:include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE src
+ src/cpu/kernels/assembly
+ src/core/NEON/kernels/arm_gemm
+ src/core/NEON/kernels/assembly
+ src/core/NEON/kernels/convolution/common
+ src/core/NEON/kernels/arm_conv/depthwise
+ src/core/NEON/kernels/convolution/winograd)
+target_compile_options(arm_compute_graph PUBLIC ${COMMON_CXX_FLAGS})
+
+add_library(ArmCompute::Graph ALIAS arm_compute_graph)
+
+# ---------------------------------------------------------------------
+# Library Target Sources
+add_subdirectory(src)
+
+if(ARM_COMPUTE_BUILD_TESTING)
+ # ---------------------------------------------------------------------
+ # Validation Framework Library
+ add_library(arm_compute_validation_framework "")
+ # target_compile_options(arm_compute_validation_framework PRIVATE
+ # "-march=armv8.2-a")
+ target_compile_options(arm_compute_validation_framework
+ PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+
+ add_subdirectory(tests)
+ target_include_directories(
+ arm_compute_validation_framework
+ PUBLIC $<INSTALL_INTERFACE:include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ ${CMAKE_CURRENT_SOURCE_DIR})
+ target_compile_options(arm_compute_validation_framework
+ PUBLIC ${COMMON_CXX_FLAGS})
+ target_link_libraries(
+ arm_compute_validation_framework
+ PUBLIC arm_compute arm_compute_graph)
+
+ # ---------------------------------------------------------------------
+ # Validation Binary
+
+ add_executable(arm_compute_validation "")
+ target_compile_options(arm_compute_validation PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+ if(ARM_COMPUTE_ENABLE_BF16_VALIDATION)
+ target_compile_definitions(arm_compute_validation PRIVATE ARM_COMPUTE_ENABLE_BF16)
+ endif()
+ if(ARM_COMPUTE_ENABLE_SVE_VALIDATION)
+ target_compile_definitions(arm_compute_validation PRIVATE ENABLE_SVE)
+ target_compile_definitions(arm_compute_validation PRIVATE ARM_COMPUTE_ENABLE_SVE)
+ endif()
+ add_subdirectory(tests/validation)
+ target_compile_options(arm_compute_validation PUBLIC ${COMMON_CXX_FLAGS})
+ set_target_properties(
+ arm_compute_validation PROPERTIES RUNTIME_OUTPUT_DIRECTORY
+ "${CMAKE_BINARY_DIR}/validation")
+ target_link_libraries(
+ arm_compute_validation
+ PUBLIC arm_compute arm_compute_graph arm_compute_validation_framework
+ arm_compute_sve)
+ target_link_directories(arm_compute_validation PUBLIC tests)
+
+ # ---------------------------------------------------------------------
+ # Benchmark Binary
+
+ add_executable(arm_compute_benchmark)
+ target_compile_options(arm_compute_benchmark PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+
+ add_subdirectory(tests/benchmark)
+ target_compile_options(arm_compute_benchmark PUBLIC ${COMMON_CXX_FLAGS})
+ set_target_properties(
+ arm_compute_benchmark PROPERTIES RUNTIME_OUTPUT_DIRECTORY
+ "${CMAKE_BINARY_DIR}/validation")
+ target_link_libraries(
+ arm_compute_benchmark PUBLIC arm_compute arm_compute_graph
+ arm_compute_validation_framework)
+
+endif() # ARM_COMPUTE_BUILD_TESTING
+# ---------------------------------------------------------------------
+# Examples Binaries
+
+if(ARM_COMPUTE_BUILD_EXAMPLES)
+
+ add_subdirectory(examples)
+
+ # Graph Examples
+ foreach(test_name ${EXAMPLE_GRAPH_NAMES})
+ add_executable(
+ ${test_name} "examples/${test_name}.cpp" utils/Utils.cpp
+ utils/GraphUtils.cpp utils/CommonGraphOptions.cpp)
+ target_compile_options(${test_name} PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+ set_target_properties(
+ ${test_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
+ "${CMAKE_BINARY_DIR}/examples")
+ target_link_libraries(${test_name} PUBLIC arm_compute
+ arm_compute_graph arm_compute_sve)
+ endforeach()
+
+ # NEON Examples
+ foreach(test_name ${EXAMPLE_NEON_NAMES})
+ add_executable(${test_name} "examples/${test_name}.cpp" utils/Utils.cpp)
+ target_compile_options(${test_name} PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+ set_target_properties(
+ ${test_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
+ "${CMAKE_BINARY_DIR}/examples")
+ target_link_libraries(${test_name} PUBLIC arm_compute)
+ endforeach()
+
+endif() # ARM_COMPUTE_BUILD_EXAMPLES