Skip to content

Commit b1b6f9c

Browse files
Conda forge fixes for 2024.3 (#213)
* Ability to build w/o C++ extension * Avoid installation of PRCE2 artifacts together with OpenVINO Tokenizers (#211) * Use tarballs * Added friendly names for jobs * Use manylinux package * Use more options * Some extra fixes
1 parent fb0157c commit b1b6f9c

File tree

5 files changed

+86
-56
lines changed

5 files changed

+86
-56
lines changed

.github/workflows/linux.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ concurrency:
1616
env:
1717
PYTHON_VERSION: '3.11'
1818
OV_BRANCH: 'releases/2024/3'
19-
OV_TARBALL: ''
19+
OV_TARBALL: 'https://storage.openvinotoolkit.org/repositories/openvino/packages/2024.3/linux/l_openvino_toolkit_centos7_2024.3.0.16041.1e3b88e4e3f_x86_64.tgz'
2020

2121
permissions: read-all
2222

2323
jobs:
2424
openvino_download:
25+
name: Try to download prebuilt OpenVINO
2526
outputs:
2627
status: ${{ steps.openvino_download.outcome }}
2728
timeout-minutes: 10
@@ -51,6 +52,7 @@ jobs:
5152
if-no-files-found: 'error'
5253

5354
openvino_build:
55+
name: Build OpenVINO
5456
needs: [openvino_download]
5557
if: needs.openvino_download.outputs.status != 'success'
5658
timeout-minutes: 150
@@ -350,4 +352,3 @@ jobs:
350352
run: |
351353
python3 -m pytest tokenizers_test.py
352354
working-directory: ${{ env.OPENVINO_TOKENIZERS_REPO }}/tests
353-

.github/workflows/mac.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@ env:
1717
PYTHON_VERSION: '3.11'
1818
MACOSX_DEPLOYMENT_TARGET: '10.12'
1919
OV_BRANCH: 'releases/2024/3'
20-
OV_TARBALL: ''
20+
OV_TARBALL: 'https://storage.openvinotoolkit.org/repositories/openvino/packages/2024.3/macos/m_openvino_toolkit_macos_12_6_2024.3.0.16041.1e3b88e4e3f_x86_64.tgz'
2121

2222
permissions: read-all
2323

2424
jobs:
2525
openvino_download:
26+
name: Try to download prebuilt OpenVINO
2627
outputs:
2728
status: ${{ steps.openvino_download.outcome }}
2829
timeout-minutes: 10
@@ -52,6 +53,7 @@ jobs:
5253
if-no-files-found: 'error'
5354

5455
openvino_build:
56+
name: Build OpenVINO
5557
needs: [openvino_download]
5658
if: needs.openvino_download.outputs.status != 'success'
5759
timeout-minutes: 150

.github/workflows/windows.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ concurrency:
1616
env:
1717
PYTHON_VERSION: '3.11'
1818
OV_BRANCH: 'releases/2024/3'
19-
OV_TARBALL: ''
19+
OV_TARBALL: 'https://storage.openvinotoolkit.org/repositories/openvino/packages/2024.3/windows/w_openvino_toolkit_windows_2024.3.0.16041.1e3b88e4e3f_x86_64.zip'
2020

2121
permissions: read-all
2222

2323
jobs:
2424
openvino_download:
25+
name: Try to download prebuilt OpenVINO
2526
outputs:
2627
status: ${{ steps.openvino_download.outcome }}
2728
timeout-minutes: 10
@@ -51,6 +52,7 @@ jobs:
5152
if-no-files-found: 'error'
5253

5354
openvino_build:
55+
name: Build OpenVINO
5456
needs: [openvino_download]
5557
if: needs.openvino_download.outputs.status != 'success'
5658
timeout-minutes: 150

CMakeLists.txt

+36-16
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,44 @@ project(openvino_tokenizers
2727

2828
include(cmake/platforms.cmake)
2929

30-
# Looking for OpenVINO in the python distribution. It doesn't work for cross-compiling build
31-
if(NOT CMAKE_CROSSCOMPILING)
32-
find_package(Python3 REQUIRED)
33-
execute_process(
34-
COMMAND ${Python3_EXECUTABLE} -c "from openvino.utils import get_cmake_path; print(get_cmake_path(), end='')"
35-
OUTPUT_VARIABLE OpenVINO_DIR_PY
36-
ERROR_QUIET
37-
)
38-
endif()
39-
40-
# Find OpenVINODeveloperPackage first to compile with SDL flags
41-
find_package(OpenVINODeveloperPackage QUIET PATHS "${OpenVINO_DIR}")
42-
if(NOT OpenVINODeveloperPackage_FOUND)
43-
find_package(OpenVINO REQUIRED COMPONENTS Runtime OPTIONAL_COMPONENTS TensorFlow PATHS "${OpenVINO_DIR_PY}")
44-
endif()
30+
option(BUILD_CPP_EXTENSION "Builds C++ extension for OpenVINO Tokenizers" ON)
4531

4632
if(DEFINED PY_BUILD_CMAKE_PACKAGE_VERSION AND NOT PY_BUILD_CMAKE_PACKAGE_VERSION EQUAL CMAKE_PROJECT_VERSION)
4733
message(FATAL_ERROR "CMAKE_PROJECT_VERSION (${CMAKE_PROJECT_VERSION}) is not equal to PY_BUILD_CMAKE_PACKAGE_VERSION (${PY_BUILD_CMAKE_PACKAGE_VERSION})")
4834
endif()
4935

50-
add_subdirectory(src)
36+
if(BUILD_CPP_EXTENSION)
37+
# Looking for OpenVINO in the python distribution. It doesn't work for cross-compiling build
38+
if(NOT CMAKE_CROSSCOMPILING)
39+
find_package(Python3 REQUIRED)
40+
execute_process(
41+
COMMAND ${Python3_EXECUTABLE} -c "from openvino.utils import get_cmake_path; print(get_cmake_path(), end='')"
42+
OUTPUT_VARIABLE OpenVINO_DIR_PY
43+
ERROR_QUIET
44+
)
45+
endif()
46+
47+
# Find OpenVINODeveloperPackage first to compile with SDL flags
48+
find_package(OpenVINODeveloperPackage QUIET PATHS "${OpenVINO_DIR}")
49+
if(NOT OpenVINODeveloperPackage_FOUND)
50+
find_package(OpenVINO REQUIRED COMPONENTS Runtime OPTIONAL_COMPONENTS TensorFlow PATHS "${OpenVINO_DIR_PY}")
51+
endif()
52+
53+
add_subdirectory(src)
54+
endif()
55+
56+
# install python files
57+
58+
install(FILES "${openvino_tokenizers_SOURCE_DIR}/LICENSE"
59+
"${openvino_tokenizers_SOURCE_DIR}/third-party-programs.txt"
60+
"${openvino_tokenizers_SOURCE_DIR}/SECURITY.md"
61+
DESTINATION "${PY_BUILD_CMAKE_PACKAGE_NAME}-${PY_BUILD_CMAKE_PACKAGE_VERSION}.dist-info"
62+
COMPONENT openvino_tokenizers_licenses
63+
EXCLUDE_FROM_ALL)
64+
65+
configure_file("${openvino_tokenizers_SOURCE_DIR}/cmake/templates/__version__.py.in"
66+
"${openvino_tokenizers_BINARY_DIR}/python/__version__.py" @ONLY)
67+
install(FILES "${openvino_tokenizers_BINARY_DIR}/python/__version__.py"
68+
DESTINATION "openvino_tokenizers"
69+
COMPONENT openvino_tokenizers_python
70+
EXCLUDE_FROM_ALL)

src/CMakeLists.txt

+41-36
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ if(POLICY CMP0135)
2020
cmake_policy(SET CMP0135 NEW)
2121
endif()
2222

23+
if(POLICY CMP0169)
24+
cmake_policy(SET CMP0169 OLD)
25+
endif()
26+
2327
function(ov_tokenizers_set_cxx_standard)
2428
foreach(build_type "" "_DEBUG" "_MINSIZEREL" "_RELEASE" "_RELWITHDEBINFO")
2529
set(flag_var "CMAKE_CXX_FLAGS${build_type}")
@@ -32,15 +36,15 @@ function(ov_tokenizers_set_cxx_standard)
3236
set(CMAKE_CXX_STANDARD_REQUIRED ON PARENT_SCOPE)
3337
endfunction()
3438

39+
if(CMAKE_COMPILER_IS_GNUCXX)
40+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
41+
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
42+
endif()
43+
3544
ov_tokenizers_set_cxx_standard()
3645

3746
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
3847

39-
if(WIN32)
40-
# Set the runtime library globally
41-
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
42-
endif()
43-
4448
# openvino::runtime exports _GLIBCXX_USE_CXX11_ABI=0 on CentOS7.
4549
# It needs to be propagated to every library openvino_tokenizers links with.
4650
# That prohibits linkage with prebuilt libraries because they aren't compiled with _GLIBCXX_USE_CXX11_ABI=0.
@@ -50,7 +54,8 @@ if("_GLIBCXX_USE_CXX11_ABI=0" IN_LIST OPENVINO_RUNTIME_COMPILE_DEFINITIONS)
5054
set(USE_ABI0 ON CACHE BOOL "Set -D_GLIBCXX_USE_CXX11_ABI to 0 for fast_tokenizers")
5155
endif()
5256

53-
option(BUILD_FAST_TOKENIZERS "Compile core_tokenizers instead of downloading prebuilt library. The option is forced to ON if _GLIBCXX_USE_CXX11_ABI=0" ${USE_ABI0})
57+
# The option is forced to ON if _GLIBCXX_USE_CXX11_ABI=0
58+
cmake_dependent_option(BUILD_FAST_TOKENIZERS "Compile core_tokenizers instead of downloading prebuilt library" OFF "NOT USE_ABI0" ON)
5459

5560
#
5661
# Compile flags
@@ -79,6 +84,11 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${c_cxx_flags}")
7984
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${cxx_flags} ${c_cxx_flags}")
8085
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${c_cxx_flags}")
8186

87+
if(BUILD_FAST_TOKENIZERS)
88+
# FastTokenizers use static MSVC runtime, hence we have to use it as well
89+
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
90+
endif()
91+
8292
#
8393
# Dependencies
8494
#
@@ -150,7 +160,6 @@ if(BUILD_FAST_TOKENIZERS)
150160
set(EXTERNAL_PROJECT_SOURCE_DIR ${CMAKE_BINARY_DIR}/_deps/fast_tokenizer/src)
151161
set(EXTERNAL_PROJECT_BINARY_DIR ${CMAKE_BINARY_DIR}/_deps/fast_tokenizer/build)
152162
set(EXTERNAL_PROJECT_SUBBUILD_DIR ${CMAKE_BINARY_DIR}/_deps/fast_tokenizer/sub-build)
153-
set(WITH_PYTHON OFF CACHE BOOL "")
154163

155164
FetchContent_Declare(
156165
fast_tokenizer
@@ -194,6 +203,7 @@ else()
194203
URL_HASH SHA256=1ae8ccfdb1066a731bba6ee0881baad5efd2cd661acd9569b689f2586e1a50e9
195204
)
196205
function(ov_tokenizers_build_static_re2)
206+
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
197207
set(BUILD_SHARED_LIBS OFF)
198208
FetchContent_GetProperties(re2)
199209
if(NOT re2_POPULATED)
@@ -254,6 +264,28 @@ function(ov_tokenizers_link_fast_tokenizer)
254264
target_link_libraries(${TARGET_NAME} PRIVATE ${FAST_TOKENIZER_LIBS})
255265
endfunction()
256266

267+
function(ov_tokenizers_link_pcre2)
268+
FetchContent_Declare(
269+
prce2
270+
URL https://github.com/PCRE2Project/pcre2/archive/refs/tags/pcre2-10.44.zip
271+
URL_HASH SHA256=2d87bd1700bd1993ddea7c56aad2b0373ac2b3d52d9cc78842a6d061ffaf0925
272+
)
273+
FetchContent_GetProperties(prce2)
274+
if(NOT prce2_POPULATED)
275+
FetchContent_Populate(prce2)
276+
277+
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
278+
set(PCRE2_STATIC_PIC ON)
279+
set(PCRE2_BUILD_TESTS OFF)
280+
281+
add_subdirectory(${prce2_SOURCE_DIR} ${prce2_BINARY_DIR} EXCLUDE_FROM_ALL)
282+
endif()
283+
284+
target_include_directories(${TARGET_NAME} PRIVATE ${pcre2_BINARY_DIR})
285+
target_link_libraries(${TARGET_NAME} PRIVATE pcre2-8)
286+
target_compile_definitions(${TARGET_NAME} PRIVATE PCRE2_CODE_UNIT_WIDTH=8)
287+
endfunction()
288+
257289
#
258290
# Build library
259291
#
@@ -271,26 +303,14 @@ add_library(${TARGET_NAME} SHARED ${SRC})
271303

272304
ov_tokenizers_link_sentencepiece(${TARGET_NAME})
273305
ov_tokenizers_link_fast_tokenizer(${TARGET_NAME})
306+
ov_tokenizers_link_pcre2(${TARGET_NAME})
274307

275308
string(REPLACE " " ";" extra_flags "${c_cxx_flags} ${cxx_flags}")
276309
set_target_properties(${TARGET_NAME} PROPERTIES COMPILE_OPTIONS "${extra_flags}")
277310

278311
target_compile_definitions(${TARGET_NAME} PRIVATE IMPLEMENT_OPENVINO_EXTENSION_API)
279312
target_link_libraries(${TARGET_NAME} PRIVATE openvino::runtime)
280313

281-
# Fetch PCRE2
282-
include(FetchContent)
283-
FetchContent_Declare(
284-
PCRE2
285-
URL https://github.com/PCRE2Project/pcre2/archive/refs/tags/pcre2-10.44.zip
286-
URL_HASH SHA256=2d87bd1700bd1993ddea7c56aad2b0373ac2b3d52d9cc78842a6d061ffaf0925
287-
)
288-
FetchContent_MakeAvailable(PCRE2)
289-
290-
target_include_directories(${TARGET_NAME} PRIVATE ${PCRE2_BINARY_DIR})
291-
target_link_libraries(${TARGET_NAME} PRIVATE pcre2-8)
292-
target_compile_definitions(${TARGET_NAME} PRIVATE PCRE2_CODE_UNIT_WIDTH=8)
293-
294314
if(OpenVINO_Frontend_TensorFlow_FOUND)
295315
target_link_libraries(${TARGET_NAME} PRIVATE openvino::frontend::tensorflow)
296316
target_compile_definitions(${TARGET_NAME} PRIVATE OpenVINO_Frontend_TensorFlow_FOUND)
@@ -393,26 +413,11 @@ if(extra_libs)
393413
install(FILES ${extra_libs} DESTINATION ${extra_libs_location} COMPONENT openvino_tokenizers)
394414
endif()
395415

396-
install(FILES "${openvino_tokenizers_SOURCE_DIR}/LICENSE"
397-
"${openvino_tokenizers_SOURCE_DIR}/third-party-programs.txt"
398-
"${openvino_tokenizers_SOURCE_DIR}/SECURITY.md"
399-
DESTINATION "${PY_BUILD_CMAKE_PACKAGE_NAME}-${PY_BUILD_CMAKE_PACKAGE_VERSION}.dist-info"
400-
COMPONENT openvino_tokenizers_licenses
401-
EXCLUDE_FROM_ALL)
402-
403416
install(FILES "${openvino_tokenizers_SOURCE_DIR}/LICENSE"
404417
"${openvino_tokenizers_SOURCE_DIR}/third-party-programs.txt"
405418
"${openvino_tokenizers_SOURCE_DIR}/README.md"
406419
DESTINATION "docs/openvino_tokenizers"
407-
COMPONENT openvino_tokenizers_docs
408-
EXCLUDE_FROM_ALL)
409-
410-
configure_file("${openvino_tokenizers_SOURCE_DIR}/cmake/templates/__version__.py.in"
411-
"${openvino_tokenizers_BINARY_DIR}/python/__version__.py" @ONLY)
412-
install(FILES "${openvino_tokenizers_BINARY_DIR}/python/__version__.py"
413-
DESTINATION "openvino_tokenizers"
414-
COMPONENT openvino_tokenizers_python
415-
EXCLUDE_FROM_ALL)
420+
COMPONENT openvino_tokenizers_docs)
416421

417422
#
418423
# Cpack configuration

0 commit comments

Comments
 (0)