-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
89 lines (73 loc) · 3.08 KB
/
Makefile
File metadata and controls
89 lines (73 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# PostgreSQL extension settings
EXTENSION = psql_code_gen
DATA = sql/psql_code_gen--0.1.sql
MODULE_big = psql_code_gen
# Build directory for object files
BUILD_DIR = build
SRCS_C := $(wildcard src/*.c)
SRCS_CPP := $(wildcard src/*.cpp)
OBJS := $(patsubst src/%.c,$(BUILD_DIR)/%.o,$(SRCS_C)) \
$(patsubst src/%.cpp,$(BUILD_DIR)/%.o,$(SRCS_CPP))
# Ensure build directory exists
$(shell mkdir -p $(BUILD_DIR))
# PostgreSQL configuration
PG_CONFIG ?= $(shell which pg_config-18 2>/dev/null || which pg_config 2>/dev/null || echo pg_config)
PGXS := $(shell $(PG_CONFIG) --pgxs)
# C++ standard
PG_CXXFLAGS += -std=c++20
# AI SDK preprocessor definition
PG_CPPFLAGS += -DAI_SDK_HAS_OPENAI
# Attempt pkg-config detection for AI SDK
PKG_CONFIG_AI_SDK := $(shell pkg-config --exists ai-sdk-cpp-openai 2>/dev/null && echo yes || echo no)
ifeq ($(PKG_CONFIG_AI_SDK),yes)
PG_CPPFLAGS += $(shell pkg-config --cflags ai-sdk-cpp-openai ai-sdk-cpp-core 2>/dev/null)
SHLIB_LINK += $(shell pkg-config --libs ai-sdk-cpp-openai ai-sdk-cpp-anthropic ai-sdk-cpp-core 2>/dev/null)
SHLIB_LINK += $(shell pkg-config --libs openssl brotli 2>/dev/null || true)
else
# Manual detection for common Homebrew paths
AI_SDK_INCLUDE_CANDIDATES = /opt/homebrew/include /usr/local/include /usr/include /opt/local/include
AI_SDK_INCLUDE = $(firstword $(wildcard $(addsuffix /ai,$(AI_SDK_INCLUDE_CANDIDATES))))
ifeq ($(AI_SDK_INCLUDE),)
$(error "AI SDK headers not found in $(AI_SDK_INCLUDE_CANDIDATES)")
endif
PG_CPPFLAGS += -I$(dir $(AI_SDK_INCLUDE))
AI_SDK_LIB_CANDIDATES = /opt/homebrew/lib /usr/local/lib /usr/lib /opt/local/lib
AI_SDK_LIB = $(firstword $(wildcard $(addsuffix /libai-sdk-cpp-openai.*,$(AI_SDK_LIB_CANDIDATES))))
ifndef AI_SDK_LIB
$(error "AI SDK libraries not found in $(AI_SDK_LIB_CANDIDATES)")
endif
AI_SDK_LIBDIR = $(dir $(AI_SDK_LIB))
SHLIB_LINK += -L$(AI_SDK_LIBDIR) -lai-sdk-cpp-openai -lai-sdk-cpp-anthropic -lai-sdk-cpp-core
# OpenSSL
OPENSSL_LIBDIR = $(firstword $(wildcard \
/opt/homebrew/opt/openssl@3/lib /usr/local/opt/openssl@3/lib /usr/lib /opt/local/lib))
ifdef OPENSSL_LIBDIR
SHLIB_LINK += -L$(OPENSSL_LIBDIR)
endif
SHLIB_LINK += -lssl -lcrypto
# Brotli
BROTLI_LIBDIR = $(firstword $(wildcard /opt/homebrew/opt/brotli/lib /opt/homebrew/lib /opt/local/lib))
ifdef BROTLI_LIBDIR
SHLIB_LINK := -L$(BROTLI_LIBDIR) $(SHLIB_LINK)
endif
SHLIB_LINK += -lbrotlidec
endif
# C++ standard library and utilities
SHLIB_LINK += -lz -lc++
# Runtime rpath
LDFLAGS_SL += -Wl,-rpath,@loader_path/../lib
LDFLAGS_SL += -Wl,-rpath,/opt/homebrew/lib
LDFLAGS_SL += -Wl,-rpath,/opt/homebrew/opt/openssl@3/lib
LDFLAGS_SL += -Wl,-rpath,/opt/homebrew/opt/brotli/lib
LDFLAGS_SL += -Wl,-rpath,/usr/lib
include $(PGXS)
# Compile C sources
$(BUILD_DIR)/%.o: src/%.c
$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
# Compile C++ sources
$(BUILD_DIR)/%.o: src/%.cpp
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@
# Custom clean target
.PHONY: clean-stray
clean-stray:
rm -f src/*.o src/*.bc build/*.o build/*.bc