1 # Copyright 2014 Stefan.Eilemann (a] epfl.ch 2 # Copyright 2014 Google Inc. All rights reserved. 3 # 4 # Licensed under the Apache License, Version 2.0 (the "License"); 5 # you may not use this file except in compliance with the License. 6 # You may obtain a copy of the License at 7 # 8 # http://www.apache.org/licenses/LICENSE-2.0 9 # 10 # Unless required by applicable law or agreed to in writing, software 11 # distributed under the License is distributed on an "AS IS" BASIS, 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 # See the License for the specific language governing permissions and 14 # limitations under the License. 15 16 # Find the flatbuffers schema compiler 17 # 18 # Output Variables: 19 # * FLATBUFFERS_FLATC_EXECUTABLE the flatc compiler executable 20 # * FLATBUFFERS_FOUND 21 # 22 # Provides: 23 # * FLATBUFFERS_GENERATE_C_HEADERS(Name <files>) creates the C++ headers 24 # for the given flatbuffer schema files. 25 # Returns the header files in ${Name}_OUTPUTS 26 27 set(FLATBUFFERS_CMAKE_DIR ${CMAKE_CURRENT_LIST_DIR}) 28 29 find_program(FLATBUFFERS_FLATC_EXECUTABLE NAMES flatc) 30 find_path(FLATBUFFERS_INCLUDE_DIR NAMES flatbuffers/flatbuffers.h) 31 32 include(FindPackageHandleStandardArgs) 33 find_package_handle_standard_args(flatbuffers 34 DEFAULT_MSG FLATBUFFERS_FLATC_EXECUTABLE FLATBUFFERS_INCLUDE_DIR) 35 36 if(FLATBUFFERS_FOUND) 37 function(FLATBUFFERS_GENERATE_C_HEADERS Name) 38 set(FLATC_OUTPUTS) 39 foreach(FILE ${ARGN}) 40 get_filename_component(FLATC_OUTPUT ${FILE} NAME_WE) 41 set(FLATC_OUTPUT 42 "${CMAKE_CURRENT_BINARY_DIR}/${FLATC_OUTPUT}_generated.h") 43 list(APPEND FLATC_OUTPUTS ${FLATC_OUTPUT}) 44 45 add_custom_command(OUTPUT ${FLATC_OUTPUT} 46 COMMAND ${FLATBUFFERS_FLATC_EXECUTABLE} 47 ARGS -c -o "${CMAKE_CURRENT_BINARY_DIR}/" ${FILE} 48 COMMENT "Building C++ header for ${FILE}" 49 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 50 endforeach() 51 set(${Name}_OUTPUTS ${FLATC_OUTPUTS} PARENT_SCOPE) 52 endfunction() 53 54 set(FLATBUFFERS_INCLUDE_DIRS ${FLATBUFFERS_INCLUDE_DIR}) 55 include_directories(${CMAKE_BINARY_DIR}) 56 else() 57 set(FLATBUFFERS_INCLUDE_DIR) 58 endif() 59 60 include("${FLATBUFFERS_CMAKE_DIR}/BuildFlatBuffers.cmake")