Skip to content

Commit

Permalink
Build dll on windows (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
csukuangfj committed Jun 13, 2024
1 parent ccb1879 commit 503eacc
Show file tree
Hide file tree
Showing 11 changed files with 190 additions and 30 deletions.
71 changes: 71 additions & 0 deletions .github/workflows/build-pip.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: build-pip

on:
push:
branches:
- master
paths:
- '.github/workflows/build-pip.yml'
- 'CMakeLists.txt'
- 'cmake/**'
- 'kaldi-decoder/csrc/**'
- 'kaldi-decoder/python/**'
- 'setup.py'
pull_request:
branches:
- master
paths:
- '.github/workflows/build-pip.yml'
- 'CMakeLists.txt'
- 'cmake/**'
- 'kaldi-decoder/csrc/**'
- 'kaldi-decoder/python/**'
- 'setup.py'

workflow_dispatch:

concurrency:
group: build-pip-${{ github.ref }}
cancel-in-progress: true

jobs:
build-pip:
name: ${{ matrix.os }} ${{ matrix.python-version }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
fail-fast: false
steps:
- uses: actions/checkout@v4

- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ${{ matrix.os }}-${{ matrix.python-version }}

# see https://github.com/microsoft/setup-msbuild
- name: Add msbuild to PATH
if: startsWith(matrix.os, 'windows')
uses: microsoft/setup-msbuild@v1.0.2

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Build
shell: bash
run: |
export CMAKE_CXX_COMPILER_LAUNCHER=ccache
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
cmake --version
python3 -m pip install -U pip wheel numpy setuptools
python3 setup.py bdist_wheel
ls -lh dist
python3 -m pip install ./dist/kaldi*.whl
cd ../..
python3 -c "import kaldi_decoder; print(kaldi_decoder.__version__)"
python3 -c "import kaldi_decoder; print(kaldi_decoder.__file__)"
2 changes: 1 addition & 1 deletion .github/workflows/build-wheels-aarch64.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
python-version: ["cp37", "cp38", "cp39", "cp310", "cp311", "cp312"]

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

- name: Set up QEMU
uses: docker/setup-qemu-action@v2
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-wheels-linux.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
python-version: ["cp37", "cp38", "cp39", "cp310", "cp311", "cp312"]

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

# see https://cibuildwheel.readthedocs.io/en/stable/changelog/
# for a list of versions
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-wheels-macos.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
python-version: ["cp38", "cp39", "cp310", "cp311", "cp312"]

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

# see https://cibuildwheel.readthedocs.io/en/stable/changelog/
# for a list of versions
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/linux.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest]
python-version: ["3.7", "3.8", "3.9", "3.10"]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/macos.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ jobs:
fail-fast: false
matrix:
os: [macos-latest]
python-version: ["3.7", "3.8", "3.9", "3.10"]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/windows.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ jobs:
fail-fast: false
matrix:
os: [windows-latest]
python-version: ["3.7", "3.8", "3.9", "3.10"]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
fetch-depth: 0

Expand All @@ -37,7 +37,7 @@ jobs:
uses: microsoft/setup-msbuild@v1.0.2

- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
cmake_policy(SET CMP0135 NEW)
endif()

set(KALDI_DECODER_VERSION "0.2.5")
set(KALDI_DECODER_VERSION "0.2.6")

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
Expand Down
26 changes: 10 additions & 16 deletions cmake/kaldifst.cmake
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
function(download_kaldifst)
include(FetchContent)

set(kaldifst_URL "https://github.com/k2-fsa/kaldifst/archive/refs/tags/v1.7.10.tar.gz")
set(kaldifst_URL2 "https://hub.nuaa.cf/k2-fsa/kaldifst/archive/refs/tags/v1.7.10.tar.gz")
set(kaldifst_HASH "SHA256=7f7b3173a6584a6b1987f65ae7af2ac453d66b845f875a9d31074b8d2cd0de54")
set(kaldifst_URL "https://github.com/k2-fsa/kaldifst/archive/refs/tags/v1.7.11.tar.gz")
set(kaldifst_URL2 "https://hub.nuaa.cf/k2-fsa/kaldifst/archive/refs/tags/v1.7.11.tar.gz")
set(kaldifst_HASH "SHA256=b43b3332faa2961edc730e47995a58cd4e22ead21905d55b0c4a41375b4a525f")

# If you don't have access to the Internet,
# please pre-download kaldifst
set(possible_file_locations
$ENV{HOME}/Downloads/kaldifst-1.7.10.tar.gz
${CMAKE_SOURCE_DIR}/kaldifst-1.7.10.tar.gz
${CMAKE_BINARY_DIR}/kaldifst-1.7.10.tar.gz
/tmp/kaldifst-1.7.10.tar.gz
/star-fj/fangjun/download/github/kaldifst-1.7.10.tar.gz
$ENV{HOME}/Downloads/kaldifst-1.7.11.tar.gz
${CMAKE_SOURCE_DIR}/kaldifst-1.7.11.tar.gz
${CMAKE_BINARY_DIR}/kaldifst-1.7.11.tar.gz
/tmp/kaldifst-1.7.11.tar.gz
/star-fj/fangjun/download/github/kaldifst-1.7.11.tar.gz
)

foreach(f IN LISTS possible_file_locations)
Expand Down Expand Up @@ -50,18 +50,12 @@ function(download_kaldifst)
${kaldifst_SOURCE_DIR}
)

target_include_directories(fst
PUBLIC
${openfst_SOURCE_DIR}/src/include
)

set_target_properties(kaldifst_core PROPERTIES OUTPUT_NAME "kaldi-decoder-kaldi-fst-core")
set_target_properties(fst PROPERTIES OUTPUT_NAME "kaldi-decoder-fst")

if(KALDI_DECODER_BUILD_PYTHON AND WIN32)
install(TARGETS kaldifst_core fst DESTINATION ..)
install(TARGETS kaldifst_core DESTINATION ..)
else()
install(TARGETS kaldifst_core fst DESTINATION lib)
install(TARGETS kaldifst_core DESTINATION lib)
endif()

endfunction()
Expand Down
91 changes: 91 additions & 0 deletions cmake/openfst.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Copyright (c) 2020 Xiaomi Corporation (author: Fangjun Kuang)

function(download_openfst)
include(FetchContent)

set(openfst_URL "https://github.com/csukuangfj/openfst/archive/refs/tags/sherpa-onnx-2024-06-13.tar.gz")
set(openfst_URL2 "https://hub.nuaa.cf/csukuangfj/openfst/archive/refs/tags/sherpa-onnx-2024-06-13.tar.gz")
set(openfst_HASH "SHA256=f10a71c6b64d89eabdc316d372b956c30c825c7c298e2f20c780320e8181ffb6")

# If you don't have access to the Internet,
# please pre-download it
set(possible_file_locations
$ENV{HOME}/Downloads/openfst-sherpa-onnx-2024-06-13.tar.gz
${CMAKE_SOURCE_DIR}/openfst-sherpa-onnx-2024-06-13.tar.gz
${CMAKE_BINARY_DIR}/openfst-sherpa-onnx-2024-06-13.tar.gz
/tmp/openfst-sherpa-onnx-2024-06-13.tar.gz
/star-fj/fangjun/download/github/openfst-sherpa-onnx-2024-06-13.tar.gz
)

foreach(f IN LISTS possible_file_locations)
if(EXISTS ${f})
set(openfst_URL "${f}")
file(TO_CMAKE_PATH "${openfst_URL}" openfst_URL)
set(openfst_URL2)
break()
endif()
endforeach()

set(HAVE_BIN OFF CACHE BOOL "" FORCE)
set(HAVE_SCRIPT OFF CACHE BOOL "" FORCE)
set(HAVE_COMPACT OFF CACHE BOOL "" FORCE)
set(HAVE_COMPRESS OFF CACHE BOOL "" FORCE)
set(HAVE_CONST OFF CACHE BOOL "" FORCE)
set(HAVE_FAR OFF CACHE BOOL "" FORCE)
set(HAVE_GRM OFF CACHE BOOL "" FORCE)
set(HAVE_PDT OFF CACHE BOOL "" FORCE)
set(HAVE_MPDT OFF CACHE BOOL "" FORCE)
set(HAVE_LINEAR OFF CACHE BOOL "" FORCE)
set(HAVE_LOOKAHEAD OFF CACHE BOOL "" FORCE)
set(HAVE_NGRAM OFF CACHE BOOL "" FORCE)
set(HAVE_PYTHON OFF CACHE BOOL "" FORCE)
set(HAVE_SPECIAL OFF CACHE BOOL "" FORCE)

if(NOT WIN32)
FetchContent_Declare(openfst
URL
${openfst_URL}
${openfst_URL2}
URL_HASH ${openfst_HASH}
PATCH_COMMAND
sed -i.bak s/enable_testing\(\)//g "src/CMakeLists.txt" &&
sed -i.bak s/add_subdirectory\(test\)//g "src/CMakeLists.txt" &&
sed -i.bak /message/d "src/script/CMakeLists.txt"
# sed -i.bak s/add_subdirectory\(script\)//g "src/CMakeLists.txt" &&
# sed -i.bak s/add_subdirectory\(extensions\)//g "src/CMakeLists.txt"
)
else()
FetchContent_Declare(openfst
URL ${openfst_URL}
URL_HASH ${openfst_HASH}
)
endif()

FetchContent_GetProperties(openfst)
if(NOT openfst_POPULATED)
message(STATUS "Downloading openfst from ${openfst_URL}")
FetchContent_Populate(openfst)
endif()
message(STATUS "openfst is downloaded to ${openfst_SOURCE_DIR}")
add_subdirectory(${openfst_SOURCE_DIR} ${openfst_BINARY_DIR} EXCLUDE_FROM_ALL)
set(openfst_SOURCE_DIR ${openfst_SOURCE_DIR} PARENT_SCOPE)

set_target_properties(fst PROPERTIES OUTPUT_NAME "kaldi-decoder-fst")

target_include_directories(fst
PUBLIC
${openfst_SOURCE_DIR}/src/include
)

if(KALDI_DECODER_BUILD_PYTHON AND WIN32)
install(TARGETS fst DESTINATION ..)
else()
install(TARGETS fst DESTINATION lib)
endif()

if(WIN32 AND BUILD_SHARED_LIBS)
install(TARGETS fst DESTINATION bin)
endif()
endfunction()

download_openfst()
6 changes: 5 additions & 1 deletion kaldi-decoder/python/csrc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ if(APPLE)
OUTPUT_VARIABLE PYTHON_SITE_PACKAGE_DIR
)
message(STATUS "PYTHON_SITE_PACKAGE_DIR: ${PYTHON_SITE_PACKAGE_DIR}")
target_link_libraries(_kaldi_decoder PRIVATE "-Wl,-rpath,${PYTHON_SITE_PACKAGE_DIR}")
if(PYTHON_SITE_PACKAGE_DIR STREQUAL "")
message(WARNING "PYTHON_SITE_PACKAGE_DIR is empty!")
else()
target_link_libraries(_kaldi_decoder PRIVATE "-Wl,-rpath,${PYTHON_SITE_PACKAGE_DIR}")
endif()
endif()

if(NOT WIN32)
Expand Down

0 comments on commit 503eacc

Please sign in to comment.