From f1eab6879739bde2efdaeaec46109d91de6e33c4 Mon Sep 17 00:00:00 2001 From: samwaseda Date: Wed, 3 Jun 2026 12:20:30 +0000 Subject: [PATCH] Support conda FFTW in make and python bindings Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- Makefile.defs | 13 +++++++++++++ cmake/Modules/Findfftw.cmake | 16 ++++++++++++++-- pythonbindings/Makefile | 17 +++++++++++------ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/Makefile.defs b/Makefile.defs index 0bb00a7..999ee71 100644 --- a/Makefile.defs +++ b/Makefile.defs @@ -39,6 +39,14 @@ EXTERNAL_INCLUDES += -I$(DEPTH)/external/WinBase64 EXTERNAL_LIBS = $(DEPTH)/external/miniz.o EXTERNAL_LIBS += $(DEPTH)/external/WinBase64/libbase64.o +CONDA_PREFIX ?= $(shell printf '%s' "$$CONDA_PREFIX") +CONDA_INCLUDE_DIR = $(CONDA_PREFIX)/include +CONDA_LIB_DIR = $(CONDA_PREFIX)/lib + +ifneq ($(wildcard $(CONDA_INCLUDE_DIR)/fftw3.h),) + INCLUDES += -I$(CONDA_INCLUDE_DIR) +endif + ifneq ($(CXX),) CXX = g++ endif @@ -46,6 +54,11 @@ endif CXXFLAGS = -fopenmp -Wall -Wextra -Wno-unused-parameter -std=c++17 -fPIC STDLIBS = -lfftw3_omp -lfftw3 -lgomp +ifneq ($(wildcard $(CONDA_LIB_DIR)/libfftw3.so)$(wildcard $(CONDA_LIB_DIR)/libfftw3.a),) + STDLIBS := -L$(CONDA_LIB_DIR) $(STDLIBS) -Wl,-rpath='$(CONDA_LIB_DIR)' + RUNPATH += -Wl,-rpath='$(CONDA_LIB_DIR)' +endif + COMPVER = $(shell $(CXX) -dumpversion) ifneq ($(findstring debug, $(SETTINGS)),) CXXFLAGS += -Og -g -DDEBUG diff --git a/cmake/Modules/Findfftw.cmake b/cmake/Modules/Findfftw.cmake index 633e3b6..39b10d7 100644 --- a/cmake/Modules/Findfftw.cmake +++ b/cmake/Modules/Findfftw.cmake @@ -1,8 +1,20 @@ # Find FFTW # Try to find the FFTW libraries -find_path(FFTW_INCLUDE_DIR fftw3.h) -find_library(FFTW_LIBRARY fftw3) +set(FFTW_HINT_INCLUDE_DIRS) +set(FFTW_HINT_LIBRARY_DIRS) + +if(DEFINED ENV{CONDA_PREFIX}) + list(APPEND FFTW_HINT_INCLUDE_DIRS "$ENV{CONDA_PREFIX}/include") + list(APPEND FFTW_HINT_LIBRARY_DIRS "$ENV{CONDA_PREFIX}/lib") +endif() + +find_path(FFTW_INCLUDE_DIR fftw3.h + HINTS ${FFTW_HINT_INCLUDE_DIRS} +) +find_library(FFTW_LIBRARY fftw3 + HINTS ${FFTW_HINT_LIBRARY_DIRS} +) if (NOT FFTW_INCLUDE_DIR) message(FATAL_ERROR "FFTW include directory not found.") diff --git a/pythonbindings/Makefile b/pythonbindings/Makefile index 2d14ff0..ee9c5c3 100644 --- a/pythonbindings/Makefile +++ b/pythonbindings/Makefile @@ -1,13 +1,18 @@ .PHONY: all build clean +DEPTH = .. +include $(DEPTH)/Makefile.defs + +PYTHON ?= python3 +MODULE = OpenPhase$(shell $(PYTHON)-config --extension-suffix) +PYBIND11_INCLUDES = $(shell $(PYTHON) -m pybind11 --includes) +LOCAL_RUNPATH = -Wl,-rpath='$$ORIGIN/../lib' -Wl,-z,origin +CONDA_RUNPATH = -Wl,-rpath='$(CONDA_LIB_DIR)' + all: build build: - g++ -O3 -Wall -shared -fopenmp -std=c++17 -fPIC $$(python3 -m pybind11 --includes) OpenPhase.cpp -o OpenPhase$$(python3-config --extension-suffix) -I../external -I../external/WinBase64 -I../include -L../lib -lOpenPhase ../external/miniz.o ../external/WinBase64/libbase64.o -Wl,-rpath='./' -Wl,-z,origin + $(CXX) $(CXXFLAGS) -shared -fPIC $(PYBIND11_INCLUDES) OpenPhase.cpp -o $(MODULE) $(INCLUDES) $(EXTERNAL_INCLUDES) -L$(DEPTH)/lib -lOpenPhase $(EXTERNAL_LIBS) $(LOCAL_RUNPATH) $(CONDA_RUNPATH) clean: - rm OpenPhase.cpython-39-x86_64-linux-gnu.so - - - - + rm -f $(MODULE)