@@ -102,6 +102,25 @@ else()
102102endif ()
103103set (TOKENIZERS_CPP_INCLUDE ${TOKENIZERS_CPP_ROOT} /include )
104104
105+ # Find cargo executable
106+ if (CMAKE_HOST_WIN32 )
107+ set (USER_HOME "$ENV{USERPROFILE} " )
108+ else ()
109+ set (USER_HOME "$ENV{HOME} " )
110+ endif ()
111+ if (NOT DEFINED CARGO_HOME)
112+ if ("$ENV{CARGO_HOME} " STREQUAL "" )
113+ set (CARGO_HOME "${USER_HOME} /.cargo" )
114+ else ()
115+ set (CARGO_HOME "$ENV{CARGO_HOME} " )
116+ endif ()
117+ endif ()
118+
119+ find_program (CARGO_EXECUTABLE cargo
120+ HINTS "${CARGO_HOME} "
121+ PATH_SUFFIXES "bin" )
122+ mark_as_advanced (CARGO_EXECUTABLE)
123+
105124# NOTE: need to use cmake -E env to be portable in win
106125add_custom_command (
107126 OUTPUT ${TOKENIZERS_RUST_LIB}
@@ -110,7 +129,7 @@ add_custom_command(
110129 CARGO_TARGET_DIR=${TOKENIZERS_CPP_CARGO_TARGET_DIR}
111130 ${CARGO_EXTRA_ENVS}
112131 RUSTFLAGS="${TOKENIZERS_CPP_RUST_FLAGS} "
113- cargo build ${TOKENIZERS_CPP_CARGO_FLAGS}
132+ ${CARGO_EXECUTABLE} build ${TOKENIZERS_CPP_CARGO_FLAGS}
114133 WORKING_DIRECTORY ${TOKENIZERS_CPP_CARGO_SOURCE_PATH}
115134 POST_BUILD COMMAND
116135 ${CMAKE_COMMAND} -E copy
@@ -123,14 +142,14 @@ set(
123142 src/huggingface_tokenizer.cc
124143 src/rwkv_world_tokenizer.cc
125144)
126- add_library (tokenizer_cpp_objs OBJECT ${TOKENIZER_CPP_SRCS} )
127- target_include_directories (tokenizer_cpp_objs PRIVATE sentencepiece/src)
128- target_include_directories (tokenizer_cpp_objs PRIVATE msgpack/include )
129- target_include_directories (tokenizer_cpp_objs PUBLIC ${TOKENIZERS_CPP_INCLUDE} )
145+ add_library (tokenizers_cpp STATIC ${TOKENIZER_CPP_SRCS} )
146+ target_include_directories (tokenizers_cpp PRIVATE sentencepiece/src)
147+ target_include_directories (tokenizers_cpp PRIVATE msgpack/include )
148+ target_include_directories (tokenizers_cpp PUBLIC ${TOKENIZERS_CPP_INCLUDE} )
130149if (MLC_ENABLE_SENTENCEPIECE_TOKENIZER STREQUAL "ON" )
131- target_compile_definitions (tokenizer_cpp_objs PUBLIC MLC_ENABLE_SENTENCEPIECE_TOKENIZER)
150+ target_compile_definitions (tokenizers_cpp PUBLIC MLC_ENABLE_SENTENCEPIECE_TOKENIZER)
132151endif ()
133- target_link_libraries (tokenizer_cpp_objs PRIVATE msgpack-cxx)
152+ target_link_libraries (tokenizers_cpp PRIVATE msgpack-cxx)
134153
135154# sentencepiece config
136155option (SPM_ENABLE_SHARED "override sentence piece config" OFF )
@@ -149,6 +168,5 @@ add_subdirectory(sentencepiece sentencepiece EXCLUDE_FROM_ALL)
149168add_library (tokenizers_c INTERFACE ${TOKENIZERS_RUST_LIB} )
150169target_link_libraries (tokenizers_c INTERFACE ${TOKENIZERS_RUST_LIB} ${TOKENIZERS_C_LINK_LIBS} )
151170
152- add_library (tokenizers_cpp STATIC $<TARGET_OBJECTS:tokenizer_cpp_objs>)
153171target_link_libraries (tokenizers_cpp PRIVATE tokenizers_c sentencepiece-static ${TOKENIZERS_CPP_LINK_LIBS} )
154172target_include_directories (tokenizers_cpp PUBLIC ${TOKENIZERS_CPP_INCLUDE} )
0 commit comments