blob: 01e229d8115a723d9560f09eb5cdf6e951c65d3d [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
Roger Meier5af78c82015-04-12 21:43:12 +020050set( thrift_SOURCES
Pascal Bach6eb015a2014-04-17 16:19:07 +020051 src/main.cc
52 src/md5.c
53 src/generate/t_generator.cc
54 src/generate/t_generator_registry.h
55 src/globals.h
56 src/main.h
57 src/platform.h
58 src/md5.h
59 src/parse/t_doc.h
60 src/parse/t_type.h
61 src/parse/t_base_type.h
62 src/parse/t_enum.h
63 src/parse/t_enum_value.h
64 src/parse/t_typedef.h
65 src/parse/t_typedef.cc
66 src/parse/t_container.h
67 src/parse/t_list.h
68 src/parse/t_set.h
69 src/parse/t_map.h
70 src/parse/t_struct.h
71 src/parse/t_field.h
72 src/parse/t_service.h
73 src/parse/t_function.h
74 src/parse/t_program.h
75 src/parse/t_scope.h
76 src/parse/t_const.h
77 src/parse/t_const_value.h
78 src/parse/parse.cc
79 src/generate/t_generator.h
80 src/generate/t_oop_generator.h
81 src/generate/t_html_generator.h
82 src/windows/config.h
83 version.h
84)
85
86# This macro adds an option THRIFT_COMPILER_${NAME}
87# that allows enabling or disabling certain languages
88macro(THRIFT_ADD_COMPILER name description initial)
89 string(TOUPPER "THRIFT_COMPILER_${name}" enabler)
90 set(src "src/generate/t_${name}_generator.cc")
91 option(${enabler} ${description} ${initial})
92 if(${enabler})
93 list(APPEND thrift_SOURCES ${src})
94 endif()
95endmacro()
96
97# The following compiler can be enabled or disabled
98THRIFT_ADD_COMPILER(c_glib "Enable compiler for C with Glib" ON)
99THRIFT_ADD_COMPILER(cpp "Enable compiler for C++" ON)
100THRIFT_ADD_COMPILER(java "Enable compiler for Java" ON)
101THRIFT_ADD_COMPILER(as3 "Enable compiler for ActionScript 3" 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)
110THRIFT_ADD_COMPILER(st "Enable compiler for Smalltalk" ON)
111THRIFT_ADD_COMPILER(ocaml "Enable compiler for OCaml" ON)
112THRIFT_ADD_COMPILER(hs "Enable compiler for Haskell" ON)
113THRIFT_ADD_COMPILER(xsd "Enable compiler for XSD" ON)
114THRIFT_ADD_COMPILER(html "Enable compiler for HTML Documentation" ON)
115THRIFT_ADD_COMPILER(js "Enable compiler for JavaScript" ON)
Roger Meier1a74d9c2014-10-12 23:35:43 +0200116THRIFT_ADD_COMPILER(json "Enable compiler for JSON" ON)
Pascal Bach6eb015a2014-04-17 16:19:07 +0200117THRIFT_ADD_COMPILER(javame "Enable compiler for Java ME" ON)
118THRIFT_ADD_COMPILER(delphi "Enable compiler for Delphi" ON)
119THRIFT_ADD_COMPILER(go "Enable compiler for Go" ON)
120THRIFT_ADD_COMPILER(d "Enable compiler for D" ON)
121THRIFT_ADD_COMPILER(lua "Enable compiler for Lua" ON)
122
123# Thrift is looking for include files in the src directory
124# we also add the current binary directory for generated files
125include_directories(${CMAKE_CURRENT_BINARY_DIR} src)
126
Pascal Bachd5f87e12014-12-12 15:59:17 +0100127add_executable(thrift-compiler ${thrift_SOURCES})
128set_target_properties(thrift-compiler PROPERTIES OUTPUT_NAME thrift)
Pascal Bach42be4e82014-04-23 18:19:06 +0200129
Pascal Bachd5f87e12014-12-12 15:59:17 +0100130target_link_libraries(thrift-compiler libparse)
Pascal Bach6eb015a2014-04-17 16:19:07 +0200131
Pascal Bachd5f87e12014-12-12 15:59:17 +0100132install(TARGETS thrift-compiler DESTINATION "${BIN_INSTALL_DIR}")