diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml new file mode 100644 index 0000000..f21a025 --- /dev/null +++ b/.github/workflows/cmake-multi-platform.yml @@ -0,0 +1,75 @@ +# This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform. +# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml +name: CMake on multiple platforms + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + runs-on: ${{ matrix.os }} + + strategy: + # Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable. + fail-fast: false + + # Set up a matrix to run the following 3 configurations: + # 1. + # 2. + # 3. + # + # To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list. + matrix: + os: [ubuntu-latest, windows-latest] + build_type: [Release] + c_compiler: [gcc, clang, cl] + include: + - os: windows-latest + c_compiler: cl + cpp_compiler: cl + - os: ubuntu-latest + c_compiler: gcc + cpp_compiler: g++ + - os: ubuntu-latest + c_compiler: clang + cpp_compiler: clang++ + exclude: + - os: windows-latest + c_compiler: gcc + - os: windows-latest + c_compiler: clang + - os: ubuntu-latest + c_compiler: cl + + steps: + - uses: actions/checkout@v4 + + - name: Set reusable strings + # Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file. + id: strings + shell: bash + run: | + echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: > + cmake -B ${{ steps.strings.outputs.build-output-dir }} + -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} + -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} + -S ${{ github.workspace }} + + - name: Build + # Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). + run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} + + - name: Test + working-directory: ${{ steps.strings.outputs.build-output-dir }} + # Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + run: ctest --build-config ${{ matrix.build_type }} diff --git a/dist-pypi/blingfire/__init__.py b/dist-pypi/blingfire/__init__.py index 1418046..d38658b 100644 --- a/dist-pypi/blingfire/__init__.py +++ b/dist-pypi/blingfire/__init__.py @@ -13,13 +13,22 @@ # detect windows if platform.system() == "Windows": - blingfire = cdll.LoadLibrary(os.path.join(path, "blingfiretokdll.dll")) + if platform.processor() == "arm": + blingfire = cdll.LoadLibrary(os.path.join(path, "win/arm64/blingfiretokdll.dll")) + else: + blingfire = cdll.LoadLibrary(os.path.join(path, "win/arm/blingfiretokdll.dll")) # detect Mac OSX elif platform.system() == "Darwin": - blingfire = cdll.LoadLibrary(os.path.join(path, "libblingfiretokdll.dylib")) + if platform.processor() == "arm": + blingfire = cdll.LoadLibrary(os.path.join(path, "mac/arm64/libblingfiretokdll.dylib")) + else: + blingfire = cdll.LoadLibrary(os.path.join(path, "mac/64/libblingfiretokdll.dylib")) else: # detect linux - blingfire = cdll.LoadLibrary(os.path.join(path, "libblingfiretokdll.so")) + if platform.processor() == "aarch64": + blingfire = cdll.LoadLibrary(os.path.join(path, "linux/arm64/libblingfiretokdll.so")) + elif platform.processor() == "x86_64": + blingfire = cdll.LoadLibrary(os.path.join(path, "linux/64/libblingfiretokdll.so")) def text_to_sentences(s): diff --git a/dist-pypi/blingfire/libblingfiretokdll.so b/dist-pypi/blingfire/linux/64/libblingfiretokdll.so similarity index 100% rename from dist-pypi/blingfire/libblingfiretokdll.so rename to dist-pypi/blingfire/linux/64/libblingfiretokdll.so diff --git a/dist-pypi/blingfire/linux/arm64/libblingfiretokdll.so b/dist-pypi/blingfire/linux/arm64/libblingfiretokdll.so new file mode 100644 index 0000000..3d43688 Binary files /dev/null and b/dist-pypi/blingfire/linux/arm64/libblingfiretokdll.so differ diff --git a/dist-pypi/blingfire/libblingfiretokdll.dylib b/dist-pypi/blingfire/mac/64/libblingfiretokdll.dylib similarity index 100% rename from dist-pypi/blingfire/libblingfiretokdll.dylib rename to dist-pypi/blingfire/mac/64/libblingfiretokdll.dylib diff --git a/nuget/lib/runtimes/osx-arm64/native/libblingfiretokdll.dylib b/dist-pypi/blingfire/mac/arm64/libblingfiretokdll.dylib similarity index 100% rename from nuget/lib/runtimes/osx-arm64/native/libblingfiretokdll.dylib rename to dist-pypi/blingfire/mac/arm64/libblingfiretokdll.dylib diff --git a/dist-pypi/blingfire/blingfiretokdll.dll b/dist-pypi/blingfire/win/64/blingfiretokdll.dll similarity index 100% rename from dist-pypi/blingfire/blingfiretokdll.dll rename to dist-pypi/blingfire/win/64/blingfiretokdll.dll diff --git a/dist-pypi/blingfire/win/arm64/blingfiretokdll.dll b/dist-pypi/blingfire/win/arm64/blingfiretokdll.dll new file mode 100644 index 0000000..fd8161c Binary files /dev/null and b/dist-pypi/blingfire/win/arm64/blingfiretokdll.dll differ diff --git a/dist-pypi/pyproject.toml b/dist-pypi/pyproject.toml new file mode 100644 index 0000000..1272300 --- /dev/null +++ b/dist-pypi/pyproject.toml @@ -0,0 +1,50 @@ +[build-system] +requires = ["setuptools>=42", "wheel"] +build-backend = "setuptools.build_meta" + +#[build-system.optional-dependencies] +#dev = ["bump-my-version"] + +[project] +name = "blingfire2" +version = "0.2.0" +authors = [ + {name = "Microsoft", email = "bling@microsoft.com"}, + {name = "Luca Foppiano", email = "info@sciencialab.com"} +] +description = "Python wrapper of lightning fast Finite State Machine based NLP library." +readme = "README.md" +requires-python = ">=3.0" + +[tool.setuptools] +packages = [ + "blingfire", + "blingfire.linux", + "blingfire.linux.arm64", + "blingfire.mac", + "blingfire.mac.arm64", + "blingfire.win", + "blingfire.win.arm64" +] + +[tool.setuptools.package-data] +blingfire = [ + "*.bin", "*.i2w", "blingfiretokdll.pdb", + "linux/64/*.so", "linux/arm64/*.so", + "win/64/*.dll", "win/arm64/*.dll", + "mac/64/*.dylib", "mac/arm64/*.dylib" +] + +[project.urls] +"Homepage" = "https://github.com/lfoppiano/Blingfire/" + +[tool.bumpversion] +current_version = "0.2.0" +commit = "true" +tag = "true" +tag_name = "v{new_version}" + +#[[tool.bumpversion.files]] +#filename = "pyproject.toml" +#search = "version = \"{current_version}\"" +#replace = "version = \"{new_version}\"" diff --git a/dist-pypi/requirements.txt b/dist-pypi/requirements.txt new file mode 100644 index 0000000..296d654 --- /dev/null +++ b/dist-pypi/requirements.txt @@ -0,0 +1 @@ +numpy \ No newline at end of file diff --git a/dist-pypi/setup.py b/dist-pypi/setup.py deleted file mode 100644 index d3b1e68..0000000 --- a/dist-pypi/setup.py +++ /dev/null @@ -1,22 +0,0 @@ -from setuptools import setup - -with open("README.md", "r") as fh: - long_description = fh.read() - -setup( - name="blingfire", - version="0.1.8", - author="Bling", - author_email="bling@microsoft.com", - description="Python wrapper of lightning fast Finite State Machine based NLP library.", - long_description=long_description, - long_description_content_type="text/markdown", - url="https://github.com/microsoft/blingfire/", - packages=['blingfire'], - package_data={'blingfire':['bert_base_tok.bin','bert_base_cased_tok.bin','bert_chinese.bin','bert_multi_cased.bin','wbd_chuni.bin','xlnet.bin','xlnet_nonorm.bin','xlm_roberta_base.bin','gpt2.bin','roberta.bin','laser100k.bin','laser250k.bin','laser500k.bin','uri100k.bin','uri250k.bin','uri500k.bin','syllab.bin','bert_base_cased_tok.i2w', 'bert_base_tok.i2w', 'bert_chinese.i2w', 'bert_multi_cased.i2w', 'gpt2.i2w', 'laser100k.i2w', 'laser250k.i2w', 'laser500k.i2w', 'roberta.i2w', 'uri100k.i2w', 'uri250k.i2w', 'uri500k.i2w', 'xlm_roberta_base.i2w', 'xlnet.i2w', 'xlnet_nonorm.i2w', 'libblingfiretokdll.so','blingfiretokdll.dll','blingfiretokdll.pdb','libblingfiretokdll.dylib']}, - classifiers=[ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", - ], -)