diff Resources/CMake/FlatBuffersConfiguration.cmake @ 445:ee41b6a017d7 bgo-commands-codegen

dumb change
author bgo-osimis
date Wed, 16 Jan 2019 16:24:45 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/CMake/FlatBuffersConfiguration.cmake	Wed Jan 16 16:24:45 2019 +0100
@@ -0,0 +1,171 @@
+# Stone of Orthanc
+# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+# Department, University Hospital of Liege, Belgium
+# Copyright (C) 2017-2019 Osimis S.A., Belgium
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU Affero General Public License
+# as published by the Free Software Foundation, either version 3 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Affero General Public License for more details.
+# 
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+include(${ORTHANC_ROOT}/Resources/CMake/DownloadPackage.cmake)
+set(FLATC_AUTOGENERATED_SOURCES)
+
+if (STATIC_BUILD OR NOT USE_SYSTEM_FLATBUFFERS)
+  SET(FLATBUFFERS_SOURCES_DIR ${CMAKE_BINARY_DIR}/flatbuffers-1.10)
+  SET(FLATBUFFERS_URL "http://127.0.0.1:8000/flatbuffers-1.10.tar.gz")
+  SET(FLATBUFFERS_MD5 "d5f131809c14def9682d49385b452e43")
+
+  DownloadPackage(${FLATBUFFERS_MD5} ${FLATBUFFERS_URL} "${FLATBUFFERS_SOURCES_DIR}")
+
+  include_directories(${FLATBUFFERS_SOURCES_DIR}/include)
+
+  # we only need the flatc compiler!
+  set(FLATBUFFERS_BUILD_TESTS OFF)
+  set(FLATBUFFERS_INSTALL OFF)
+  set(FLATBUFFERS_BUILD_FLATLIB OFF)
+  set(FLATBUFFERS_BUILD_FLATC ON)
+  set(FLATBUFFERS_BUILD_FLATHASH OFF)
+  set(FLATBUFFERS_BUILD_GRPCTEST OFF)
+  set(FLATBUFFERS_BUILD_SHAREDLIB OFF)
+  set(FLATBUFFERS_LIBCXX_WITH_CLANG OFF)
+
+  # add_subdirectory(${FLATBUFFERS_SOURCES_DIR}
+  #    ${CMAKE_CURRENT_BINARY_DIR}/flatbuffers-build
+  #    EXCLUDE_FROM_ALL)
+
+  # Now simply link against flatbuffers as needed to your already declared target.
+  # The flatbuffers target carry header search path automatically if CMake > 2.8.11.
+  #target_link_libraries(own_project_target PRIVATE flatbuffers)
+
+else()
+  find_package(FlatBuffers)
+  include_directories(${SDL2_INCLUDE_DIRS})
+  link_libraries(${SDL2_LIBRARIES})
+endif()
+
+macro(GetFilenameFromPath TargetVariable Path)
+  #message(STATUS "GetFilenameFromPath (1): Path = ${Path} TargetVariable = ${${TargetVariable}}")
+  string(REPLACE "\\" "/" PathWithFwdSlashes "${Path}")
+  string(REGEX REPLACE "^.*/" "" ${TargetVariable} "${PathWithFwdSlashes}")
+  #message(STATUS "GetFilenameFromPath (2): Path = ${Path} Path = ${PathWithFwdSlashes} TargetVariable = ${TargetVariable}")
+endmacro()
+
+macro(GetFilePathWithoutLastExtension TargetVariable FilePath)
+  string(REGEX REPLACE "(^.*)\\.([^\\.]+)" "\\1" ${TargetVariable} "${FilePath}")
+  #message(STATUS "GetFileNameWithoutLastExtension: FilePath = ${FilePath} TargetVariable = ${${TargetVariable}}")
+endmacro()
+
+macro(Test_GetFilePathWithoutLastExtension)
+  set(tmp "/prout/zi/goui.goui.cpp")
+  GetFilePathWithoutLastExtension(TargetVariable "${tmp}")
+  if(NOT ("${TargetVariable}" STREQUAL "/prout/zi/goui.goui"))
+    message(FATAL_ERROR "Test_GetFilePathWithoutLastExtension failed (1)")
+  else()
+    #message(STATUS "Test_GetFilePathWithoutLastExtension: <<OK>>")
+  endif()
+endmacro()
+
+Test_GetFilePathWithoutLastExtension()
+
+macro(Test_GetFilenameFromPath)
+  set(tmp "/prout/../../dada/zi/goui.goui.cpp")
+  GetFilenameFromPath(TargetVariable "${tmp}")
+  if(NOT ("${TargetVariable}" STREQUAL "goui.goui.cpp"))
+    message(FATAL_ERROR "Test_GetFilenameFromPath failed")
+  else()
+    #message(STATUS "Test_GetFilenameFromPath: <<OK>>")
+  endif()
+endmacro()
+
+Test_GetFilenameFromPath()
+
+macro(GenerateCodeFromFlatBufferSchema schemaFilePath)
+  # extract file name
+  GetFilePathWithoutLastExtension(schemaFilePathWithoutExt ${schemaFilePath})
+  
+  # remove extension
+  GetFilenameFromPath(schemaFileNameWithoutExt ${schemaFilePathWithoutExt})
+  
+  set(generatedFilePathWithoutExtension "${CMAKE_BINARY_DIR}/${schemaFileNameWithoutExt}_generated")
+  set(generatedCppFileName "${generatedFilePathWithoutExtension}.h")
+  set(generatedTsFileName "${generatedFilePathWithoutExtension}.ts")
+  set(generatedJsFileName "${generatedFilePathWithoutExtension}.js")
+
+  set(AUTOGENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/AUTOGENERATED")
+  set(AUTOGENERATED_SOURCES)
+  
+  set(FLATC_EXECUTABLE "flatc")
+  find_program(FLATC_EXECUTABLE_SEARCH ${FLATC_EXECUTABLE})
+  if(NOT FLATC_EXECUTABLE_SEARCH)
+    message(FATAL_ERROR "FlatBuffers compiler not found")
+  endif()
+
+  set(SCRIPT_CPP_OPTIONS)
+  list(APPEND SCRIPT_CPP_OPTIONS "--gen-object-api")
+  list(APPEND SCRIPT_CPP_OPTIONS "--cpp")
+  list(APPEND SCRIPT_CPP_OPTIONS "--gen-onefile")
+  list(APPEND SCRIPT_CPP_OPTIONS "--gen-all")
+  list(APPEND SCRIPT_CPP_OPTIONS "--force-empty")
+  list(APPEND SCRIPT_CPP_OPTIONS "--reflect-types")
+  list(APPEND SCRIPT_CPP_OPTIONS "--reflect-names")
+
+  set(SCRIPT_TS_OPTIONS)
+  list(APPEND SCRIPT_TS_OPTIONS "--gen-object-api")
+  list(APPEND SCRIPT_TS_OPTIONS "--ts")
+  list(APPEND SCRIPT_TS_OPTIONS "--gen-onefile")
+  list(APPEND SCRIPT_TS_OPTIONS "--gen-all")
+  list(APPEND SCRIPT_TS_OPTIONS "--no-js-exports")
+  list(APPEND SCRIPT_TS_OPTIONS "--force-empty")
+  list(APPEND SCRIPT_TS_OPTIONS "--reflect-types")
+  list(APPEND SCRIPT_TS_OPTIONS "--reflect-names")
+
+  set(SCRIPT_JS_OPTIONS)
+  list(APPEND SCRIPT_JS_OPTIONS "--gen-object-api")
+  list(APPEND SCRIPT_JS_OPTIONS "--js")
+  list(APPEND SCRIPT_JS_OPTIONS "--gen-onefile")
+  list(APPEND SCRIPT_JS_OPTIONS "--gen-all")
+  list(APPEND SCRIPT_JS_OPTIONS "--no-js-exports")
+  list(APPEND SCRIPT_JS_OPTIONS "--force-empty")
+  list(APPEND SCRIPT_JS_OPTIONS "--reflect-types")
+  list(APPEND SCRIPT_JS_OPTIONS "--reflect-names")
+
+  add_custom_command(
+    OUTPUT
+    ${generatedCppFileName}
+    COMMAND 
+    ${FLATC_EXECUTABLE} ${SCRIPT_CPP_OPTIONS} ${schemaFilePath}
+    DEPENDS
+    ${schemaFilePath}
+    )
+  
+  add_custom_command(
+    OUTPUT
+    ${generatedTsFileName}
+    COMMAND 
+    ${FLATC_EXECUTABLE} ${SCRIPT_TS_OPTIONS} ${schemaFilePath}
+    DEPENDS
+    ${schemaFilePath}
+    )
+  
+  add_custom_command(
+    OUTPUT
+    ${generatedJsFileName}
+    COMMAND 
+    ${FLATC_EXECUTABLE} ${SCRIPT_JS_OPTIONS} ${schemaFilePath}
+    DEPENDS
+    ${schemaFilePath}
+    )
+
+    list(APPEND FLATC_AUTOGENERATED_SOURCES "${generatedCppFileName}") 
+    list(APPEND FLATC_AUTOGENERATED_SOURCES "${generatedJsFileName}") 
+    list(APPEND FLATC_AUTOGENERATED_SOURCES "${generatedTsFileName}") 
+
+endmacro()