From 54fbafb8bd1a3548c3b8d6e679c43e1400751946 Mon Sep 17 00:00:00 2001
From: max <maksim.levental@gmail.com>
Date: Sat, 24 Aug 2024 21:07:06 -0500
Subject: [PATCH] [wip] macos

---
 .github/workflows/ci-macos.yml                | 93 +++++++++++++++++++
 build_tools/ci/build_test_cpp.sh              | 13 ++-
 .../plugins/target/AMD-AIE/air/CMakeLists.txt |  1 +
 iree_compiler_plugin.cmake                    |  2 +-
 .../aie_runtime/iree_aie_configure.cc         | 16 ++--
 5 files changed, 112 insertions(+), 13 deletions(-)
 create mode 100644 .github/workflows/ci-macos.yml

diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml
new file mode 100644
index 000000000..f34ece2f4
--- /dev/null
+++ b/.github/workflows/ci-macos.yml
@@ -0,0 +1,93 @@
+name: CI MacOS
+
+on:
+  workflow_call:
+  workflow_dispatch:
+  pull_request:
+  merge_group:
+  push:
+    branches:
+      - main
+
+concurrency:
+  # A PR number if a pull request and otherwise the commit hash. This cancels
+  # queued and in-progress runs for the same PR (presubmit) or commit
+  # (postsubmit).
+  group: ci-build-test-cpp-macos-${{ github.event.number || github.sha }}
+  cancel-in-progress: true
+
+jobs:
+  build_and_ctest:
+    name: Build and Test (${{ matrix.runs-on }}, ASSERTIONS)
+    runs-on: ${{ matrix.runs-on }}
+    strategy:
+      fail-fast: false
+      matrix:
+        runs-on: [macos-12, macos-14]
+    env:
+      CACHE_DIR: ${{ github.workspace }}/.container-cache
+    steps:
+      - name: Set unified TZ
+        uses: szenius/set-timezone@v2.0
+        with:
+          # this is an arbitrary choice
+          timezoneLinux: "Asia/Singapore"
+          timezoneMacos: "Asia/Singapore"
+          timezoneWindows: "Singapore Standard Time"
+
+      - name: "Checking out repository"
+        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
+        with:
+          submodules: recursive
+
+      - uses: actions/setup-python@v4
+        with:
+          python-version: '3.11'
+
+      - name: Install deps
+        run: |
+          brew install ccache ninja
+
+      - name: Sync source deps
+        run: |
+          python ./sync_deps.py
+
+      - name: Python deps
+        run: |
+          pip install "numpy<2" pyyaml "pybind11[global]==2.10.3" nanobind
+
+      - name: Enable cache
+        uses: actions/cache/restore@v3
+        with:
+          path: ${{ env.CACHE_DIR }}
+          # without datetime stamps you'll get collisions for the cache warming runs
+          # ("Failed to save: Unable to reserve cache with key ..., another job may be creating this cache.")
+          key: ${{ matrix.runs-on }}-build-test-cpp-asserts-v1-${{ github.sha }}-${{ github.event.repository.updated_at }}
+          restore-keys: ${{ matrix.runs-on }}-build-test-cpp-
+
+      - name: Build packages
+        run: |
+          export cache_dir="${{ env.CACHE_DIR }}"
+          bash build_tools/ci/build_test_cpp.sh
+
+      - name: Create artifacts
+        if: ${{ !cancelled() }}
+        run: |
+          rm -f iree-install/bin/clang*
+          rm -f iree-install/bin/llvm-link*
+          tar cf iree-dist-${{ matrix.runs-on }}.tar -C iree-install . -C ../iree-build tools/testing/e2e/iree-e2e-matmul-test.exe
+
+      - name: Upload artifacts
+        uses: actions/upload-artifact@v4
+        if: ${{ !cancelled() }}
+        with:
+          name: ${{ matrix.runs-on }}_release_packages
+          path: iree-dist-${{ matrix.runs-on }}.tar
+          if-no-files-found: warn
+
+      - name: Save cache
+        uses: actions/cache/save@v3
+        if: ${{ !cancelled() }}
+        with:
+          path: ${{ env.CACHE_DIR }}
+          key: ${{ matrix.runs-on }}-build-test-cpp-asserts-v1-${{ github.sha }}-${{ github.event.repository.updated_at }}
diff --git a/build_tools/ci/build_test_cpp.sh b/build_tools/ci/build_test_cpp.sh
index ad6b4e460..cbf9709b8 100644
--- a/build_tools/ci/build_test_cpp.sh
+++ b/build_tools/ci/build_test_cpp.sh
@@ -56,10 +56,12 @@ echo '{
 }' > $iree_dir/CMakeUserPresets.json 
 
 cd $iree_dir
-cmake -S "$iree_dir" -B "$build_dir" \
+CMAKE_ARGS="\
+  -S $iree_dir \
+  -B $build_dir \
   -GNinja \
   -DCMAKE_BUILD_TYPE=Release \
-  -DCMAKE_INSTALL_PREFIX="$install_dir" \
+  -DCMAKE_INSTALL_PREFIX=$install_dir \
   -DCMAKE_INSTALL_LIBDIR=lib \
   -DIREE_ENABLE_ASSERTIONS=ON \
   -DIREE_BUILD_SAMPLES=OFF \
@@ -74,8 +76,11 @@ cmake -S "$iree_dir" -B "$build_dir" \
   -DIREE_INPUT_STABLEHLO=OFF \
   -DIREE_INPUT_TORCH=OFF \
   -DCMAKE_OBJECT_PATH_MAX=4096 \
-  -DIREE_CMAKE_PLUGIN_PATHS=../iree-amd-aie \
-  -DIREE_EXTERNAL_HAL_DRIVERS=xrt
+  -DIREE_CMAKE_PLUGIN_PATHS=$PWD/../iree-amd-aie"
+
+if [[ "$OSTYPE" != "darwin"* ]]; then
+  CMAKE_ARGS="$CMAKE_ARGS -DIREE_EXTERNAL_HAL_DRIVERS=xrt"
+fi
 
 echo "Building all"
 echo "------------"
diff --git a/compiler/plugins/target/AMD-AIE/air/CMakeLists.txt b/compiler/plugins/target/AMD-AIE/air/CMakeLists.txt
index 8d8799d49..764dc66cd 100644
--- a/compiler/plugins/target/AMD-AIE/air/CMakeLists.txt
+++ b/compiler/plugins/target/AMD-AIE/air/CMakeLists.txt
@@ -164,6 +164,7 @@ iree_cc_library(
     MLIRTransforms
 )
 
+include(iree_aie_utils)
 replace_string_in_file(
   ${IREE_MLIR_AIR_SOURCE_DIR}/include/air/Conversion/PassDetail.h
   "aie/Dialect/AIEX/IR" "aie")
diff --git a/iree_compiler_plugin.cmake b/iree_compiler_plugin.cmake
index a14b0c094..944829580 100644
--- a/iree_compiler_plugin.cmake
+++ b/iree_compiler_plugin.cmake
@@ -18,8 +18,8 @@ endif()
 
 if(IREE_AMD_AIE_ENABLE_XRT_DRIVER)
   include(iree_aie_xrt)
-  include(iree_aie_bootgen)
 endif()
+include(iree_aie_bootgen)
 
 add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/compiler/plugins/target/AMD-AIE target/AMD-AIE)
 add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/tests/samples AMD-AIE/tests/samples)
diff --git a/runtime/src/iree-amd-aie/aie_runtime/iree_aie_configure.cc b/runtime/src/iree-amd-aie/aie_runtime/iree_aie_configure.cc
index 4aba9c188..44773bfdf 100644
--- a/runtime/src/iree-amd-aie/aie_runtime/iree_aie_configure.cc
+++ b/runtime/src/iree-amd-aie/aie_runtime/iree_aie_configure.cc
@@ -64,12 +64,12 @@ LogicalResult configureDMABD(
   if (deviceModel.isShimNOCTile(tileLoc.col, tileLoc.row)) {
     // TODO(max): revisit these values
     // write them out like this so they show up with names in debug prints
-    size_t smid = 0;
-    size_t burstLen = 16;  // (10):BLEN=16 (256Byte) (corresponds to
-                           // 0x800000000 from target)
-    size_t qOs = 0;
-    size_t cache = 0;
-    size_t secure = 0;
+    uint8_t smid = 0;
+    uint8_t burstLen = 16;  // (10):BLEN=16 (256Byte) (corresponds to
+                            // 0x800000000 from target)
+    uint8_t qOs = 0;
+    uint8_t cache = 0;
+    uint8_t secure = 0;
     TRY_XAIE_API_LOGICAL_RESULT(XAie_DmaSetAxi, &dmaDesc, smid, burstLen, qOs,
                                 cache, secure);
   }
@@ -347,8 +347,8 @@ LogicalResult coreEnable(const AMDAIEDeviceModel &deviceModel,
   return success();
 }
 
-void dmaUpdateBdAddr(const AMDAIEDeviceModel &deviceModel, int col, int row,
-                     size_t addr, size_t bdId) {
+void dmaUpdateBdAddr(const AMDAIEDeviceModel &deviceModel, uint8_t col,
+                     uint8_t row, uint8_t addr, uint8_t bdId) {
   auto tileLoc = XAie_TileLoc(col, row);
   auto devInst = const_cast<XAie_DevInst *>(&deviceModel.devInst);
   TRY_XAIE_API_FATAL_ERROR(XAie_DmaUpdateBdAddr, devInst, tileLoc, addr, bdId);