diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fc6fb1c3f1..ceac92633c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -62,6 +62,7 @@ jobs: -DCMAKE_BUILD_TYPE=${{ matrix.build.build_type }} \ -DTTMLIR_ENABLE_RUNTIME=${{ matrix.build.enable_runtime }} \ -DTTMLIR_ENABLE_RUNTIME_TESTS=${{ matrix.build.enable_runtime }} \ + -DTTMLIR_ENABLE_ONNX_MLIR=ON \ -S ${{ github.workspace }} - name: Build diff --git a/CMakeLists.txt b/CMakeLists.txt index 374a31d442..00c7765bb3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,7 @@ if (NOT DEFINED ENV{TTMLIR_ENV_ACTIVATED}) endif() option(TT_RUNTIME_ENABLE_PERF_TRACE "Enable performance mode" OFF) +option(TTMLIR_ENABLE_ONNX_MLIR "Enable ONNX MLIR support" OFF) set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON) diff --git a/env/CMakeLists.txt b/env/CMakeLists.txt index f19b60ee47..ba10f513af 100644 --- a/env/CMakeLists.txt +++ b/env/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.20.0) project(ttmlir-toolchain LANGUAGES CXX C) set(FLATBUFFERS_VERSION "fb9afbafc7dfe226b9db54d4923bfb8839635274") -set(LLVM_PROJECT_VERSION "9ddfe62f5c11e3f65f444209f514029ded2d58b9") +set(LLVM_PROJECT_VERSION "0913547d0e3939cc420e88ecd037240f33736820") include(ExternalProject) @@ -44,7 +44,9 @@ ExternalProject_Add( -DPython3_FIND_VIRTUALENV=ONLY -DPython3_EXECUTABLE=${TTMLIR_TOOLCHAIN_DIR}/venv/bin/python -DCMAKE_INSTALL_PREFIX=${TTMLIR_TOOLCHAIN_DIR} - -DLLVM_ENABLE_PROJECTS=mlir + -DLLVM_ENABLE_PROJECTS=mlir;clang;openmp + -DLLVM_TARGETS_TO_BUILD=host + -DLLVM_ENABLE_RTTI=ON -DLLVM_INSTALL_UTILS=ON # Build shared libraries # ====================== diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 7d9493899a..f27cdb970b 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -1,73 +1,7 @@ include(ExternalProject) -if ("$ENV{ARCH_NAME}" STREQUAL "grayskull") - set(ARCH_NAME "grayskull") - set(ARCH_EXTRA_DIR "grayskull") -elseif ("$ENV{ARCH_NAME}" STREQUAL "wormhole_b0") - set(ARCH_NAME "wormhole") - set(ARCH_EXTRA_DIR "wormhole/wormhole_b0_defines") -elseif ("$ENV{ARCH_NAME}" STREQUAL "blackhole") - set(ARCH_NAME "blackhole") - set(ARCH_EXTRA_DIR "blackhole") -else() - message(FATAL_ERROR "Unsupported ARCH_NAME: $ENV{ARCH_NAME}") -endif() +include(tt-metal.cmake) -if (TT_RUNTIME_ENABLE_PERF_TRACE) - add_compile_definitions(TRACY_ENABLE) - set(ENV{ENABLE_TRACY} "1") -else() - set(ENV{ENABLE_TRACY} "0") +if (TTMLIR_ENABLE_ONNX_MLIR) + include(onnx-mlir.cmake) endif() - -set(TTMETAL_INCLUDE_DIRS - ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/ttnn/cpp - ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal - ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal - ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/third_party/umd - ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/third_party/fmt - ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/hw/inc - ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/hw/inc/${ARCH_NAME} - ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/hw/inc/${ARCH_EXTRA_DIR} - ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/third_party/umd/src/firmware/riscv/${ARCH_NAME} - ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_eager - PARENT_SCOPE -) - -set(TTMETAL_LIBRARY_DIR ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal-build/lib) -set(TTNN_LIBRARY_PATH ${TTMETAL_LIBRARY_DIR}/_ttnn.so) -set(TTMETAL_LIBRARY_PATH ${TTMETAL_LIBRARY_DIR}/libtt_metal.so) -set(TTEAGER_LIBRARY_PATH ${TTMETAL_LIBRARY_DIR}/libtt_eager.so) - -set(TTMETAL_LIBRARY_DIR ${TTMETAL_LIBRARY_DIR} PARENT_SCOPE) -set(TTNN_LIBRARY_PATH ${TTNN_LIBRARY_PATH} PARENT_SCOPE) -set(TTMETAL_LIBRARY_PATH ${TTMETAL_LIBRARY_PATH} PARENT_SCOPE) -set(TTEAGER_LIBRARY_PATH ${TTEAGER_LIBRARY_PATH} PARENT_SCOPE) - - -ExternalProject_Add( - tt-metal - PREFIX ${TTMLIR_SOURCE_DIR}/third_party/tt-metal - CMAKE_GENERATOR Ninja - CMAKE_ARGS - -DCMAKE_BUILD_TYPE=Release - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} - -DTRACY_ENABLE=${TT_RUNTIME_ENABLE_PERF_TRACE} - GIT_REPOSITORY https://github.com/tenstorrent/tt-metal.git - GIT_TAG v0.49.0 - GIT_PROGRESS ON - BUILD_BYPRODUCTS ${TTNN_LIBRARY_PATH} ${TTMETAL_LIBRARY_PATH} ${TTEAGER_LIBRARY_PATH} -) - -set_target_properties(tt-metal PROPERTIES EXCLUDE_FROM_ALL TRUE) - -list(APPEND library_names TTNN_LIBRARY TTEAGER_LIBRARY TTMETAL_LIBRARY) -list(APPEND library_paths ${TTNN_LIBRARY_PATH} ${TTMETAL_LIBRARY_PATH} ${TTEAGER_LIBRARY_PATH}) - -foreach(lib_name lib_path IN ZIP_LISTS library_names library_paths) - add_library(${lib_name} SHARED IMPORTED GLOBAL) - set_target_properties(${lib_name} PROPERTIES EXCLUDE_FROM_ALL TRUE IMPORTED_LOCATION ${lib_path}) - add_dependencies(${lib_name} tt-metal) -endforeach() diff --git a/third_party/onnx-mlir.cmake b/third_party/onnx-mlir.cmake new file mode 100644 index 0000000000..64d9b14894 --- /dev/null +++ b/third_party/onnx-mlir.cmake @@ -0,0 +1,18 @@ +include(ExternalProject) + +set(ONNX_MLIR_VERSION "67ea9b55f3a55cf4e7f351c56ebf54fda7bbb365") + +ExternalProject_Add( + onnx-mlir + PREFIX ${TTMLIR_TOOLCHAIN_DIR} + CMAKE_GENERATOR Ninja + CMAKE_ARGS + -DCMAKE_CXX_COMPILER=/usr/bin/c++ + -DPython3_ROOT_DIR=$pythonLocation + -DMLIR_DIR=${TTMLIR_TOOLCHAIN_DIR}/llvm-project/build/lib/cmake/mlir + -DCMAKE_INSTALL_PREFIX=${TTMLIR_TOOLCHAIN_DIR} + -DONNX_MLIR_BUILD_TESTS=OFF + -DONNX_MLIR_ENABLE_JAVA=OFF + GIT_REPOSITORY https://github.com/onnx/onnx-mlir/ + GIT_TAG ${ONNX_MLIR_VERSION} +) diff --git a/third_party/tt-metal.cmake b/third_party/tt-metal.cmake new file mode 100644 index 0000000000..7d9493899a --- /dev/null +++ b/third_party/tt-metal.cmake @@ -0,0 +1,73 @@ +include(ExternalProject) + +if ("$ENV{ARCH_NAME}" STREQUAL "grayskull") + set(ARCH_NAME "grayskull") + set(ARCH_EXTRA_DIR "grayskull") +elseif ("$ENV{ARCH_NAME}" STREQUAL "wormhole_b0") + set(ARCH_NAME "wormhole") + set(ARCH_EXTRA_DIR "wormhole/wormhole_b0_defines") +elseif ("$ENV{ARCH_NAME}" STREQUAL "blackhole") + set(ARCH_NAME "blackhole") + set(ARCH_EXTRA_DIR "blackhole") +else() + message(FATAL_ERROR "Unsupported ARCH_NAME: $ENV{ARCH_NAME}") +endif() + +if (TT_RUNTIME_ENABLE_PERF_TRACE) + add_compile_definitions(TRACY_ENABLE) + set(ENV{ENABLE_TRACY} "1") +else() + set(ENV{ENABLE_TRACY} "0") +endif() + +set(TTMETAL_INCLUDE_DIRS + ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/ttnn/cpp + ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal + ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal + ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/third_party/umd + ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/third_party/fmt + ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/hw/inc + ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/hw/inc/${ARCH_NAME} + ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/hw/inc/${ARCH_EXTRA_DIR} + ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_metal/third_party/umd/src/firmware/riscv/${ARCH_NAME} + ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal/tt_eager + PARENT_SCOPE +) + +set(TTMETAL_LIBRARY_DIR ${PROJECT_SOURCE_DIR}/third_party/tt-metal/src/tt-metal-build/lib) +set(TTNN_LIBRARY_PATH ${TTMETAL_LIBRARY_DIR}/_ttnn.so) +set(TTMETAL_LIBRARY_PATH ${TTMETAL_LIBRARY_DIR}/libtt_metal.so) +set(TTEAGER_LIBRARY_PATH ${TTMETAL_LIBRARY_DIR}/libtt_eager.so) + +set(TTMETAL_LIBRARY_DIR ${TTMETAL_LIBRARY_DIR} PARENT_SCOPE) +set(TTNN_LIBRARY_PATH ${TTNN_LIBRARY_PATH} PARENT_SCOPE) +set(TTMETAL_LIBRARY_PATH ${TTMETAL_LIBRARY_PATH} PARENT_SCOPE) +set(TTEAGER_LIBRARY_PATH ${TTEAGER_LIBRARY_PATH} PARENT_SCOPE) + + +ExternalProject_Add( + tt-metal + PREFIX ${TTMLIR_SOURCE_DIR}/third_party/tt-metal + CMAKE_GENERATOR Ninja + CMAKE_ARGS + -DCMAKE_BUILD_TYPE=Release + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} + -DTRACY_ENABLE=${TT_RUNTIME_ENABLE_PERF_TRACE} + GIT_REPOSITORY https://github.com/tenstorrent/tt-metal.git + GIT_TAG v0.49.0 + GIT_PROGRESS ON + BUILD_BYPRODUCTS ${TTNN_LIBRARY_PATH} ${TTMETAL_LIBRARY_PATH} ${TTEAGER_LIBRARY_PATH} +) + +set_target_properties(tt-metal PROPERTIES EXCLUDE_FROM_ALL TRUE) + +list(APPEND library_names TTNN_LIBRARY TTEAGER_LIBRARY TTMETAL_LIBRARY) +list(APPEND library_paths ${TTNN_LIBRARY_PATH} ${TTMETAL_LIBRARY_PATH} ${TTEAGER_LIBRARY_PATH}) + +foreach(lib_name lib_path IN ZIP_LISTS library_names library_paths) + add_library(${lib_name} SHARED IMPORTED GLOBAL) + set_target_properties(${lib_name} PROPERTIES EXCLUDE_FROM_ALL TRUE IMPORTED_LOCATION ${lib_path}) + add_dependencies(${lib_name} tt-metal) +endforeach()