File size: 4,003 Bytes
5f923cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# 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_guard(GLOBAL)

set(LITERTLM_GENERATORS_DIR "${LITERTLM_MODULES_DIR}/generators" CACHE INTERNAL "")
include("${LITERTLM_GENERATORS_DIR}/generate_protobuf.cmake")
include("${LITERTLM_GENERATORS_DIR}/generate_cxxbridge.cmake")

function(generate_src_files OUTPUT_CLEAN_PATHS)
    set(RAW_FILES ${ARGN})
    set(CLEANED_PATHS_OUT "")

    foreach(RAW_FILE IN ITEMS ${RAW_FILES})
        get_filename_component(FILE_NAME ${RAW_FILE} NAME)
        get_filename_component(FILE_DIR ${RAW_FILE} DIRECTORY)

        file(RELATIVE_PATH REL_PATH "${LITERTLM_PROJECT_ROOT}" "${FILE_DIR}")

        set(GEN_DIR "${GENERATED_SRC_DIR}/${REL_PATH}")
        file(MAKE_DIRECTORY "${GEN_DIR}")

        set(CLEAN_FILE "${GEN_DIR}/${FILE_NAME}")

        if(NOT EXISTS "${RAW_FILE}")
            message(FATAL_ERROR "[LiteRTLM] Source file not found: ${RAW_FILE}")
        endif()
        file(READ "${RAW_FILE}" FILE_CONTENT)

        string(REPLACE "odml/litert_lm/" "" FILE_CONTENT "${FILE_CONTENT}")
        string(REPLACE "odml/litert/" "" FILE_CONTENT "${FILE_CONTENT}")

        file(WRITE "${CLEAN_FILE}" "${FILE_CONTENT}")

        list(APPEND CLEANED_PATHS_OUT "${CLEAN_FILE}")
    endforeach()

    set(${OUTPUT_CLEAN_PATHS} "${CLEANED_PATHS_OUT}" PARENT_SCOPE)
endfunction()


add_litertlm_library(litertlm_generated_protobuf STATIC)
add_dependencies(litertlm_generated_protobuf protobuf_external)

target_include_directories(litertlm_generated_protobuf
  PUBLIC
    ${CMAKE_CURRENT_BINARY_DIR}
    ${LITERTLM_PROJECT_ROOT}
    ${PROTO_SRC_DIR}
    ${PROTO_INCLUDE_DIR}
    ${ABSL_INCLUDE_DIR}
)

target_link_libraries(litertlm_generated_protobuf
  PUBLIC
    protobuf::libprotobuf
    LiteRTLM::absl::absl
)

if(NOT TARGET protobuf::protoc)
    add_executable(protobuf::protoc IMPORTED GLOBAL)
    set_target_properties(protobuf::protoc PROPERTIES
        IMPORTED_LOCATION "${PROTO_PROTOC_EXECUTABLE}"
    )
endif()

generate_protobuf(litertlm_generated_protobuf ${LITERTLM_PROJECT_ROOT})

set(GEN_C_DIR "${GENERATED_SRC_DIR}/c")
set(GEN_SCHEMA_DIR "${GENERATED_SRC_DIR}/schema")
set(GEN_RUNTIME_DIR "${GENERATED_SRC_DIR}/runtime")

set(ALL_SOURCE_FILES "")
set(ALL_HEADER_FILES "")
set(ALL_SCHEMA_FILES "")
set(ALL_RUST_FILES "")

file(GLOB_RECURSE C_SRC_FILES "${LITERTLM_PROJECT_ROOT}/c/*.cc")
file(GLOB_RECURSE C_HDR_FILES "${LITERTLM_PROJECT_ROOT}/c/*.h")

file(GLOB_RECURSE RUNTIME_SRC_FILES "${LITERTLM_PROJECT_ROOT}/runtime/*.cc")
file(GLOB_RECURSE RUNTIME_HDR_FILES "${LITERTLM_PROJECT_ROOT}/runtime/*.h")

file(GLOB_RECURSE SCHEMA_SRC_FILES "${LITERTLM_PROJECT_ROOT}/schema/*.cc")
file(GLOB_RECURSE SCHEMA_HDR_FILES "${LITERTLM_PROJECT_ROOT}/schema/*.h")
file(GLOB_RECURSE SCHEMA_FBS_FILES "${LITERTLM_PROJECT_ROOT}/schema/*.fbs")

file(GLOB_RECURSE RUST_SRC_FILES "${LITERTLM_PROJECT_ROOT}/src/*.rs")
file(GLOB_RECURSE RUST_RUNTIME_SRC_FILES "${LITERTLM_PROJECT_ROOT}/runtime/*.rs")
file(GLOB_RECURSE RUST_TOML_FILES "${LITERTLM_PROJECT_ROOT}/cmake/rust/*.toml")

list(APPEND ALL_SOURCE_FILES ${C_SRC_FILES} ${RUNTIME_SRC_FILES} ${SCHEMA_SRC_FILES})
list(APPEND ALL_HEADER_FILES ${C_HDR_FILES} ${RUNTIME_HDR_FILES} ${SCHEMA_HDR_FILES})
list(APPEND ALL_SCHEMA_FILES ${SCHEMA_FBS_FILES})
list(APPEND ALL_RUST_FILES 
    ${RUST_SRC_FILES} 
    ${RUST_RUNTIME_SRC_FILES} 
    ${RUST_TOML_FILES}
)

set(ALL_GENERATED_OUTPUTS 
    ${C_SRC_FILES}
    ${RUNTIME_SRC_FILES}
    ${SCHEMA_SRC_FILES}
    ${RUST_SRC_FILES})