summaryrefslogtreecommitdiff
path: root/compiler/cpp/CMakeLists.txt
diff options
context:
space:
mode:
authorNobuaki Sukegawa <nsuke@apache.org>2016-09-10 14:02:19 +0900
committerNobuaki Sukegawa <nsuke@apache.org>2016-09-26 01:42:01 +0900
commit11da87e6f30c237869a09e28ab44fe4a59db270e (patch)
tree4c81e09a6c5647cf8b4216379c30ec8ec2cb5517 /compiler/cpp/CMakeLists.txt
parent1e3cf9b9fdcf9a7b7ffc18a2e6148465b154e66b (diff)
downloadthrift-11da87e6f30c237869a09e28ab44fe4a59db270e.tar.gz
THRIFT-2835 Add possibility to distribute generators separately from thrift core, and load them dynamically
Client: Compiler Patch: Nobuaki Sukegawa, rebased by dtmuller Also fixed by dtmuller: * Add plugin namespace for erlang language binding * Fix unit test test_const_value * Don't clear type cache with every t_program conversion * Type "wb" may not be supported by popen on non-Windows platforms * Fix constness of AST type signatures
Diffstat (limited to 'compiler/cpp/CMakeLists.txt')
-rw-r--r--compiler/cpp/CMakeLists.txt91
1 files changed, 58 insertions, 33 deletions
diff --git a/compiler/cpp/CMakeLists.txt b/compiler/cpp/CMakeLists.txt
index b7ed6ea08..48cadbc1d 100644
--- a/compiler/cpp/CMakeLists.txt
+++ b/compiler/cpp/CMakeLists.txt
@@ -21,7 +21,7 @@
if(MSVC)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/windows/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
else()
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
endif()
find_package(FLEX REQUIRED)
@@ -47,39 +47,17 @@ set(libparse_SOURCES
add_library(libparse STATIC ${libparse_SOURCES})
# Create the thrift compiler
-set( thrift_SOURCES
- src/main.cc
+set(compiler_core
+ src/common.cc
src/generate/t_generator.cc
- src/generate/t_generator_registry.h
- src/globals.h
- src/main.h
- src/platform.h
- src/audit/t_audit.cpp
- src/parse/t_doc.h
- src/parse/t_type.h
- src/parse/t_base_type.h
- src/parse/t_enum.h
- src/parse/t_enum_value.h
- src/parse/t_typedef.h
src/parse/t_typedef.cc
- src/parse/t_container.h
- src/parse/t_list.h
- src/parse/t_set.h
- src/parse/t_map.h
- src/parse/t_struct.h
- src/parse/t_field.h
- src/parse/t_service.h
- src/parse/t_function.h
- src/parse/t_program.h
- src/parse/t_scope.h
- src/parse/t_const.h
- src/parse/t_const_value.h
src/parse/parse.cc
- src/generate/t_generator.h
- src/generate/t_oop_generator.h
- src/generate/t_html_generator.h
- src/windows/config.h
- version.h
+ ${CMAKE_CURRENT_BINARY_DIR}/version.h
+)
+
+set(thrift-compiler_SOURCES
+ src/main.cc
+ src/audit/t_audit.cpp
)
# This macro adds an option THRIFT_COMPILER_${NAME}
@@ -89,7 +67,7 @@ macro(THRIFT_ADD_COMPILER name description initial)
set(src "src/generate/t_${name}_generator.cc")
option(${enabler} ${description} ${initial})
if(${enabler})
- list(APPEND thrift_SOURCES ${src})
+ list(APPEND thrift-compiler_SOURCES ${src})
endif()
endmacro()
@@ -127,9 +105,56 @@ THRIFT_ADD_COMPILER(xml "Enable compiler for XML" ON)
# we also add the current binary directory for generated files
include_directories(${CMAKE_CURRENT_BINARY_DIR} src)
-add_executable(thrift-compiler ${thrift_SOURCES})
+if(NOT ${WITH_PLUGIN})
+ list(APPEND thrift-compiler_SOURCES ${compiler_core})
+endif()
+add_executable(thrift-compiler ${thrift-compiler_SOURCES})
+
+if(${WITH_PLUGIN})
+ add_executable(thrift-bootstrap ${compiler_core}
+ src/main.cc
+ src/audit/t_audit.cpp
+ src/generate/t_cpp_generator.cc
+ )
+ target_link_libraries(thrift-bootstrap libparse)
+
+ set(PLUGIN_GEN_SOURCES
+ ${CMAKE_CURRENT_BINARY_DIR}/plugin/plugin_types.h
+ ${CMAKE_CURRENT_BINARY_DIR}/plugin/plugin_types.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/plugin/plugin_constants.h
+ ${CMAKE_CURRENT_BINARY_DIR}/plugin/plugin_constants.cpp
+ )
+
+ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/plugin)
+ add_custom_command(OUTPUT ${PLUGIN_GEN_SOURCES}
+ DEPENDS thrift-bootstrap src/plugin/plugin.thrift
+ COMMAND thrift-bootstrap -gen cpp
+ -out ${CMAKE_CURRENT_BINARY_DIR}/plugin
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/plugin/plugin.thrift
+ )
+
+ include_directories(../../lib/cpp/src)
+
+ include(ThriftMacros)
+ ADD_LIBRARY_THRIFT(thriftc
+ ${compiler_core}
+ ${PLUGIN_GEN_SOURCES}
+ src/logging.cc
+ src/plugin/plugin_output.cc
+ src/plugin/plugin.cc
+ )
+ TARGET_INCLUDE_DIRECTORIES_THRIFT(thriftc PUBLIC ${Boost_INCLUDE_DIRS})
+ TARGET_LINK_LIBRARIES_THRIFT_AGAINST_THRIFT_LIBRARY(thriftc thrift PUBLIC)
+ target_compile_definitions(thrift-compiler PUBLIC THRIFT_ENABLE_PLUGIN)
+ LINK_AGAINST_THRIFT_LIBRARY(thrift-compiler thriftc)
+endif()
+
set_target_properties(thrift-compiler PROPERTIES OUTPUT_NAME thrift)
target_link_libraries(thrift-compiler libparse)
install(TARGETS thrift-compiler DESTINATION "${BIN_INSTALL_DIR}")
+
+if(BUILD_TESTING)
+ add_subdirectory(test)
+endif()