Skip to content
Snippets Groups Projects
Commit e83f0b6f authored by Christophe Guillon's avatar Christophe Guillon Committed by Olivier BICHLER
Browse files

[Build] Update aidge_export_aidge build

Remove unecessary aidge_export_aidge build dependencies.
Add inclusion of cpu TensorImpl to default main.cpp.
Change test_export.py unit test to build only the
python binding such that the test works under cibuildwheel.
Fix test_export.py to not install tests in the
libAidge installation directory.
parent 5a68721a
No related branches found
No related tags found
No related merge requests found
cmake_minimum_required(VERSION 3.15)
cmake_minimum_required(VERSION 3.18)
set(CXX_STANDARD 14)
file(STRINGS "${CMAKE_SOURCE_DIR}/project_name.txt" project_name)
......@@ -18,6 +18,7 @@ set(module_name _${CMAKE_PROJECT_NAME}) # target name
##############################################
# Define options
option(PYBIND "python binding" ON)
option(STANDALONE "Build standalone executable" ON)
option(WERROR "Warning as error" OFF)
option(TEST "Enable tests" OFF)
option(COVERAGE "Enable coverage" OFF)
......@@ -61,16 +62,8 @@ set_property(TARGET ${module_name} PROPERTY POSITION_INDEPENDENT_CODE ON)
# PYTHON BINDING
if (PYBIND)
# Handles Python + pybind11 headers dependencies
include(PybindModuleCreation)
generate_python_binding(${CMAKE_PROJECT_NAME} ${module_name})
target_link_libraries(${module_name}
PUBLIC
pybind11::pybind11
PRIVATE
Python::Python
)
endif()
if( ${ENABLE_ASAN} )
......@@ -94,7 +87,6 @@ target_include_directories(${module_name}
${CMAKE_CURRENT_SOURCE_DIR}/src
)
target_link_libraries(${module_name} PUBLIC fmt::fmt)
target_compile_features(${module_name} PRIVATE cxx_std_14)
target_compile_options(${module_name} PRIVATE
......@@ -151,8 +143,13 @@ install(FILES
## Exporting from the build tree
message(STATUS "Exporting created targets to use them in another build")
export(EXPORT ${CMAKE_PROJECT_NAME}-targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/${project}-targets.cmake")
# Compile executable
add_executable(main main.cpp)
target_link_libraries(main PUBLIC _aidge_core ${module_name})
FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-targets.cmake")
if(STANDALONE)
if(AIDGE_REQUIRES_PYTHON AND NOT AIDGE_PYTHON_HAS_EMBED)
message(WARNING "Skipping compilation of standalone executable: missing Python embedded interpreter")
else()
add_executable(main main.cpp)
target_link_libraries(main PRIVATE ${module_name})
endif()
endif()
function(generate_python_binding name target_to_bind)
find_package(Python COMPONENTS Interpreter Development)
find_package(Python COMPONENTS Interpreter Development.Module)
add_definitions(-DPYBIND)
Include(FetchContent)
FetchContent_Declare(
PyBind11
......@@ -15,11 +14,9 @@ function(generate_python_binding name target_to_bind)
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_include_directories(${name} PRIVATE "python_binding")
# Link target library to bind
target_link_libraries(${name} PRIVATE ${target_to_bind})
# Handles Python + pybind11 headers dependencies
target_link_libraries(${name}
PUBLIC
${target_to_bind}
)
endfunction()
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
find_dependency(aidge_core)
include(${CMAKE_CURRENT_LIST_DIR}/aidge_backend_cpu-config-version.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/aidge_backend_cpu-targets.cmake)
#include <iostream>
#include <aidge/backend/cpu.hpp>
/* Register default cpu Tensor implementation */
#include <aidge/backend/cpu/data/TensorImpl.hpp>
/* Include model generator */
#include "include/dnn.hpp"
int main()
......
......@@ -4,6 +4,10 @@ This file is copied in the test export.
*/
#include <iostream>
/* Register default cpu Tensor implementation */
#include <aidge/backend/cpu/data/TensorImpl.hpp>
/* Include model generator */
#include "include/dnn.hpp"
int main()
......
......@@ -65,6 +65,7 @@ class test_export(unittest.TestCase):
def setUp(self):
self.EXPORT_PATH: pathlib.Path = pathlib.Path("dummy_export")
self.BUILD_DIR: pathlib.Path = self.EXPORT_PATH / "build"
self.INSTALL_DIR: pathlib.Path = (self.EXPORT_PATH / "install").absolute()
def tearDown(self):
pass
......@@ -96,9 +97,10 @@ class test_export(unittest.TestCase):
)
os.makedirs(self.BUILD_DIR, exist_ok=True)
clean_dir(self.BUILD_DIR) # if build dir existed already ensure its emptyness
clean_dir(self.INSTALL_DIR)
# Test compilation of export
install_path = (
search_path = (
os.path.join(sys.prefix, "lib", "libAidge")
if "AIDGE_INSTALL" not in os.environ
else os.environ["AIDGE_INSTALL"]
......@@ -116,14 +118,16 @@ class test_export(unittest.TestCase):
[
"cmake",
str(self.EXPORT_PATH.absolute()),
"-DPYBIND=1",
f"-DCMAKE_INSTALL_PREFIX:PATH={install_path}",
"-DPYBIND=ON",
f"-DCMAKE_PREFIX_PATH={search_path}", # search dependencies
f"-DCMAKE_INSTALL_PREFIX:PATH={self.INSTALL_DIR}", # local install
],
cwd=str(self.BUILD_DIR),
):
print(std_line, end="")
except subprocess.CalledProcessError as e:
print(f"An error occurred: {e}\nFailed to configure export.")
raise SystemExit(1)
##########################
# BUILD EXPORT
......@@ -135,6 +139,7 @@ class test_export(unittest.TestCase):
print(std_line, end="")
except subprocess.CalledProcessError as e:
print(f"An error occurred: {e}\nFailed to build export.")
raise SystemExit(1)
##########################
# INSTALL EXPORT
......@@ -146,6 +151,7 @@ class test_export(unittest.TestCase):
print(std_line, end="")
except subprocess.CalledProcessError as e:
print(f"An error occurred: {e}\nFailed to install export.")
raise SystemExit(1)
if __name__ == "__main__":
......
......@@ -51,15 +51,15 @@ write_to = "aidge_core/_version.py"
[tool.cibuildwheel]
build-frontend = "build"
test-requires = "pytest"
# FIXME: The ignored export test requires a to build the generated export via cmake.
# However due to a strange bug I haven't been able to properly link Python::Module to the export target
# Resulting in the need to link Python::Python which is the python interpreter.
# This suppresses the issue but sadly this target is not available on the cibuilwheel image.
# Hence the test is ignored. If you want to try and solve this bug go on.
# Just take care to increment the counter just below.
#
# Work time spent on this bug : 24h
test-command = "pytest --ignore={package}/aidge_core/unit_tests/test_export.py {package}/aidge_core/unit_tests"
# WARNING: in the test suite the `test_export.py` used to be skipped
# because it did not build when the python embedded interpreter is not available
# as it is the case for cibuildwheel containers.
# Now the build system takes care of this and skips the generation of a standalone
# executable when it is not possible.
# The root causes for this conditional build is that 1. the python embedded interpreter
# is not alweays available, and 2. the aidge_core library depends on it as of now.
# Hopefully this latter dependency may be removed in the future, simplifying the build.
test-command = "pytest {package}/aidge_core/unit_tests"
# uncomment to run cibuildwheel locally on selected distros
# build=[
# "cp38-manylinux_x86_64",
......
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