File size: 7,278 Bytes
3fd1a35 3706f1c 3fd1a35 3706f1c 3fd1a35 0804773 3fd1a35 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | cmake_minimum_required(VERSION 3.20)
project(ling3_rknn VERSION 0.1.0 LANGUAGES CXX)
option(LING3_WITH_RKNN "Build the direct RKNN backend" OFF)
option(LING3_EXPERIMENTAL_MTP "Build experimental NEXTN/MTP probes (not production decoding)" OFF)
option(LING3_TUNE_A76 "Tune release builds for Cortex-A76" ON)
option(LING3_WITH_ICU "Use ICU for exact tokenizer normalization and splitting" ON)
set(RKNN_ROOT "" CACHE PATH "Local RKNPU2 root from https://github.com/airockchip/rknpu2 (contains include/ and lib/)")
add_library(ling3_core STATIC
src/core_workers.cpp
src/cpu_kernels.cpp
src/decoder.cpp
src/decoder_state.cpp
src/execution_plan.cpp
src/gdn_step.cpp
src/layer0.cpp
src/linear.cpp
src/model_package.cpp
src/mla_npu.cpp
src/quantization.cpp
src/rknn_backend.cpp
src/router.cpp
src/tokenizer.cpp
src/w4_linear.cpp
)
target_include_directories(ling3_core PUBLIC include)
target_compile_features(ling3_core PUBLIC cxx_std_20)
target_compile_options(ling3_core PRIVATE -Wall -Wextra -Wpedantic)
target_compile_definitions(ling3_core PUBLIC LING3_WITH_RKNN=$<BOOL:${LING3_WITH_RKNN}>)
target_compile_definitions(ling3_core PUBLIC LING3_EXPERIMENTAL_MTP=$<BOOL:${LING3_EXPERIMENTAL_MTP}>)
if(LING3_WITH_ICU)
find_package(ICU COMPONENTS uc i18n QUIET)
endif()
if(ICU_FOUND)
target_compile_definitions(ling3_core PUBLIC LING3_WITH_ICU=1)
target_link_libraries(ling3_core PUBLIC ICU::uc ICU::i18n)
else()
target_compile_definitions(ling3_core PUBLIC LING3_WITH_ICU=0)
message(STATUS "ICU development files not found; tokenizer uses a non-production fallback")
endif()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$" AND LING3_TUNE_A76)
target_compile_options(ling3_core PRIVATE $<$<CONFIG:Release>:-mcpu=cortex-a76>)
endif()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$")
include(CheckLibraryExists)
check_library_exists(mvec _ZGVnN4v_expf "" LING3_HAS_VECTOR_EXP)
if(LING3_HAS_VECTOR_EXP)
target_compile_definitions(ling3_core PRIVATE LING3_WITH_VECTOR_EXP=1)
target_link_libraries(ling3_core PUBLIC mvec)
endif()
endif()
if(LING3_WITH_RKNN)
# Support both a flattened SDK tree and the official rknpu2 checkout:
# runtime/Linux/librknn_api/{include,aarch64}.
find_path(RKNN_INCLUDE_DIR rknn_api.h
HINTS "${RKNN_ROOT}"
PATH_SUFFIXES include runtime/Linux/librknn_api/include
REQUIRED)
find_library(RKNN_LIBRARY rknnrt
HINTS "${RKNN_ROOT}"
PATH_SUFFIXES lib aarch64 runtime/Linux/librknn_api/aarch64
REQUIRED)
target_include_directories(ling3_core PRIVATE "${RKNN_INCLUDE_DIR}")
target_link_libraries(ling3_core PUBLIC "${RKNN_LIBRARY}" pthread)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$")
add_executable(ling3-quant-loss-probe EXCLUDE_FROM_ALL tools/quant_loss_probe.cpp)
add_executable(ling3-linear-bridge-check EXCLUDE_FROM_ALL tools/linear_bridge_check.cpp)
target_link_libraries(ling3-linear-bridge-check PRIVATE ling3_core)
target_include_directories(ling3-quant-loss-probe PRIVATE third_party/nlohmann)
target_link_libraries(ling3-quant-loss-probe PRIVATE ling3_core)
add_executable(ling3-mla-npu-probe EXCLUDE_FROM_ALL tools/mla_npu_probe.cpp)
target_include_directories(ling3-mla-npu-probe PRIVATE src third_party/nlohmann "${RKNN_INCLUDE_DIR}")
target_compile_options(ling3-mla-npu-probe PRIVATE -O3 -mcpu=cortex-a76 -Wall -Wextra)
target_link_libraries(ling3-mla-npu-probe PRIVATE ling3_core)
endif()
endif()
set_target_properties(ling3_core PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
add_executable(ling3-rknn
src/main.cpp
src/service.cpp
)
target_link_libraries(ling3-rknn PRIVATE ling3_core)
add_executable(mindnano-infer src/portable_main.cpp)
target_include_directories(mindnano-infer PRIVATE third_party/nlohmann)
target_link_libraries(mindnano-infer PRIVATE ling3_core)
include(CTest)
if(BUILD_TESTING)
add_executable(ling3-decoder-state-test tests/decoder_state_test.cpp)
target_link_libraries(ling3-decoder-state-test PRIVATE ling3_core)
add_test(NAME ling3-decoder-state-test COMMAND ling3-decoder-state-test)
add_executable(ling3-generation-control-test tests/generation_control_test.cpp)
target_compile_features(ling3-generation-control-test PRIVATE cxx_std_20)
target_include_directories(ling3-generation-control-test PRIVATE include third_party/nlohmann)
target_link_libraries(ling3-generation-control-test PRIVATE pthread)
add_test(NAME ling3-generation-control-test COMMAND ling3-generation-control-test)
add_executable(ling3-precision-policy-test tests/precision_policy_test.cpp)
target_link_libraries(ling3-precision-policy-test PRIVATE ling3_core)
add_test(NAME ling3-precision-policy-test COMMAND ling3-precision-policy-test)
if(LING3_WITH_RKNN)
# Explicit model-backed test: run with MODEL.l3r, one model process at a time.
add_executable(ling3-checkpoint-model-test tests/checkpoint_model_test.cpp)
target_link_libraries(ling3-checkpoint-model-test PRIVATE ling3_core)
add_executable(ling3-w4-workspace-test tests/w4_workspace_test.cpp)
target_link_libraries(ling3-w4-workspace-test PRIVATE ling3_core)
add_test(NAME ling3-w4-workspace-test COMMAND ling3-w4-workspace-test)
set_tests_properties(ling3-w4-workspace-test PROPERTIES LABELS rknn_hardware)
endif()
add_executable(ling3-model-reclaim-test tests/model_reclaim_test.cpp)
target_link_libraries(ling3-model-reclaim-test PRIVATE ling3_core)
add_test(NAME ling3-model-reclaim-test COMMAND ling3-model-reclaim-test)
add_executable(ling3-chat-protocol-test tests/chat_protocol_test.cpp)
target_compile_features(ling3-chat-protocol-test PRIVATE cxx_std_20)
target_include_directories(ling3-chat-protocol-test PRIVATE include third_party/nlohmann)
add_test(NAME ling3-chat-protocol-test COMMAND ling3-chat-protocol-test)
add_executable(ling3-chat-tools-test tests/chat_tools_test.cpp)
target_compile_features(ling3-chat-tools-test PRIVATE cxx_std_20)
target_include_directories(ling3-chat-tools-test PRIVATE include third_party/nlohmann)
add_test(NAME ling3-chat-tools-test COMMAND ling3-chat-tools-test
${CMAKE_CURRENT_SOURCE_DIR}/tests/chat_tools_golden.json)
add_executable(ling3-router-test tests/router_test.cpp)
target_link_libraries(ling3-router-test PRIVATE ling3_core)
add_test(NAME ling3-router-test COMMAND ling3-router-test)
add_executable(ling3-quantization-test tests/quantization_test.cpp)
target_link_libraries(ling3-quantization-test PRIVATE ling3_core)
add_test(NAME ling3-quantization-test COMMAND ling3-quantization-test)
add_executable(ling3-activation-test tests/activation_test.cpp)
target_link_libraries(ling3-activation-test PRIVATE ling3_core)
add_test(NAME ling3-activation-test COMMAND ling3-activation-test)
if(LING3_HAS_VECTOR_EXP)
add_test(NAME ling3-vector-activation-test COMMAND ling3-activation-test)
set_tests_properties(ling3-vector-activation-test PROPERTIES ENVIRONMENT "LING3_VECTOR_MATH=1")
endif()
endif()
|