From 2c1f9e8d2c9d7b2ceb838d886ca78d951feb0a5d Mon Sep 17 00:00:00 2001 From: Tammo Jan Dijkema <T.J.Dijkema@gmail.com> Date: Sat, 13 Apr 2019 11:03:32 +0200 Subject: [PATCH] Add CMake-pybind11 (without pybind11 for now) --- pybind11-cmake/CMakeLists.txt | 11 +++++++ pybind11-cmake/Makefile | 35 +++++++++++++++++++++++ pybind11-cmake/apps/fib_cli.cpp | 12 ++++++++ pybind11-cmake/fib_cli | Bin 0 -> 16124 bytes pybind11-cmake/include/fibonacci.h | 4 +++ pybind11-cmake/src/fibonacci.cpp | 14 +++++++++ pybind11-cmake/src/fibonacci_wrapper.cpp | 8 ++++++ 7 files changed, 84 insertions(+) create mode 100644 pybind11-cmake/CMakeLists.txt create mode 100644 pybind11-cmake/Makefile create mode 100644 pybind11-cmake/apps/fib_cli.cpp create mode 100755 pybind11-cmake/fib_cli create mode 100644 pybind11-cmake/include/fibonacci.h create mode 100644 pybind11-cmake/src/fibonacci.cpp create mode 100644 pybind11-cmake/src/fibonacci_wrapper.cpp diff --git a/pybind11-cmake/CMakeLists.txt b/pybind11-cmake/CMakeLists.txt new file mode 100644 index 0000000..191c5ea --- /dev/null +++ b/pybind11-cmake/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.1) + +project(Fibonacci VERSION 0.1 + DESCRIPTION "Calculate Fibonacci numbers using C++, with python binding" + LANGUAGES CXX) + +add_library(fibonacci SHARED src/fibonacci.cpp include/fibonacci.h) +target_include_directories(fibonacci PUBLIC include) + +add_executable(fib_cli apps/fib_cli.cpp) +target_link_libraries(fib_cli PUBLIC fibonacci) diff --git a/pybind11-cmake/Makefile b/pybind11-cmake/Makefile new file mode 100644 index 0000000..35bf03e --- /dev/null +++ b/pybind11-cmake/Makefile @@ -0,0 +1,35 @@ +all: libfibonacci.so fibmod fib_cli + +fib_cli: apps/fib_cli.cpp libfibonacci.so + # compile fib_cli.cpp using the c++ compiler + # save to `fib_cli` + # link against the library `fibonacci` + # include the current directory in the directories searched for libraries + # include the current directory in the directories searched for headers + # compile the path where the library is to find into the binary + $(CXX) apps/fib_cli.cpp \ + -o fib_cli \ + -lfibonacci \ + -L. \ + -Iinclude \ + -Wl,-rpath . + +libfibonacci.so: include/fibonacci.h src/fibonacci.cpp + # compile fibonacci.cpp into a shared library + # into libfibonacci.so + $(CXX) src/fibonacci.cpp \ + -I include \ + -o libfibonacci.so \ + -Wl,-rpath . \ + --shared + +fibmod: libfibonacci.so src/fibonacci_wrapper.cpp + # compile a python wrapper using pybind 11 + $(CXX) -O3 -Wall -shared -std=c++11 -undefined dynamic_lookup \ + -Iinclude -L. -lfibonacci \ + `python3 -m pybind11 --includes` \ + src/fibonacci_wrapper.cpp \ + -o fibmod`python3-config --extension-suffix` + +clean: + rm -f fib_cli libfibonacci.so fibmod.cpython* fib_cli diff --git a/pybind11-cmake/apps/fib_cli.cpp b/pybind11-cmake/apps/fib_cli.cpp new file mode 100644 index 0000000..0cf58fa --- /dev/null +++ b/pybind11-cmake/apps/fib_cli.cpp @@ -0,0 +1,12 @@ +#include <iostream> +#include "fibonacci.h" + + +int main() { + + for (unsigned int i = 0; i < 10; i++) { + std::cout << i << ": " << fibonacci(i) << std::endl; + } + + return 0; +} diff --git a/pybind11-cmake/fib_cli b/pybind11-cmake/fib_cli new file mode 100755 index 0000000000000000000000000000000000000000..3db9e49b452e304224eacc2e1d356fb616b04d8d GIT binary patch literal 16124 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 I!Bq|e0KbmbGynhq literal 0 HcmV?d00001 diff --git a/pybind11-cmake/include/fibonacci.h b/pybind11-cmake/include/fibonacci.h new file mode 100644 index 0000000..57fd449 --- /dev/null +++ b/pybind11-cmake/include/fibonacci.h @@ -0,0 +1,4 @@ +#ifndef FIBONACCI_H +#define FIBONACCI_H +unsigned long fibonacci(unsigned int n); +#endif diff --git a/pybind11-cmake/src/fibonacci.cpp b/pybind11-cmake/src/fibonacci.cpp new file mode 100644 index 0000000..5ef56ce --- /dev/null +++ b/pybind11-cmake/src/fibonacci.cpp @@ -0,0 +1,14 @@ +#include "fibonacci.h" + +unsigned long fibonacci(unsigned int n) { + unsigned long n0 = 1; + unsigned long n1 = 1; + unsigned long tmp = 1; + + for (unsigned int i = 0; i < n; i++) { + tmp = n1; + n1 = n0 + n1; + n0 = tmp; + } + return n0; +} diff --git a/pybind11-cmake/src/fibonacci_wrapper.cpp b/pybind11-cmake/src/fibonacci_wrapper.cpp new file mode 100644 index 0000000..104883b --- /dev/null +++ b/pybind11-cmake/src/fibonacci_wrapper.cpp @@ -0,0 +1,8 @@ +#include <pybind11/pybind11.h> +#include "fibonacci.h" + +PYBIND11_MODULE(fibmod, m) { + m.doc() = "pybind11 example plugin for fibonacci"; + + m.def("fibonacci", &fibonacci, "Fibonacci function using C++"); +} -- GitLab