blob: b7ed6ea084ff59af5c65be9ac0d21c95dd54f667 [file] [log] [blame]
Pascal Bach6eb015a2014-04-17 16:19:07 +02001#
2# Licensed to the Apache Software Foundation (ASF) under one
3# or more contributor license agreements. See the NOTICE file
4# distributed with this work for additional information
5# regarding copyright ownership. The ASF licenses this file
6# to you under the Apache License, Version 2.0 (the
7# "License"); you may not use this file except in compliance
8# with the License. You may obtain a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing,
13# software distributed under the License is distributed on an
14# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15# KIND, either express or implied. See the License for the
16# specific language governing permissions and limitations
17# under the License.
18#
19
Pascal Bach6eb015a2014-04-17 16:19:07 +020020# Windows has a different header
Pascal Bach569863a2014-06-10 13:15:40 +020021if(MSVC)
Pascal Bach6eb015a2014-04-17 16:19:07 +020022 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/windows/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
23else()
Pascal Bach6eb015a2014-04-17 16:19:07 +020024 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
25endif()
26
27find_package(FLEX REQUIRED)
28find_package(BISON REQUIRED)
29
30# Create flex and bison files and build the lib parse static library
31BISON_TARGET(thrifty ${CMAKE_CURRENT_SOURCE_DIR}/src/thrifty.yy ${CMAKE_CURRENT_BINARY_DIR}/thrifty.cc)
Roger Meier86fded22015-05-15 12:01:38 +020032FLEX_TARGET(thriftl ${CMAKE_CURRENT_SOURCE_DIR}/src/thriftl.ll ${CMAKE_CURRENT_BINARY_DIR}/thriftl.cc)
Pascal Bach6eb015a2014-04-17 16:19:07 +020033ADD_FLEX_BISON_DEPENDENCY(thriftl thrifty)
34
35# HACK: Work around the fact that bison crates a .hh file but we need a .h file
36add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/thrifty.h
37 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/thrifty.hh ${CMAKE_CURRENT_BINARY_DIR}/thrifty.h
38 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/thrifty.hh
39 )
40
41set(libparse_SOURCES
42 ${CMAKE_CURRENT_BINARY_DIR}/thrifty.cc
43 ${CMAKE_CURRENT_BINARY_DIR}/thriftl.cc
44 ${CMAKE_CURRENT_BINARY_DIR}/thrifty.h
45)
46
47add_library(libparse STATIC ${libparse_SOURCES})
48
49# Create the thrift compiler
Mark Erickson932c4702015-08-29 10:46:51 -050050set( thrift_SOURCES
Pascal Bach6eb015a2014-04-17 16:19:07 +020051 src/main.cc
Pascal Bach6eb015a2014-04-17 16:19:07 +020052 src/generate/t_generator.cc
53 src/generate/t_generator_registry.h
54 src/globals.h
55 src/main.h
56 src/platform.h
Ben Craig262cfb42015-07-08 20:37:15 -050057 src/audit/t_audit.cpp
Pascal Bach6eb015a2014-04-17 16:19:07 +020058 src/parse/t_doc.h
59 src/parse/t_type.h
60 src/parse/t_base_type.h
61 src/parse/t_enum.h
62 src/parse/t_enum_value.h
63 src/parse/t_typedef.h
64 src/parse/t_typedef.cc
65 src/parse/t_container.h
66 src/parse/t_list.h
67 src/parse/t_set.h
68 src/parse/t_map.h
69 src/parse/t_struct.h
70 src/parse/t_field.h
71 src/parse/t_service.h
72 src/parse/t_function.h
73 src/parse/t_program.h
74 src/parse/t_scope.h
75 src/parse/t_const.h
76 src/parse/t_const_value.h
77 src/parse/parse.cc
78 src/generate/t_generator.h
79 src/generate/t_oop_generator.h
80 src/generate/t_html_generator.h
81 src/windows/config.h
82 version.h
83)
84
85# This macro adds an option THRIFT_COMPILER_${NAME}
86# that allows enabling or disabling certain languages
87macro(THRIFT_ADD_COMPILER name description initial)
88 string(TOUPPER "THRIFT_COMPILER_${name}" enabler)
89 set(src "src/generate/t_${name}_generator.cc")
90 option(${enabler} ${description} ${initial})
91 if(${enabler})
92 list(APPEND thrift_SOURCES ${src})
93 endif()
94endmacro()
95
96# The following compiler can be enabled or disabled
97THRIFT_ADD_COMPILER(c_glib "Enable compiler for C with Glib" ON)
98THRIFT_ADD_COMPILER(cpp "Enable compiler for C++" ON)
99THRIFT_ADD_COMPILER(java "Enable compiler for Java" ON)
100THRIFT_ADD_COMPILER(as3 "Enable compiler for ActionScript 3" ON)
Mark Erickson932c4702015-08-29 10:46:51 -0500101THRIFT_ADD_COMPILER(dart "Enable compiler for Dart" ON)
Jens Geyerbd52f1a2014-07-28 01:25:30 +0200102THRIFT_ADD_COMPILER(haxe "Enable compiler for Haxe" ON)
Pascal Bach6eb015a2014-04-17 16:19:07 +0200103THRIFT_ADD_COMPILER(csharp "Enable compiler for C#" ON)
104THRIFT_ADD_COMPILER(py "Enable compiler for Python 2.0" ON)
105THRIFT_ADD_COMPILER(rb "Enable compiler for Ruby" ON)
106THRIFT_ADD_COMPILER(perl "Enable compiler for Perl" ON)
107THRIFT_ADD_COMPILER(php "Enable compiler for PHP" ON)
108THRIFT_ADD_COMPILER(erl "Enable compiler for Erlang" ON)
109THRIFT_ADD_COMPILER(cocoa "Enable compiler for Cocoa Objective-C" ON)
Jens Geyer56e5b9b2015-10-09 22:01:55 +0200110THRIFT_ADD_COMPILER(swift "Enable compiler for Cocoa Swift" ON)
Pascal Bach6eb015a2014-04-17 16:19:07 +0200111THRIFT_ADD_COMPILER(st "Enable compiler for Smalltalk" ON)
112THRIFT_ADD_COMPILER(ocaml "Enable compiler for OCaml" ON)
113THRIFT_ADD_COMPILER(hs "Enable compiler for Haskell" ON)
114THRIFT_ADD_COMPILER(xsd "Enable compiler for XSD" ON)
115THRIFT_ADD_COMPILER(html "Enable compiler for HTML Documentation" ON)
116THRIFT_ADD_COMPILER(js "Enable compiler for JavaScript" ON)
Roger Meier1a74d9c2014-10-12 23:35:43 +0200117THRIFT_ADD_COMPILER(json "Enable compiler for JSON" ON)
Pascal Bach6eb015a2014-04-17 16:19:07 +0200118THRIFT_ADD_COMPILER(javame "Enable compiler for Java ME" ON)
119THRIFT_ADD_COMPILER(delphi "Enable compiler for Delphi" ON)
120THRIFT_ADD_COMPILER(go "Enable compiler for Go" ON)
121THRIFT_ADD_COMPILER(d "Enable compiler for D" ON)
122THRIFT_ADD_COMPILER(lua "Enable compiler for Lua" ON)
Stig Bakken41e8cbf2016-02-12 16:33:12 +0100123THRIFT_ADD_COMPILER(gv "Enable compiler for GraphViz" ON)
124THRIFT_ADD_COMPILER(xml "Enable compiler for XML" ON)
Pascal Bach6eb015a2014-04-17 16:19:07 +0200125
126# Thrift is looking for include files in the src directory
127# we also add the current binary directory for generated files
128include_directories(${CMAKE_CURRENT_BINARY_DIR} src)
129
Pascal Bachd5f87e12014-12-12 15:59:17 +0100130add_executable(thrift-compiler ${thrift_SOURCES})
131set_target_properties(thrift-compiler PROPERTIES OUTPUT_NAME thrift)
Pascal Bach42be4e82014-04-23 18:19:06 +0200132
Pascal Bachd5f87e12014-12-12 15:59:17 +0100133target_link_libraries(thrift-compiler libparse)
Pascal Bach6eb015a2014-04-17 16:19:07 +0200134
Pascal Bachd5f87e12014-12-12 15:59:17 +0100135install(TARGETS thrift-compiler DESTINATION "${BIN_INSTALL_DIR}")