# 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. # CMakeLists.txt for LiteRT-LM-Orchestrator. cmake_minimum_required(VERSION 3.25 FATAL_ERROR) project(LiteRT-LM-Orchestrator LANGUAGES NONE) if(NOT DEFINED LITERTLM_HOST_PROTOC) set(LITERTLM_HOST_PROTOC "${CMAKE_CURRENT_BINARY_DIR}/prebuild/build/external/protobuf/install/bin/protoc") set(LITERTLM_HOST_PROTOC_BIN_DIR "${CMAKE_CURRENT_BINARY_DIR}/prebuild/build/external/protobuf/install/bin") endif() if(NOT DEFINED LITERTLM_HOST_FLATC) set(LITERTLM_HOST_FLATC "${CMAKE_CURRENT_BINARY_DIR}/prebuild/build/external/flatbuffers/install/bin/flatc") set(LITERTLM_HOST_FLATC_BIN_DIR "${CMAKE_CURRENT_BINARY_DIR}/prebuild/build/external/flatbuffers/install/bin") endif() include(ExternalProject) set(LITERTLM_PROJECT_ROOT "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH "LiteRT-LM: Absolute path to the repository root") set(LITERTLM_TOOLCHAIN_ARGS "" CACHE STRING "String used to define parameterized CMAKE_ARGS") set(_PREBUILD_DEPENDENCY "") if(LITERTLM_TOOLCHAIN_ARGS) message(STATUS "[LiteRTLM] Toolchain args detected. Generating Host Prebuild phase...") ExternalProject_Add( litert_lm_prebuild SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake/packages/litert_lm" PREFIX "${CMAKE_CURRENT_BINARY_DIR}/prebuild" BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/prebuild/build" STAMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/prebuild/stamps" TMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/prebuild/tmp" DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/prebuild/download" INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/prebuild/install" CMAKE_ARGS "-DLITERTLM_PROJECT_ROOT=${LITERTLM_PROJECT_ROOT}" INSTALL_COMMAND "" ) set(_PREBUILD_DEPENDENCY "litert_lm_prebuild") else() message(STATUS "[LiteRTLM] Native build detected. Skipping Host Prebuild phase.") endif() if(DEFINED CMAKE_TOOLCHAIN_FILE) set(LITERTLM_TOOLCHAIN_FILE "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}") endif() if(DEFINED LITERTLM_TOOLCHAIN_SCRIPT) message(STATUS "[LiteRTLM] Executing toolchain script -> ${LITERTLM_TOOLCHAIN_SCRIPT}") include("${LITERTLM_TOOLCHAIN_SCRIPT}") endif() ExternalProject_Add( litert_lm DEPENDS ${_PREBUILD_DEPENDENCY} SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake/packages/litert_lm" PREFIX "${CMAKE_CURRENT_BINARY_DIR}/litert_lm" BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/litert_lm/build" STAMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/litert_lm/stamps" TMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/litert_lm/tmp" DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/litert_lm/download" INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/litert_lm/install" CMAKE_ARGS ${LITERTLM_TOOLCHAIN_FILE} "-DLITERTLM_TOOLCHAIN_FILE=${LITERTLM_TOOLCHAIN_FILE}" ${LITERTLM_TOOLCHAIN_ARGS} "-DLITERTLM_TOOLCHAIN_ARGS=${LITERTLM_TOOLCHAIN_ARGS}" "-DLITERTLM_PROJECT_ROOT=${LITERTLM_PROJECT_ROOT}" "-DLITERTLM_HOST_PROTOC=${LITERTLM_HOST_PROTOC}" "-DLITERTLM_HOST_PROTOC_BIN_DIR=${LITERTLM_HOST_PROTOC_BIN_DIR}" "-DLITERTLM_HOST_FLATC=${LITERTLM_HOST_FLATC}" "-DLITERTLM_HOST_FLATC_BIN_DIR=${LITERTLM_HOST_FLATC_BIN_DIR}" INSTALL_COMMAND "" BUILD_ALWAYS TRUE )