Skip to content
Snippets Groups Projects
Commit 214cc8a2 authored by Cyril Moineau's avatar Cyril Moineau
Browse files

Add setup.py and project_name.txt file.

parent 1520242d
No related branches found
No related tags found
No related merge requests found
cmake_minimum_required(VERSION 3.11)
set(project aidge_core) # This will also be python module name
file(READ "${CMAKE_SOURCE_DIR}/version.txt" version)
file(READ "${CMAKE_SOURCE_DIR}/project_name.txt" project)
message(STATUS "Project name: ${project}")
message(STATUS "Project version: ${version}")
# Note : project name is {project} and python module name is also {project}
set(module_name _${project}) # target name
set(version 2.0.0)
project(${project})
##############################################
......@@ -16,6 +21,7 @@ include(PybindModuleCreation)
# Define options
option(PYBIND "python binding" ON)
option(WERROR "Warning as error" OFF)
option(TEST "Enable tests" ON)
##############################################
# Find system dependencies
......@@ -126,5 +132,7 @@ export(EXPORT ${project}-targets
##############################################
## Add test
enable_testing()
add_subdirectory(unit_tests)
if(TEST)
enable_testing()
add_subdirectory(unit_tests)
endif()
\ No newline at end of file
......@@ -4,25 +4,49 @@ You can find here the C++ code of the Core library of Aidge.
## Compilation
To only compile the Core library, run
```
make core_only
```
To compile the Core library + the associated unitary tests, run
```
make core_tests
```
Create two directories ``build`` and ``ìnstall``.
To compile the Core library with the python binding, run
```
make core_with_pybind
```
Important: this command can also be run with `make`.
Then **inside** ``build`` :
```bash
cmake -DCMAKE_INSTALL_PREFIX:PATH=$(path_to_install_folder) $(CMAKE PARAMETERS) $(projet_root)
make all install
To compile the Core library with the python binding + the associated unitary tests, run
```
make core_with_pybind_tests
**Compilation options**
| Option | Value type | Description |
|:----------:|:----------:|:-----------:|
| *-DCMAKE_INSTALL_PREFIX:PATH* | ``str`` | Path to the install folder |
| *-DCMAKE_BUILD_TYPE* | ``str`` | If ``Debug``, compile in debug mode, ``Release`` compile with highest optimisations, default= ``Release`` |
| *-DWERROR* | ``bool`` | If ``ON`` show warning as error during compilation phase, default=``OFF`` |
| *-DPYBIND* | ``bool`` | If ``ON`` activate python binding, default=``ON`` |
If you have compiled with PyBind you can find at the root of the ``build`` file the python lib ``aidge_core.cpython*.so``
## Run tests
### CPP
Inside of the build file run:
```bash
ctest --output-on-failure
```
### Python
from .aidge_core import * # import so generated by PyBind
\ No newline at end of file
......@@ -12,7 +12,7 @@ function(generate_python_binding name target_to_bind)
FetchContent_MakeAvailable(PyBind11)
message(STATUS "Creating binding for module ${name}")
file(GLOB_RECURSE pybind_src_files "python_binding/*.cpp")
pybind11_add_module(${name} MODULE ${pybind_src_files})
pybind11_add_module(${name} MODULE ${pybind_src_files} "NO_EXTRAS") # NO EXTRA recquired for pip install
target_include_directories(${name} PUBLIC ${pybind11_INCLUDE_DIRS} "python_binding")
target_link_libraries(${name} PUBLIC ${target_to_bind})
......
aidge_core
\ No newline at end of file
setup.py 0 → 100644
#!/usr/bin/env python3
""" Aidge
#TODO To change
POC of the next framework named Aidge
"""
DOCLINES = (__doc__ or '').split("\n")
import sys
import os
# Python supported version checks
if sys.version_info[:2] < (3, 7):
raise RuntimeError("Python version >= 3.7 required.")
CLASSIFIERS = """\
Development Status :: 2 - Pre-Alpha
"""
import shutil
import pathlib
import subprocess
import multiprocessing
from math import ceil
from setuptools import setup, Extension
from setuptools import find_packages
from setuptools.command.build_ext import build_ext
def get_project_name() -> str:
return open(pathlib.Path().absolute() / "project_name.txt", "r").read()
def get_project_version() -> str:
aidge_root = pathlib.Path().absolute()
version = open(aidge_root / "version.txt", "r").read().strip()
return version
class CMakeExtension(Extension):
def __init__(self, name):
super().__init__(name, sources=[])
class CMakeBuild(build_ext):
def run(self):
# This lists the number of processors available on the machine
# The compilation will use half of them
max_jobs = str(ceil(multiprocessing.cpu_count() / 2))
cwd = pathlib.Path().absolute()
build_temp = cwd / "build"
if not build_temp.exists():
build_temp.mkdir(parents=True, exist_ok=True)
build_lib = pathlib.Path(self.build_lib)
if not build_lib.exists():
build_lib.mkdir(parents=True, exist_ok=True)
os.chdir(str(build_temp))
# Impose to use the executable of the python
# used to launch setup.py to setup PythonInterp
param_py = "-DPYTHON_EXECUTABLE=" + sys.executable
self.spawn(['cmake', str(cwd), param_py, '-DTEST=OFF', f'-DCMAKE_INSTALL_PREFIX:PATH={build_temp}/install'])
if not self.dry_run:
self.spawn(['make', 'all', 'install', '-j', max_jobs])
os.chdir(str(cwd))
aidge_package = build_lib / (get_project_name())
# Get "aidge core" package
# ext_lib = build_temp
print(build_temp.absolute())
# Copy all shared object files from build_temp/lib to aidge_package
for root, _, files in os.walk(build_temp.absolute()):
for file in files:
if file.endswith('.so') and (root != str(aidge_package.absolute())):
currentFile=os.path.join(root, file)
shutil.copy(currentFile, str(aidge_package.absolute()))
# Copy version.txt in aidge_package
os.chdir(os.path.dirname(__file__))
shutil.copy("version.txt", str(aidge_package.absolute()))
if __name__ == '__main__':
setup(
name=get_project_name(),
version=get_project_version(),
python_requires='>=3.7',
description=DOCLINES[0],
long_description_content_type="text/markdown",
long_description="\n".join(DOCLINES[2:]),
classifiers=[c for c in CLASSIFIERS.split('\n') if c],
platforms=["Linux"],
packages=find_packages(where="."),
include_package_data=True,
# exclude_package_data={"aidge": ["_Core/*", "_CPU/*"]},
ext_modules=[CMakeExtension('aidge_core')],
cmdclass={
'build_ext': CMakeBuild,
},
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment