❓ General Questions
How to crosscompile the mlc llm android with adb shell to run it on my android phone, I already finish the process of mlc-llm package,
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(217,33): error C3536: '$L0': cannot be used before it is initialized [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(217,33): error C3536: '$L0': cannot be used before it is initialized [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(217,51): error C2100: illegal indirection on operand of type 'int' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(218,5): error C3861: 'LogFatal': identifier not found [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(232,58): error C2061: syntax error: identifier 'VocabType' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(233,7): error C2065: 'vocab_type': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(233,21): error C2653: 'VocabType': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(233,32): error C2065: 'BYTE_FALLBACK': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(235,14): error C2065: 'vocab_type': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(235,28): error C2653: 'VocabType': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(235,39): error C2065: 'BYTE_LEVEL': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(244,1): error C2653: 'TokenizerInfo': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(246,5): error C2061: syntax error: identifier 'VocabType' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(249,5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(249,19): error C2065: 'vocab_type': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(249,63): error C2065: 'prepend_space_in_tokenization': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(249,94): error C2550: 'Impl': constructor initializer list can only be used in constructor definition [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(250,3): error C2065: 'decoded_vocab_': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(252,5): error C2065: 'decoded_vocab_': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(252,51): error C2065: 'vocab_type_': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(254,1): warning C4508: 'Impl': function should return a value; 'void' return type assumed [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(256,13): error C2653: 'TokenizerInfo': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(256,34): error C2270: 'DumpMetadata': modifier not allowed on non-member function [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(259,73): error C2065: 'vocab_type_': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(260,58): error C2065: 'prepend_space_in_tokenization_': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(264,1): error C2653: 'TokenizerInfo': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(266,5): error C2061: syntax error: identifier 'VocabType' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(269,5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(269,52): error C2065: 'vocab_type': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(269,64): error C2065: 'prepend_space_in_tokenization': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(269,96): error C2550: 'TokenizerInfo': constructor initializer list can only be used in constructor definition [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(269,97): warning C4508: 'TokenizerInfo': function should return a value; 'void' return type assumed [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(271,5): error C2653: 'TokenizerInfo': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(271,20): error C2270: 'GetVocabSize': modifier not allowed on non-member function [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(271,50): error C2065: 'pimpl_': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(272,11): error C2653: 'TokenizerInfo': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(272,38): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(272,26): error C2146: syntax error: missing ';' before identifier 'GetVocabType' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(272,47): error C2143: syntax error: missing ';' before '{' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(272,47): error C2447: '{': missing function header (old-style formal list?) [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(273,6): error C2653: 'TokenizerInfo': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(273,21): error C2270: 'GetPrependSpaceInTokenization': modifier not allowed on non-member function [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(274,10): error C2065: 'pimpl_': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(276,33): error C2653: 'TokenizerInfo': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(276,48): error C2270: 'GetDecodedVocab': modifier not allowed on non-member function [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(277,10): error C2065: 'pimpl_': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(279,13): error C2653: 'TokenizerInfo': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(279,28): error C2270: 'DumpMetadata': modifier not allowed on non-member function [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(279,58): error C2065: 'pimpl_': undeclared identifier [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(281,15): error C2653: 'TokenizerInfo': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(281,50): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(281,1): error C2365: 'TokenizerInfo': redefinition; previous definition was 'function' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(264,16):
see declaration of 'TokenizerInfo'
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(281,30): error C2146: syntax error: missing ';' before identifier 'FromVocabAndMetadata' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(283,3): error C2143: syntax error: missing ';' before '{' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(283,3): error C2447: '{': missing function header (old-style formal list?) [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(316,15): error C2653: 'TokenizerInfo': is not a class or namespace name [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(316,45): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(316,1): error C2365: 'TokenizerInfo': redefinition; previous definition was 'function' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(264,16):
see declaration of 'TokenizerInfo'
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(316,30): error C2146: syntax error: missing ';' before identifier 'FromHuggingFace' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(318,3): error C2143: syntax error: missing ';' before '{' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(318,3): error C2447: '{': missing function header (old-style formal list?) [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(332,1): error C2059: syntax error: '}' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\tokenizer.cc(332,1): error C2143: syntax error: missing ';' before '}' [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
Generating code...
E:\mlc_llm\mlc-llm\3rdparty\xgrammar\cpp\grammar_serializer.cc(46,1): warning C4715: 'xgrammar::BNFGrammarPrinter::PrintRuleExpr': not all control paths return a value [E:\mlc_llm\mlc-llm\build-android\mlc_llm_objs.vcxproj]
This is what I met during
mkdir -p build-android
cd build-android
cmake -DCMAKE_TOOLCHAIN_FILE=../../ndk_28/android-ndk-r28/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DUSE_OPENCL=ON ..
cd ..
cmake --build build-android --config Release -j8
And I also cannot compile the build file on android studio, which method is better and how can I build that correctly?