cmake_minimum_required(VERSION 3.18) # add_subdirectory of vmie (needs find_program REQUIRED) project(vgpu-perception C) # standalone host project, native gcc set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) # vmie is our own library — reference its SOURCES by path, never a third_party copy. # LIBVMIE_PATH is supplied from OUTSIDE at configure time → no private path in the tree. set(LIBVMIE_PATH "" CACHE PATH "Path to the vmie library source tree (host memory model)") if(NOT LIBVMIE_PATH) message(FATAL_ERROR "vgpu-perception: set -DLIBVMIE_PATH=/path/to/vmie/sources") endif() # Build vmie's static lib from its own sources. EXCLUDE_FROM_ALL: only the `vmie` # target we link is built (not vmie's CLI/scan demos or its guest exe). memmodel.h # arrives transitively via the vmie target's PUBLIC include dir — no manual include, # no vendored header to keep in sync. add_subdirectory(${LIBVMIE_PATH} ${CMAKE_BINARY_DIR}/vmie-build EXCLUDE_FROM_ALL) set(REPO ${CMAKE_CURRENT_SOURCE_DIR}/../..) # repo root (this lives in src/perception) add_library(vgpu-perception STATIC discover.c sample.c control.c) target_include_directories(vgpu-perception PUBLIC ${REPO}/include # vgpu_perception.h, vgpu_stream.h PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) # perception-internal.h target_link_libraries(vgpu-perception PUBLIC vmie) # memmodel.h include comes transitively target_compile_options(vgpu-perception PRIVATE -O2 -Wall -Wextra) # table-driven test: invariant predicates + flat sampling smoke enable_testing() add_executable(vgpu-perception-test test/test_perception.c) target_include_directories(vgpu-perception-test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) # memmodel.h via vgpu-perception -> vmie (transitive) target_link_libraries(vgpu-perception-test PRIVATE vgpu-perception) target_compile_options(vgpu-perception-test PRIVATE -O2 -Wall -Wextra) add_test(NAME vgpu-perception-test COMMAND vgpu-perception-test)