Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 54 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ else ifeq ($(VARIANT),full)
BREW_PREFIX := $(shell brew --prefix)
ICU_PREFIX := $(BREW_PREFIX)/opt/icu4c
LLVM_PREFIX := $(BREW_PREFIX)/opt/llvm
CONFIGURE_FLAGS = --prefix=$(PREFIX) --with-openssl --with-icu --with-lz4 --with-zstd --with-libxml --with-llvm --with-uuid=e2fs --disable-nls CFLAGS="-Wno-unguarded-availability-new" --with-includes="$(BREW_PREFIX)/include:$(ICU_PREFIX)/include:$(LLVM_PREFIX)/include" --with-libraries="$(BREW_PREFIX)/lib:$(ICU_PREFIX)/lib:$(LLVM_PREFIX)/lib"
CONFIGURE_FLAGS = --prefix=$(PREFIX) --with-openssl --with-icu --with-lz4 --with-zstd --with-libxml --with-llvm --with-uuid=e2fs --disable-nls CFLAGS="-Wno-unguarded-availability-new" --with-includes="$(BREW_PREFIX)/include:$(ICU_PREFIX)/include:$(LLVM_PREFIX)/include" --with-libraries="$(BREW_PREFIX)/lib:$(ICU_PREFIX)/lib:$(LLVM_PREFIX)/lib" LLVM_CONFIG="$(LLVM_PREFIX)/bin/llvm-config" CLANG="$(LLVM_PREFIX)/bin/clang"
else ifeq ($(PLATFORM),linux)
CONFIGURE_FLAGS = --prefix=$(PREFIX) --with-openssl --with-icu --with-lz4 --with-zstd --with-libxml --with-llvm --with-uuid=e2fs --disable-nls
else ifeq ($(PLATFORM),win32)
Expand Down Expand Up @@ -92,7 +92,11 @@ extract:
configure:
@echo "⚙️ Configuring PostgreSQL build..."
ifeq ($(PLATFORM),darwin)
cd $(POSTGRES_SRC) && PKG_CONFIG_PATH="$(ICU_PREFIX)/lib/pkgconfig:$(BREW_PREFIX)/lib/pkgconfig" LLVM_CONFIG="$(LLVM_PREFIX)/bin/llvm-config" ./configure $(CONFIGURE_FLAGS)
ifeq ($(VARIANT),full)
cd $(POSTGRES_SRC) && PKG_CONFIG_PATH="$(ICU_PREFIX)/lib/pkgconfig:$(BREW_PREFIX)/lib/pkgconfig" LLVM_CONFIG="$(LLVM_PREFIX)/bin/llvm-config" CLANG="$(LLVM_PREFIX)/bin/clang" ./configure $(CONFIGURE_FLAGS)
else
cd $(POSTGRES_SRC) && PKG_CONFIG_PATH="$(BREW_PREFIX)/lib/pkgconfig" ./configure $(CONFIGURE_FLAGS)
endif
else
cd $(POSTGRES_SRC) && ./configure $(CONFIGURE_FLAGS)
endif
Expand Down Expand Up @@ -128,18 +132,62 @@ bundle-deps:
@echo "📦 Bundling runtime dependencies..."
ifeq ($(VARIANT),full)
ifeq ($(PLATFORM),darwin)
@echo " 🔗 Bundling LLVM libraries for JIT support..."
@echo " 🔗 Bundling LLVM and dependencies for JIT support..."

# Bundle LLVM library
@if [ -f "$(LLVM_PREFIX)/lib/libLLVM.dylib" ]; then \
cp "$(LLVM_PREFIX)/lib/libLLVM.dylib" "$(PREFIX)/lib/"; \
echo " ✅ Bundled libLLVM.dylib"; \
else \
echo " ⚠️ Warning: libLLVM.dylib not found at $(LLVM_PREFIX)/lib/"; \
echo " ❌ Error: libLLVM.dylib not found at $(LLVM_PREFIX)/lib/"; \
exit 1; \
fi

# Bundle Z3 SMT solver library (LLVM dependency)
@if [ -f "$(BREW_PREFIX)/opt/z3/lib/libz3.dylib" ]; then \
cp "$(BREW_PREFIX)/opt/z3/lib/libz3.dylib" "$(PREFIX)/lib/"; \
echo " ✅ Bundled libz3.dylib"; \
elif [ -f "$(BREW_PREFIX)/opt/z3/lib/libz3.4.15.dylib" ]; then \
cp "$(BREW_PREFIX)/opt/z3/lib/libz3.4.15.dylib" "$(PREFIX)/lib/"; \
echo " ✅ Bundled libz3.4.15.dylib"; \
else \
echo " ❌ Error: libz3 not found at $(BREW_PREFIX)/opt/z3/lib/"; \
exit 1; \
fi

# Bundle Zstandard compression library (LLVM dependency)
@if [ -f "$(BREW_PREFIX)/opt/zstd/lib/libzstd.1.dylib" ]; then \
cp "$(BREW_PREFIX)/opt/zstd/lib/libzstd.1.dylib" "$(PREFIX)/lib/"; \
echo " ✅ Bundled libzstd.1.dylib"; \
else \
echo " ❌ Error: libzstd.1.dylib not found at $(BREW_PREFIX)/opt/zstd/lib/"; \
exit 1; \
fi
@echo " 🔧 Fixing library paths for bundled dependencies..."

@echo " 🔧 Fixing library paths for JIT dependencies..."

# Fix llvmjit.dylib -> libLLVM.dylib path
@if [ -f "$(PREFIX)/lib/llvmjit.dylib" ] && [ -f "$(PREFIX)/lib/libLLVM.dylib" ]; then \
install_name_tool -change "$(LLVM_PREFIX)/lib/libLLVM.dylib" "@loader_path/libLLVM.dylib" "$(PREFIX)/lib/llvmjit.dylib"; \
echo " ✅ Fixed llvmjit.dylib library path"; \
echo " ✅ Fixed llvmjit.dylib -> libLLVM.dylib path"; \
fi

# Fix libLLVM.dylib paths to its dependencies
@if [ -f "$(PREFIX)/lib/libLLVM.dylib" ]; then \
install_name_tool -id "@loader_path/libLLVM.dylib" "$(PREFIX)/lib/libLLVM.dylib"; \
if [ -f "$(PREFIX)/lib/libz3.dylib" ]; then \
install_name_tool -change "$(BREW_PREFIX)/opt/z3/lib/libz3.dylib" "@loader_path/libz3.dylib" "$(PREFIX)/lib/libLLVM.dylib"; \
elif [ -f "$(PREFIX)/lib/libz3.4.15.dylib" ]; then \
install_name_tool -change "$(BREW_PREFIX)/opt/z3/lib/libz3.4.15.dylib" "@loader_path/libz3.4.15.dylib" "$(PREFIX)/lib/libLLVM.dylib"; \
fi; \
if [ -f "$(PREFIX)/lib/libzstd.1.dylib" ]; then \
install_name_tool -change "$(BREW_PREFIX)/opt/zstd/lib/libzstd.1.dylib" "@loader_path/libzstd.1.dylib" "$(PREFIX)/lib/libLLVM.dylib"; \
fi; \
echo " ✅ Fixed libLLVM.dylib dependency paths"; \
fi

@echo " 🎯 JIT dependency bundling complete"

else
@echo " ℹ️ Dependency bundling not implemented for $(PLATFORM)"
endif
Expand Down
54 changes: 53 additions & 1 deletion test-binaries.sh
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,59 @@ FROM test_vectors
ORDER BY distance;
"

# Test 7: Clean shutdown
# Test 7: JIT functionality (full variant only)
if [ "$VARIANT" = "full" ]; then
echo "🔬 Testing JIT compilation (full variant)..."

# Test basic JIT availability
echo " Testing JIT availability..."
${POSTGRES_DIR}/bin/psql -p ${TEST_PORT} -d template1 -U ${USER} -c "SHOW jit;" || {
echo "❌ ERROR: JIT parameter not available"
exit 1
}

# Test JIT can be enabled without errors
echo " Testing JIT enable/disable..."
${POSTGRES_DIR}/bin/psql -p ${TEST_PORT} -d template1 -U ${USER} -c "SET jit = on;" || {
echo "❌ ERROR: Failed to enable JIT"
exit 1
}

# Test JIT with actual compilation (force low cost threshold)
echo " Testing JIT compilation with complex query..."
${POSTGRES_DIR}/bin/psql -p ${TEST_PORT} -d template1 -U ${USER} -c "
SET jit = on;
SET jit_above_cost = 0;
SET jit_optimize_above_cost = 0;
SET jit_inline_above_cost = 0;

-- Create larger dataset for JIT to kick in
CREATE TABLE jit_test AS
SELECT i as id, random() as value, 'test_' || i as name
FROM generate_series(1, 1000) i;

-- Complex query that should trigger JIT
SELECT COUNT(*), AVG(value), MIN(value), MAX(value)
FROM jit_test
WHERE value > 0.5 AND id % 3 = 0
GROUP BY (id / 100)::int
HAVING COUNT(*) > 5;

DROP TABLE jit_test;
" || {
echo "❌ ERROR: JIT compilation failed"
exit 1
}

echo " ✅ JIT functionality working correctly"

elif [ "$VARIANT" = "lite" ]; then
echo "ℹ️ Skipping JIT test (lite variant - JIT not available)"
else
echo "⚠️ Unknown variant: $VARIANT - skipping JIT test"
fi

# Test 8: Clean shutdown
echo "🛑 Testing server shutdown..."
${POSTGRES_DIR}/bin/pg_ctl -D ${TEST_DIR}/data stop

Expand Down
Loading