From 0bb455041eed9907b2583e41376d5e6152e5f95a Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sat, 23 Jan 2021 13:15:16 +0200 Subject: [PATCH] cmake : add python support --- .github/workflows/build.yml | 32 ++++++++++++++++++++++++++++++++ CMakeLists.txt | 26 ++++++++++++++++++++++++++ tests/CMakeLists.txt | 12 +++++++++++- tests/test-ggwave.py | 7 +++++++ 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100755 tests/test-ggwave.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 197f9ca..6ff32dd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,6 +30,38 @@ jobs: make ctest + ubuntu-18_04-python: + runs-on: ubuntu-18.04 + + strategy: + matrix: + python-version: [2.7, 3.5, 3.6, 3.7, 3.8] + + steps: + - name: Clone + uses: actions/checkout@v1 + with: + submodules: recursive + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Dependencies + run: | + sudo apt-get update + sudo apt-get install build-essential + sudo apt-get install cmake; + + - name: Configure + run: cmake . -DGGWAVE_SUPPORT_PYTHON=ON -DCMAKE_BUILD_TYPE=${{ matrix.build }} + + - name: Build + run: | + make + ctest + ubuntu-18_04-gcc-sanitized: runs-on: ubuntu-18.04 diff --git a/CMakeLists.txt b/CMakeLists.txt index 11b30b8..a3216d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,7 @@ option(GGWAVE_SANITIZE_ADDRESS "ggwave: enable address sanitizer" OFF) option(GGWAVE_SANITIZE_UNDEFINED "ggwave: enable undefined sanitizer" OFF) option(GGWAVE_SUPPORT_SDL2 "ggwave: support for libSDL2" ${GGWAVE_SUPPORT_SDL2_DEFAULT}) +option(GGWAVE_SUPPORT_PYTHON "ggwave: support for python" OFF) option(GGWAVE_BUILD_TESTS "ggwave: build examples" ${GGWAVE_STANDALONE}) option(GGWAVE_BUILD_EXAMPLES "ggwave: build examples" ${GGWAVE_STANDALONE}) @@ -71,6 +72,31 @@ endif() add_subdirectory(src) +if (GGWAVE_SUPPORT_PYTHON) + file(GLOB_RECURSE GGWAVE_SOURCES "include/*" "src/*") + + add_custom_command( + OUTPUT ${CMAKE_SOURCE_DIR}/bindings/python/ggwave.bycython.cpp + OUTPUT ${CMAKE_SOURCE_DIR}/bindings/python/ggwave + DEPENDS ${CMAKE_SOURCE_DIR}/bindings/python/Makefile + DEPENDS ${CMAKE_SOURCE_DIR}/bindings/python/ggwave.pyx + DEPENDS ${CMAKE_SOURCE_DIR}/bindings/python/cggwave.pxd + DEPENDS ${CMAKE_SOURCE_DIR}/bindings/python/setup.py + DEPENDS ${GGWAVE_SOURCES} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bindings/python + COMMAND make clean + COMMAND make + COMMENT "Compiling Python module" + VERBATIM + ) + + add_custom_target(ggwave-py ALL + DEPENDS bindings/python/ggwave.bycython.cpp + DEPENDS bindings/python/ggwave + ) +endif() + + if (GGWAVE_BUILD_TESTS) enable_testing() add_subdirectory(tests) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index d10ba4b..c5af84d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -12,4 +12,14 @@ target_link_libraries(${TEST_TARGET} PRIVATE ggwave ) -add_test(NAME ${TEST_TARGET} COMMAND $) +add_test(NAME ${TEST_TARGET}-cpp COMMAND $) + +if (GGWAVE_SUPPORT_PYTHON) + add_test(NAME ${TEST_TARGET}-py + COMMAND python test-ggwave.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) + + set_tests_properties(${TEST_TARGET}-py + PROPERTIES ENVIRONMENT "PYTHONPATH=${PROJECT_SOURCE_DIR}/bindings/python") +endif() diff --git a/tests/test-ggwave.py b/tests/test-ggwave.py new file mode 100755 index 0000000..f344181 --- /dev/null +++ b/tests/test-ggwave.py @@ -0,0 +1,7 @@ +import ggwave +import numpy as np + +instance = ggwave.init() + +# generate audio waveform for string "hello python" +waveform = ggwave.encode("hello python", txProtocolId = 1, volume = 20, instance = instance)