igvm/0002-switch-to-cbuild.patch
Luigi Leonardi 18ce62a2b9 Initial commit on c10s
Resolves: RHEL-130925

Signed-off-by: Luigi Leonardi <leonardi@redhat.com>
2026-01-26 18:58:15 +01:00

142 lines
5.7 KiB
Diff

diff --git a/igvm/Cargo.toml b/igvm/Cargo.toml
index 350d0a3..974300b 100644
--- a/igvm/Cargo.toml
+++ b/igvm/Cargo.toml
@@ -12,6 +12,10 @@ repository = "https://github.com/microsoft/igvm"
keywords = ["virtualization"]
categories = ["virtualization", "parser-implementations"]
+[package.metadata.capi.header]
+# cbindgen is handled from igvm_c/Makefile
+enabled = false
+
[package.metadata.docs.rs]
# Document all features
all-features = true
@@ -40,4 +44,5 @@ static_assertions.workspace = true
[features]
default = []
+capi = ["igvm-c"]
igvm-c = [] # Add exports that allow the library to be used from C
diff --git a/igvm_c/Makefile b/igvm_c/Makefile
index ace990e..1796e07 100644
--- a/igvm_c/Makefile
+++ b/igvm_c/Makefile
@@ -7,24 +7,27 @@
API_DIR:=$(realpath $(shell dirname $(firstword $(MAKEFILE_LIST))))
IGVM_DIR := $(API_DIR)/..
TARGET_DIR ?= target_c
-
-ifdef RELEASE
-TARGET_PATH="$(IGVM_DIR)/$(TARGET_DIR)/$(CARGO_BUILD_TARGET)/release"
-else
-TARGET_PATH="$(IGVM_DIR)/$(TARGET_DIR)/$(CARGO_BUILD_TARGET)/debug"
-endif
+EXE =
PREFIX ?= /usr
DESTDIR ?=
CFLAGS ?= -g3 -O0
-LDFLAGS += -L $(TARGET_PATH)
CARGO=CARGO_TARGET_DIR=$(IGVM_DIR)/$(TARGET_DIR) cargo
+CARGO_BUILD_HOST := $(shell $(CARGO) -Vv | sed -n 's,^host: ,,p')
FEATURES = "igvm-c"
+PROFILE = $(if $(RELEASE),release,debug)
+
+TARGET_PATH = "$(IGVM_DIR)/$(TARGET_DIR)/$(CARGO_BUILD_TARGET)/$(PROFILE)"
+LIB_PATH = "$(IGVM_DIR)/$(TARGET_DIR)/$(or $(CARGO_BUILD_TARGET),$(CARGO_BUILD_HOST))/$(PROFILE)"
RUST_SOURCE := $(IGVM_DIR)/igvm/src/c_api.rs $(IGVM_DIR)/igvm/src/lib.rs $(IGVM_DIR)/igvm_defs/src/lib.rs
+LIBIGVM = $(LIB_PATH)/libigvm.a
+UNINSTALLED_PC = $(LIB_PATH)/igvm-uninstalled.pc
+IGVM_LIBS = $(shell pkg-config --libs --static $(UNINSTALLED_PC))
+IGVM_LIBS_STATIC = $(subst $(IGVM_LIBS), -ligvm, $(LIBIGVM))
# Determine igvm crate version from Cargo.toml
VERSION = $(shell grep -oP "(?<=version = \").+(?=\")" $(IGVM_DIR)/igvm/Cargo.toml)
@@ -33,15 +36,15 @@ VERSION = $(shell grep -oP "(?<=version = \").+(?=\")" $(IGVM_DIR)/igvm/Cargo.to
all: build test
-build: $(API_DIR)/include/igvm.h $(TARGET_PATH)/dump_igvm
+build: $(API_DIR)/include/igvm.h $(TARGET_PATH)/dump_igvm$(EXE)
-$(TARGET_PATH)/libigvm.a:
- $(CARGO) build --features $(FEATURES) $(EXTRA_PARAMS) --manifest-path=$(IGVM_DIR)/igvm/Cargo.toml
+$(LIBIGVM):
+ $(CARGO) cbuild --prefix $(PREFIX) --features $(FEATURES) $(EXTRA_PARAMS) --manifest-path=$(IGVM_DIR)/igvm/Cargo.toml
$(TARGET_PATH)/libigvm_defs.rlib:
$(CARGO) build $(EXTRA_PARAMS) --manifest-path=$(IGVM_DIR)/igvm_defs/Cargo.toml
-$(TARGET_PATH)/test_data:
+$(TARGET_PATH)/test_data$(EXE):
$(CARGO) build $(EXTRA_PARAMS) --manifest-path=$(IGVM_DIR)/igvm_c/test_data/Cargo.toml
$(API_DIR)/include/igvm.h: $(RUST_SOURCE)
@@ -49,31 +52,27 @@ $(API_DIR)/include/igvm.h: $(RUST_SOURCE)
cbindgen -q -c $(API_DIR)/cbindgen_igvm_defs.toml $(IGVM_DIR)/igvm_defs -o "$(API_DIR)/include/igvm_defs.h"
$(API_DIR)/scripts/post_process.sh "$(API_DIR)/include"
-$(TARGET_PATH)/dump_igvm: $(API_DIR)/include/igvm.h $(API_DIR)/sample/dump_igvm.c $(TARGET_PATH)/libigvm.a
- $(CC) $(CFLAGS) -I $(API_DIR) -o $@ $^ -ligvm -ldl -pthread -lutil -lrt $(LDFLAGS)
+$(TARGET_PATH)/dump_igvm$(EXE): $(API_DIR)/sample/dump_igvm.c $(API_DIR)/include/igvm.h $(LIBIGVM)
+ $(CC) $(CFLAGS) -I $(API_DIR) -o $@ $< $(IGVM_LIBS) $(LDFLAGS)
-$(TARGET_PATH)/igvm_test: $(API_DIR)/include/igvm.h $(API_DIR)/tests/igvm_test.c $(TARGET_PATH)/libigvm.a
- $(CC) $(CFLAGS) -I $(API_DIR) -o $@ $^ -ligvm -lcunit -ldl -pthread -lm -lutil -lrt $(LDFLAGS)
+$(TARGET_PATH)/igvm_test$(EXE): $(API_DIR)/tests/igvm_test.c $(API_DIR)/include/igvm.h $(LIBIGVM)
+ $(CC) $(CFLAGS) -I $(API_DIR) -o $@ $< -lcunit $(IGVM_LIBS_STATIC) $(LDFLAGS)
-$(TARGET_PATH)/igvm.bin: $(TARGET_PATH)/test_data
+$(TARGET_PATH)/igvm.bin: $(TARGET_PATH)/test_data$(EXE)
$(TARGET_PATH)/test_data $(TARGET_PATH)/igvm.bin
-test: $(TARGET_PATH)/igvm_test $(TARGET_PATH)/igvm.bin
+test: $(TARGET_PATH)/igvm_test$(EXE) $(TARGET_PATH)/igvm.bin
$(TARGET_PATH)/igvm_test $(TARGET_PATH)/igvm.bin
$(CARGO) test --features $(FEATURES) $(EXTRA_PARAMS) --manifest-path=$(IGVM_DIR)/igvm/Cargo.toml
clean:
$(CARGO) clean $(EXTRA_PARAMS) --manifest-path=$(IGVM_DIR)/igvm/Cargo.toml
$(CARGO) clean $(EXTRA_PARAMS) --manifest-path=$(IGVM_DIR)/igvm_defs/Cargo.toml
- rm -f $(API_DIR)/include/igvm.h $(API_DIR)/include/igvm_defs.h $(TARGET_PATH)/dump_igvm $(TARGET_PATH)/test_data $(TARGET_PATH)/igvm.bin
+ rm -f $(API_DIR)/include/igvm.h $(API_DIR)/include/igvm_defs.h $(TARGET_PATH)/dump_igvm$(EXE) $(TARGET_PATH)/test_data$(EXE) $(TARGET_PATH)/igvm.bin
-install:
+install: build
mkdir -p $(DESTDIR)/$(PREFIX)/include/igvm
- mkdir -p $(DESTDIR)/$(PREFIX)/lib64/pkgconfig
- install -m 644 $(TARGET_PATH)/libigvm.a $(DESTDIR)/$(PREFIX)/lib64
install -m 644 $(IGVM_DIR)/igvm_c/include/* $(DESTDIR)/$(PREFIX)/include/igvm
+ $(CARGO) cinstall --destdir "$(DESTDIR)" --prefix "$(PREFIX)" --features $(FEATURES) $(EXTRA_PARAMS) --manifest-path=$(IGVM_DIR)/igvm/Cargo.toml
mkdir -p $(DESTDIR)/$(PREFIX)/bin/
- install -m 755 $(TARGET_PATH)/dump_igvm $(DESTDIR)/$(PREFIX)/bin/
- VERSION=$(VERSION) PREFIX=$(PREFIX) envsubst '$$VERSION $$PREFIX' \
- < $(IGVM_DIR)/igvm_c/igvm.pc.in \
- > $(DESTDIR)/$(PREFIX)/lib64/pkgconfig/igvm.pc
+ install -m 755 $(TARGET_PATH)/dump_igvm$(EXE) $(DESTDIR)/$(PREFIX)/bin/
diff --git a/igvm_c/igvm.pc.in b/igvm_c/igvm.pc.in
deleted file mode 100644
index 2f92404..0000000
--- a/igvm_c/igvm.pc.in
+++ /dev/null
@@ -1,13 +0,0 @@
-prefix=$PREFIX
-exec_prefix=${prefix}
-libdir=${prefix}/lib64
-sharedlibdir=${libdir}
-includedir=${prefix}/include
-
-Name: igvm
-Description: igvm library
-Version: $VERSION
-
-Requires:
-Libs: -L${libdir} -L${sharedlibdir} -ligvm
-Cflags: -I${includedir}