blob: a55fa083f1d86872f53a0e47f4a8359eebc33168 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
cmake_minimum_required(VERSION 2.6)
# Helper function to generate build rules. For each input flatbuffer file (*.fbs), this
# function will generate a rule that maps the input file to an output c++ file.
# The flatbuffers compiler will generate multiple output files for each input file. In
# particular, it will generate a '_generated.h' for c++ and one .java file per flatbuffer
# table definition.
#
# To call this function, pass it the output file list followed by the input flatbuffers
# files: e.g. FB_GEN(OUTPUT_FILES, ${FLATBUFFER_FILES})
#
function(FB_GEN VAR)
IF (NOT ARGN)
MESSAGE(SEND_ERROR "Error: FB_GEN called without any src files")
RETURN()
ENDIF(NOT ARGN)
set(${VAR})
foreach(FIL ${ARGN})
# Get full path
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
# Get basename
get_filename_component(FIL_WE ${FIL} NAME_WE)
set(OUTPUT_BE_FILE "${BE_OUTPUT_DIR}/${FIL_WE}_generated.h")
list(APPEND ${VAR} ${OUTPUT_BE_FILE})
add_custom_command(
OUTPUT ${OUTPUT_BE_FILE}
COMMAND ${FLATBUFFERS_COMPILER} ${CPP_ARGS} ${FIL}
COMMAND ${FLATBUFFERS_COMPILER} ${JAVA_FE_ARGS} ${FIL}
DEPENDS ${ABS_FIL}
COMMENT "Running FlatBuffers compiler on ${FIL}"
VERBATIM
)
endforeach(FIL)
set(${VAR} ${${VAR}} PARENT_SCOPE)
endfunction(FB_GEN)
message("Using FlatBuffers compiler: ${FLATBUFFERS_COMPILER}")
set(BE_OUTPUT_DIR ${CMAKE_SOURCE_DIR}/be/generated-sources/gen-cpp)
set(FE_OUTPUT_DIR ${CMAKE_SOURCE_DIR}/fe/generated-sources/gen-java)
file(MAKE_DIRECTORY ${FE_OUTPUT_DIR})
file(MAKE_DIRECTORY ${BE_OUTPUT_DIR})
set(JAVA_FE_ARGS --gen-mutable --java -o ${FE_OUTPUT_DIR} -b)
message(${JAVA_FE_ARGS})
set(CPP_ARGS --cpp -o ${BE_OUTPUT_DIR} -b)
message(${CPP_ARGS})
# Add new FlatBuffer schema files here.
set (SRC_FILES
CatalogObjects.fbs
)
FB_GEN(FB_ALL_FILES ${SRC_FILES})
add_custom_target(fb-deps ALL DEPENDS ${FB_ALL_FILES})