LiteRT-LM / cmake /modules /fetch_content.cmake
SeaWolf-AI's picture
Upload full LiteRT-LM codebase
5f923cd verified
# Copyright 2026 Google LLC.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
include(FetchContent)
# --- ANTLR ---
set(ANTLR_SRC_DIR ${CMAKE_BINARY_DIR}/_deps/antlr_lib-src/runtime/Cpp/runtime/src CACHE PATH "Path to antlr source directory")
FetchContent_Declare(
antlr_lib
GIT_REPOSITORY https://github.com/antlr/antlr4.git
GIT_TAG 7d5770395bb7b02eb56e7c62662cb1d7c08f42a3
GIT_SHALLOW true
SOURCE_SUBDIR runtime/Cpp
PATCH_COMMAND ${CMAKE_COMMAND} -DTARGET_FILE=${ANTLR_SRC_DIR}/../../CMakeLists.txt -P${LITERTLM_PATCHES_DIR}/antlr_patch.cmake
)
block()
set(CMAKE_POLICY_VERSION_MINIMUM "3.5")
set(ANTLR_BUILD_STATIC ON)
set(ANTLR_BUILD_CPP_TESTS OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(antlr_lib)
endblock()
if(TARGET antlr4_static)
add_library(antlr_lib ALIAS antlr4_static)
endif()
FetchContent_Declare(
antlr_tool
URL "https://www.antlr.org/download/antlr-4.13.2-complete.jar"
DOWNLOAD_DIR "${THIRD_PARTY_DIR}/antlr"
DOWNLOAD_NO_EXTRACT TRUE
)
FetchContent_GetProperties(antlr_tool)
if(NOT antlr_tool_POPULATED)
message(STATUS "[LiteRTLM] Fetching ANTLR 4.13.2 Tool...")
FetchContent_Populate(antlr_tool)
endif()
set(ANTLR_JAR_PATH "${THIRD_PARTY_DIR}/antlr/antlr-4.13.2-complete.jar")
message(STATUS "[LiteRTLM] ANTLR JAR located at: ${ANTLR_JAR_PATH}")
# --- Corrosion ---
set(CORROSION_SRC_DIR ${THIRD_PARTY_DIR}/corrosion CACHE PATH "Path to corrosion source directory")
set(CORROSION_INCLUDE_DIR "${CMAKE_BINARY_DIR}/corrosion_generated/cxxbridge/litertlm_cxx_bridge/include")
FetchContent_Declare(
Corrosion
GIT_REPOSITORY https://github.com/corrosion-rs/corrosion.git
GIT_TAG v0.6.1
SOURCE_DIR ${CORROSION_SRC_DIR}
)
FetchContent_MakeAvailable(Corrosion)
if(TARGET Corrosion)
include(Corrosion)
endif()
# --- Llguidance ---
set(LLGUIDANCE_SRC_DIR ${THIRD_PARTY_DIR}/llguidance CACHE PATH "Path to llguidance source directory")
set(LLGUIDANCE_INCLUDE_DIR "${THIRD_PARTY_DIR}/llguidance/parser")
FetchContent_Declare(
llguidance
GIT_REPOSITORY https://github.com/guidance-ai/llguidance.git
GIT_TAG v1.3.0
SOURCE_DIR ${LLGUIDANCE_SRC_DIR}
)
FetchContent_Populate(llguidance)
# --- LibPNG ---
set(LIBPNG_SRC_DIR ${THIRD_PARTY_DIR}/libpng CACHE PATH "Path to libpng source directory")
FetchContent_Declare(
libpng_lib
GIT_REPOSITORY https://github.com/glennrp/libpng.git
GIT_TAG v1.6.40
GIT_SHALLOW true
SOURCE_DIR ${LIBPNG_SRC_DIR}
)
block()
set(PNG_SHARED OFF)
set(PNG_TESTS OFF)
set(PNG_EXECUTABLES OFF)
set(SKIP_INSTALL_ALL ON)
# Handle ZLIB dependency injection for PNG
if(TARGET zlib)
get_target_property(ZLIB_INCLUDE_DIR zlib INTERFACE_INCLUDE_DIRECTORIES)
set(ZLIB_LIBRARY zlib)
elseif(TARGET zlibstatic)
get_target_property(ZLIB_INCLUDE_DIR zlibstatic INTERFACE_INCLUDE_DIRECTORIES)
set(ZLIB_LIBRARY zlibstatic)
endif()
FetchContent_MakeAvailable(libpng_lib)
endblock()
if(TARGET png_static)
add_library(libpng_lib ALIAS png_static)
endif()
# --- KissFFT ---
set(KISSFFT_SRC_DIR ${THIRD_PARTY_DIR}/kissfft CACHE PATH "Path to kissfft source directory")
FetchContent_Declare(
kissfft_lib
GIT_REPOSITORY https://github.com/mborgerding/kissfft
GIT_TAG 131.2.0
GIT_SHALLOW true
SOURCE_DIR ${KISSFFT_SRC_DIR}
)
block()
cmake_policy(SET CMP0077 OLD)
set(KISSFFT_TEST OFF CACHE BOOL "" FORCE)
set(KISSFFT_TOOLS OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(kissfft_lib)
endblock()
if(TARGET kissfft)
add_library(kissfft_lib ALIAS kissfft)
endif()
# --- MiniAudio ---
set(MINIAUDIO_SRC_DIR ${THIRD_PARTY_DIR}/miniaudio CACHE PATH "Path to miniaudio source directory")
FetchContent_Declare(
miniaudio_lib
GIT_REPOSITORY https://github.com/mackron/miniaudio
GIT_TAG 0.11.25
GIT_SHALLOW true
SOURCE_DIR ${MINIAUDIO_SRC_DIR}
)
FetchContent_MakeAvailable(miniaudio_lib)
if(TARGET miniaudio)
add_library(miniaudio_lib ALIAS miniaudio)
endif()
# --- MiniZip ---
set(MINIZIP_SRC_DIR ${THIRD_PARTY_DIR}/minizip CACHE PATH "Path to minizip source directory")
FetchContent_Declare(
minizip_lib
GIT_REPOSITORY https://github.com/domoticz/minizip
GIT_TAG aee7fbddf118d9363575af96310c29fa747d70c0
GIT_SHALLOW true
SOURCE_DIR ${MINIZIP_SRC_DIR}
)
block()
FetchContent_MakeAvailable(minizip_lib)
endblock()
if(TARGET minizip)
add_library(minizip_lib ALIAS minizip)
endif()
# --- Minja ---
set(MINJA_SRC_DIR ${THIRD_PARTY_DIR}/minja CACHE PATH "Path to minja source directory")
FetchContent_Declare(
minja_lib
GIT_REPOSITORY https://github.com/google/minja
GIT_TAG 021c2293c187789ef13d56c6cfd89c9b134fd80f
GIT_SHALLOW true
SOURCE_DIR ${MINJA_SRC_DIR}
PATCH_COMMAND ${CMAKE_COMMAND} -DTARGET_FILE=${MINJA_SRC_DIR}/CMakeLists.txt -P${LITERTLM_PATCHES_DIR}/minja_patch.cmake
)
# Turn off tests and examples
set(MINJA_TEST_ENABLED OFF CACHE BOOL "")
set(MINJA_EXAMPLE_ENABLE OFF CACHE BOOL "")
set(MINJA_FUZZTEST_ENABLED OFF CACHE BOOL "")
set(MINJA_FUZZTEST_FUZZING_MODE OFF CACHE BOOL "")
FetchContent_MakeAvailable(minja_lib)
if(TARGET minja)
add_library(minja_lib ALIAS minja)
endif()
# --- JSON (Header Only - Populated) ---
set(JSON_SRC_DIR ${THIRD_PARTY_DIR}/json CACHE PATH "Path to json headers")
FetchContent_Declare(
json_lib
GIT_REPOSITORY https://github.com/nlohmann/json
GIT_TAG v3.12.0
GIT_SHALLOW true
SOURCE_DIR ${JSON_SRC_DIR}
)
FetchContent_Populate(json_lib)
if(NOT TARGET json_lib)
add_library(json_lib INTERFACE)
target_include_directories(json_lib INTERFACE ${JSON_SRC_DIR}/include)
endif()
if(NOT TARGET nlohmann_json::nlohmann_json)
add_library(nlohmann_json::nlohmann_json ALIAS json_lib)
endif()
if(NOT TARGET LiteRTLM::nlohmann_json::nlohmann_json)
add_library(LiteRTLM::nlohmann_json::nlohmann_json INTERFACE IMPORTED GLOBAL)
target_link_libraries(LiteRTLM::nlohmann_json::nlohmann_json INTERFACE nlohmann_json::nlohmann_json)
endif()
# --- STB (Header Only - Populated) ---
set(STB_SRC_DIR ${THIRD_PARTY_DIR}/stb_lib CACHE PATH "Path to libstb headers")
FetchContent_Declare(
stb_lib
GIT_REPOSITORY https://github.com/nothings/stb.git
GIT_TAG master
GIT_SHALLOW true
SOURCE_DIR ${STB_SRC_DIR}
)
FetchContent_Populate(stb_lib)
if(NOT TARGET stb_lib)
add_library(stb_lib INTERFACE)
target_include_directories(stb_lib INTERFACE ${STB_SRC_DIR})
endif()
# --- ZLIB ---
set(ZLIB_SRC_DIR ${THIRD_PARTY_DIR}/zlib CACHE PATH "Path to zlib source directory")
FetchContent_Declare(
zlib_lib
GIT_REPOSITORY https://github.com/madler/zlib
GIT_TAG master
GIT_SHALLOW true
SOURCE_DIR ${ZLIB_SRC_DIR}
)
block()
set(BUILD_SHARED_LIBS OFF)
FetchContent_MakeAvailable(zlib_lib)
endblock()
if(TARGET zlibstatic)
add_library(zlib_lib ALIAS zlibstatic)
elseif(TARGET zlib)
add_library(zlib_lib ALIAS zlib)
endif()
# --- Path Exports ---
set(FETCHCONTENT_MODULE_SRC_DIRS
${ANTLR_SRC_DIR}
${KISSFFT_SRC_DIR}
${LLGUIDANCE_SRC_DIR}/parser
${MINIAUDIO_SRC_DIR}
${MINIZIP_SRC_DIR}
${MINJA_SRC_DIR}
${JSON_SRC_DIR}
${STB_SRC_DIR}
${ZLIB_SRC_DIR}
${CORROSION_SRC_DIR}
)
set(FETCHCONTENT_MODULE_INCLUDE_DIR
${ANTLR_SRC_DIR}
${KISSFFT_SRC_DIR}
${LLGUIDANCE_SRC_DIR}/parser
${MINIAUDIO_SRC_DIR}
${MINIZIP_SRC_DIR}/minizip
${MINJA_SRC_DIR}/include
${JSON_SRC_DIR}/include
${STB_SRC_DIR}
${ZLIB_SRC_DIR}
${CORROSION_INCLUDE_DIR}
)