diff --git a/CMakeLists.txt b/CMakeLists.txt index ff84517ee78a594182893f7d5cd92023ecfcf963..f5559e33f94c56ac9122b267e2238b9fdcebe152 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,10 +33,12 @@ endif() # Find system dependencies Include(FetchContent) +set(FMT_VERSION 10.2.1) +message(STATUS "Retrieving fmt ${FMT_VERSION} from git") FetchContent_Declare( fmt GIT_REPOSITORY https://github.com/fmtlib/fmt.git - GIT_TAG 10.2.1 # or a later release + GIT_TAG ${FMT_VERSION} # or a later release ) set(FMT_SYSTEM_HEADERS ON) @@ -79,13 +81,13 @@ endif() # PYTHON BINDING if (PYBIND) include(PybindModuleCreation) - # retrieves pybind and python pkg and link them to _aidge_core - generate_python_binding(${project} ${module_name}) + # retrieves pybind and python pkg and link them to _aidge_core + generate_python_binding() # Handles Python + pybind11 headers dependencies target_link_libraries(${module_name} PRIVATE - ${Python_LIBRARIES} + Python::Module PUBLIC pybind11::pybind11 ) diff --git a/cmake/PybindModuleCreation.cmake b/cmake/PybindModuleCreation.cmake index eb1bd0342842cc843415c54b7b59875dce08015a..9ed3fcec4b27712ac441ef48cab130bb3364d75c 100644 --- a/cmake/PybindModuleCreation.cmake +++ b/cmake/PybindModuleCreation.cmake @@ -1,25 +1,33 @@ -function(generate_python_binding name target_to_bind) +macro(generate_python_binding ) add_definitions(-DPYBIND) Include(FetchContent) + # Use the New FindPython mode, recommanded. Requires CMake 3.15+ + find_package(Python 3.7.0 + COMPONENTS Interpreter Development.Module + REQUIRED) + set(PYBIND11_FINDPYTHON ON) + set(PYBIND_VERSION v2.10.4) + message(STATUS "Retrieving pybind ${PYBIND_VERSION} from git") FetchContent_Declare( PyBind11 GIT_REPOSITORY https://github.com/pybind/pybind11.git - GIT_TAG v2.10.4 # or a later release + GIT_TAG ${PYBIND_VERSION} # or a later release ) - - # Use the New FindPython mode, recommanded. Requires CMake 3.15+ - find_package(Python 3.7 - COMPONENTS Interpreter Development.Module - REQUIRED) FetchContent_MakeAvailable(PyBind11) - - message(STATUS "Creating binding for module ${name}") + + message(STATUS "Creating binding for module ${project}") file(GLOB_RECURSE pybind_src_files "python_binding/*.cpp") - pybind11_add_module(${name} MODULE ${pybind_src_files} "NO_EXTRAS") # NO EXTRA recquired for pip install - target_include_directories(${name} PUBLIC "python_binding" ) - target_link_libraries(${name} PUBLIC ${target_to_bind}) - target_include_directories(${target_to_bind} PRIVATE ${Python_INCLUDE_DIRECTORIES}) - target_link_directories(${target_to_bind} PRIVATE ${Python_LIBRARY_DIRS}) -endfunction() + pybind11_add_module(${project} MODULE ${pybind_src_files} "NO_EXTRAS") # NO EXTRA required for pip install + target_include_directories(${project} PUBLIC "python_binding" ${pybind11_INCLUDE_DIRECTORIES}) + target_link_libraries(${project} PUBLIC ${module_name}) +endmacro() + + + # cmake_minimum_required(VERSION 3.18...3.26) + # project(test) + # find_package(Python REQUIRED COMPONENTS Interpreter Development.Module) + # set(PYBIND11_FINDPYTHON ON) + # find_package(pybind11 CONFIG REQUIRED) + diff --git a/pyproject.toml b/pyproject.toml index 87aef234c3bfc4b1c03cb2a240697d0a515d2e68..dfa8d012be10c935e32dd9ff9b9d805ecb8a9b48 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,9 @@ [project] name = "aidge_core" description="Core alogrithms for operators and graph of the AIDGE framework" -dependencies = ["numpy>=1.21.6"] +dependencies = [ + "numpy>=1.21.6", +] requires-python = ">= 3.7" readme = "README.md" license = { file = "LICENSE" } @@ -9,13 +11,14 @@ classifiers = [ "Development Status :: 2 - Pre-Alpha", "Programming Language :: Python :: 3" ] -dynamic = ["version"] # defined in tool.setuptools_scm +# dynamic = ["version"] # defined in tool.setuptools_scm +version="1" [build-system] requires = [ "setuptools>=64", "setuptools_scm[toml]==7.1.0", - "cmake", + "cmake>=3.29", "toml" ] build-backend = "setuptools.build_meta" @@ -29,8 +32,8 @@ include = ["aidge_core*"] # package names should match these glob patterns (["* exclude = ["aidge_core.unit_tests*"] # exclude packages matching these glob patterns (empty by default) namespaces = false # to disable scanning PEP 420 namespaces (true by default) # SETUPTOOLS_SCM -[tool.setuptools_scm] -write_to = "aidge_core/_version.py" +# [tool.setuptools_scm] +# write_to = "aidge_core/_version.py" ##################################################### # CIBUILDWHEEL diff --git a/setup.py b/setup.py index 09f7696735a8c6d5dd985b0258652ec390c518b8..0be3bb8f8ae199449f43e50b3b47ff41dcefc9a0 100644 --- a/setup.py +++ b/setup.py @@ -43,6 +43,18 @@ class CMakeBuild(build_ext): os.chdir(str(build_temp)) + # Impose to use the executable of the python + # used to launch setup.py to setup PythonInterp + python_executable = sys.executable + python_include_dirs = sysconfig.get_path('include') + python_library = sysconfig.get_config_var('LIBDIR') + python_prefix = sys.exec_prefix + print(f"python\texecutable\t{python_executable}") + print(f"\t\t\tinclude\tdirs {python_include_dirs}") + print(f"-DPYTHON_INCLUDE_DIRS={sysconfig.get_config_var('INCLUDEPY')}") # this might need to be the subdir + print(f"\t\t\tlibrary\t{python_library}") + print(f"-DPYTHON_LIBRARIES={sysconfig.get_config_var('LIBDEST')}") + print(f"\t\t\tprefix\t{python_prefix}") compile_type = "Debug" install_path = ( os.path.join(sys.prefix, "lib", "libAidge") @@ -53,6 +65,9 @@ class CMakeBuild(build_ext): [ "cmake", str(cwd), + f"-DPYTHON_EXECUTABLE={sys.executable}", + f"-DPYTHON_INCLUDE_DIRS={sysconfig.get_config_var('INCLUDEPY')}", + f"-DPYTHON_LIBRARIES={sysconfig.get_config_var('LIBDEST')}", "-DTEST=OFF", f"-DCMAKE_INSTALL_PREFIX:PATH={install_path}", f"-DCMAKE_BUILD_TYPE={compile_type}",