|
| 1 | +include_guard(GLOBAL) |
| 2 | + |
| 3 | +set(_CXLMEMSIM_SLUG_DEFAULT_ROOT "") |
| 4 | +get_filename_component(_CXLMEMSIM_SLUG_SIBLING_ROOT |
| 5 | + "${CMAKE_CURRENT_LIST_DIR}/../../cxltime" ABSOLUTE) |
| 6 | +if(EXISTS "${_CXLMEMSIM_SLUG_SIBLING_ROOT}/CMakeLists.txt") |
| 7 | + set(_CXLMEMSIM_SLUG_DEFAULT_ROOT "${_CXLMEMSIM_SLUG_SIBLING_ROOT}") |
| 8 | +endif() |
| 9 | + |
| 10 | +set(CXLMEMSIM_CXLTIME_ROOT "${_CXLMEMSIM_SLUG_DEFAULT_ROOT}" CACHE PATH |
| 11 | + "Path to the cxltime checkout that contains tools/slug_allocator") |
| 12 | + |
| 13 | +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") |
| 14 | + set(_CXLMEMSIM_SLUG_BUILD_NAME build-mac-slug) |
| 15 | + set(_CXLMEMSIM_SLUG_DYLIB_SUFFIX dylib) |
| 16 | +else() |
| 17 | + set(_CXLMEMSIM_SLUG_BUILD_NAME build-slug) |
| 18 | + set(_CXLMEMSIM_SLUG_DYLIB_SUFFIX so) |
| 19 | +endif() |
| 20 | + |
| 21 | +if(CXLMEMSIM_CXLTIME_ROOT) |
| 22 | + get_filename_component(_CXLMEMSIM_SLUG_DEFAULT_BUILD |
| 23 | + "${CXLMEMSIM_CXLTIME_ROOT}/${_CXLMEMSIM_SLUG_BUILD_NAME}" ABSOLUTE) |
| 24 | +else() |
| 25 | + set(_CXLMEMSIM_SLUG_DEFAULT_BUILD "") |
| 26 | +endif() |
| 27 | + |
| 28 | +set(CXLMEMSIM_SLUG_BUILD_DIR "${_CXLMEMSIM_SLUG_DEFAULT_BUILD}" CACHE PATH |
| 29 | + "Build directory for cxltime SlugAllocator artifacts") |
| 30 | + |
| 31 | +set(_CXLMEMSIM_SLUG_DEFAULT_LLVM_DIR "") |
| 32 | +foreach(_CXLMEMSIM_LLVM_CANDIDATE |
| 33 | + /opt/homebrew/opt/llvm@21/lib/cmake/llvm |
| 34 | + /usr/local/opt/llvm@21/lib/cmake/llvm |
| 35 | + /opt/homebrew/opt/llvm/lib/cmake/llvm |
| 36 | + /usr/local/opt/llvm/lib/cmake/llvm) |
| 37 | + if(EXISTS "${_CXLMEMSIM_LLVM_CANDIDATE}/LLVMConfig.cmake") |
| 38 | + set(_CXLMEMSIM_SLUG_DEFAULT_LLVM_DIR "${_CXLMEMSIM_LLVM_CANDIDATE}") |
| 39 | + break() |
| 40 | + endif() |
| 41 | +endforeach() |
| 42 | + |
| 43 | +set(CXLMEMSIM_SLUG_LLVM_DIR "${_CXLMEMSIM_SLUG_DEFAULT_LLVM_DIR}" CACHE PATH |
| 44 | + "LLVM CMake package directory used to build cxltime SlugAllocator") |
| 45 | + |
| 46 | +set(CXLMEMSIM_SLUG_PASS |
| 47 | + "${CXLMEMSIM_SLUG_BUILD_DIR}/tools/slug_allocator/SlugAllocatorPass.${_CXLMEMSIM_SLUG_DYLIB_SUFFIX}" |
| 48 | + CACHE FILEPATH "Path to the built SlugAllocator LLVM pass plugin") |
| 49 | +set(CXLMEMSIM_SLUG_RUNTIME |
| 50 | + "${CXLMEMSIM_SLUG_BUILD_DIR}/tools/slug_allocator/libslug_allocator_runtime.${_CXLMEMSIM_SLUG_DYLIB_SUFFIX}" |
| 51 | + CACHE FILEPATH "Path to the built SlugAllocator runtime library") |
| 52 | + |
| 53 | +if(NOT CXLMEMSIM_CXLTIME_ROOT OR NOT EXISTS "${CXLMEMSIM_CXLTIME_ROOT}/CMakeLists.txt") |
| 54 | + message(WARNING |
| 55 | + "CXLMemSim SlugAllocator integration is enabled, but cxltime was not found. " |
| 56 | + "Set CXLMEMSIM_CXLTIME_ROOT to a checkout that contains tools/slug_allocator.") |
| 57 | + return() |
| 58 | +endif() |
| 59 | + |
| 60 | +if(NOT EXISTS "${CXLMEMSIM_CXLTIME_ROOT}/tools/slug_allocator/CMakeLists.txt") |
| 61 | + message(WARNING |
| 62 | + "CXLMEMSIM_CXLTIME_ROOT=${CXLMEMSIM_CXLTIME_ROOT} does not contain " |
| 63 | + "tools/slug_allocator; skipping SlugAllocator targets.") |
| 64 | + return() |
| 65 | +endif() |
| 66 | + |
| 67 | +set(_CXLMEMSIM_SLUG_CONFIGURE_ARGS |
| 68 | + -S "${CXLMEMSIM_CXLTIME_ROOT}" |
| 69 | + -B "${CXLMEMSIM_SLUG_BUILD_DIR}" |
| 70 | + -DCMAKE_BUILD_TYPE=RelWithDebInfo |
| 71 | + -DBPFTIME_BUILD_WITH_LIBBPF=OFF |
| 72 | + -DBPFTIME_BUILD_KERNEL_BPF=OFF |
| 73 | + -DBUILD_BPFTIME_DAEMON=OFF |
| 74 | + -DBPFTIME_LLVM_JIT=OFF |
| 75 | + -DBPFTIME_UBPF_JIT=OFF |
| 76 | + -DBPFTIME_BUILD_RUNTIME=OFF |
| 77 | + -DBPFTIME_BUILD_ATTACH=OFF |
| 78 | + -DBPFTIME_BUILD_BPFTIME_TOOLS=OFF |
| 79 | + -DBPFTIME_BUILD_SLUG_ALLOCATOR=ON) |
| 80 | + |
| 81 | +if(CXLMEMSIM_SLUG_LLVM_DIR) |
| 82 | + list(APPEND _CXLMEMSIM_SLUG_CONFIGURE_ARGS |
| 83 | + "-DLLVM_DIR=${CXLMEMSIM_SLUG_LLVM_DIR}") |
| 84 | +endif() |
| 85 | + |
| 86 | +add_custom_target(slugallocator_tools |
| 87 | + COMMAND "${CMAKE_COMMAND}" ${_CXLMEMSIM_SLUG_CONFIGURE_ARGS} |
| 88 | + COMMAND "${CMAKE_COMMAND}" --build "${CXLMEMSIM_SLUG_BUILD_DIR}" |
| 89 | + --target SlugAllocatorPass slug_allocator_runtime --parallel |
| 90 | + BYPRODUCTS "${CXLMEMSIM_SLUG_PASS}" "${CXLMEMSIM_SLUG_RUNTIME}" |
| 91 | + USES_TERMINAL |
| 92 | + COMMENT "Building cxltime SlugAllocator pass and runtime") |
| 93 | + |
| 94 | +add_custom_target(slugallocator_paths |
| 95 | + COMMAND "${CMAKE_COMMAND}" -E echo "cxltime root: ${CXLMEMSIM_CXLTIME_ROOT}" |
| 96 | + COMMAND "${CMAKE_COMMAND}" -E echo "build dir: ${CXLMEMSIM_SLUG_BUILD_DIR}" |
| 97 | + COMMAND "${CMAKE_COMMAND}" -E echo "LLVM_DIR: ${CXLMEMSIM_SLUG_LLVM_DIR}" |
| 98 | + COMMAND "${CMAKE_COMMAND}" -E echo "pass: ${CXLMEMSIM_SLUG_PASS}" |
| 99 | + COMMAND "${CMAKE_COMMAND}" -E echo "runtime: ${CXLMEMSIM_SLUG_RUNTIME}") |
| 100 | + |
| 101 | +find_package(Python3 COMPONENTS Interpreter QUIET) |
| 102 | +if(Python3_Interpreter_FOUND) |
| 103 | + add_custom_target(slugallocator_smoke |
| 104 | + COMMAND "${Python3_EXECUTABLE}" |
| 105 | + "${PROJECT_SOURCE_DIR}/script/cxlmemsim_slug.py" |
| 106 | + smoke |
| 107 | + --cxltime-root "${CXLMEMSIM_CXLTIME_ROOT}" |
| 108 | + --build-dir "${CXLMEMSIM_SLUG_BUILD_DIR}" |
| 109 | + --llvm-dir "${CXLMEMSIM_SLUG_LLVM_DIR}" |
| 110 | + --pass "${CXLMEMSIM_SLUG_PASS}" |
| 111 | + --runtime "${CXLMEMSIM_SLUG_RUNTIME}" |
| 112 | + DEPENDS slugallocator_tools |
| 113 | + USES_TERMINAL |
| 114 | + COMMENT "Running SlugAllocator instrumentation smoke test") |
| 115 | +else() |
| 116 | + message(WARNING "Python3 interpreter not found; slugallocator_smoke target is unavailable") |
| 117 | +endif() |
0 commit comments