CC = gcc
CFLAGS = -Wall -Wextra -O2
ifeq ($(OS),Windows_NT)
RUST_TARGET := x86_64-pc-windows-gnu
CARGO_TARGET_FLAG := --target $(RUST_TARGET)
TARGET_DIR := ../target/$(RUST_TARGET)
EXE_SUFFIX := .exe
DTACT_LDFLAGS = -L$(TARGET_DIR)/release -ldtact
DTACT_UTIL_LDFLAGS = -I.. -L$(TARGET_DIR)/release -ldtact_util
POST_LINK = cp $(TARGET_DIR)/release/$(1).dll .
else
CARGO_TARGET_FLAG :=
TARGET_DIR := ../target
EXE_SUFFIX :=
DTACT_LDFLAGS = -L$(TARGET_DIR)/release -ldtact -Wl,-rpath,$(TARGET_DIR)/release
DTACT_UTIL_LDFLAGS = -I.. -L$(TARGET_DIR)/release -ldtact_util -Wl,-rpath,$(TARGET_DIR)/release
POST_LINK = true
endif
all: c_async c_dtact_util run_rust run_rust_util
build_dtact:
cargo build --release -p dtact $(CARGO_TARGET_FLAG)
c_async: build_dtact c_async.c
$(CC) $(CFLAGS) -o c_async$(EXE_SUFFIX) c_async.c $(DTACT_LDFLAGS)
@$(call POST_LINK,dtact)
build_dtact_util:
cargo build --release -p dtact-util --features ffi $(CARGO_TARGET_FLAG)
c_dtact_util: build_dtact_util c_dtact_util.c
$(CC) $(CFLAGS) -o c_dtact_util$(EXE_SUFFIX) c_dtact_util.c $(DTACT_UTIL_LDFLAGS)
@$(call POST_LINK,dtact_util)
run_rust:
cargo run --example rust_async
run_rust_util:
cargo run --example rust_dtact_util
run: c_async
./c_async$(EXE_SUFFIX)
run_util: c_dtact_util
./c_dtact_util$(EXE_SUFFIX)
clean:
rm -f c_async c_async.exe c_dtact_util c_dtact_util.exe dtact.dll dtact_util.dll