blob: 5642d16bfb951572ef5b52d9b63edbd33d69caeb [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 set(FLEX_FLAGS "--wincompat") # Don't use unistd.h on windows
23 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/windows/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
24else()
25 set(FLEX_FLAGS " ")
26 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
27endif()
28
29find_package(FLEX REQUIRED)
30find_package(BISON REQUIRED)
31
32# Create flex and bison files and build the lib parse static library
33BISON_TARGET(thrifty ${CMAKE_CURRENT_SOURCE_DIR}/src/thrifty.yy ${CMAKE_CURRENT_BINARY_DIR}/thrifty.cc)
34FLEX_TARGET(thriftl ${CMAKE_CURRENT_SOURCE_DIR}/src/thriftl.ll ${CMAKE_CURRENT_BINARY_DIR}/thriftl.cc COMPILE_FLAGS ${FLEX_FLAGS})
35ADD_FLEX_BISON_DEPENDENCY(thriftl thrifty)
36
37# HACK: Work around the fact that bison crates a .hh file but we need a .h file
38add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/thrifty.h
39 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/thrifty.hh ${CMAKE_CURRENT_BINARY_DIR}/thrifty.h
40 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/thrifty.hh
41 )
42
43set(libparse_SOURCES
44 ${CMAKE_CURRENT_BINARY_DIR}/thrifty.cc
45 ${CMAKE_CURRENT_BINARY_DIR}/thriftl.cc
46 ${CMAKE_CURRENT_BINARY_DIR}/thrifty.h
47)
48
49add_library(libparse STATIC ${libparse_SOURCES})
50
51# Create the thrift compiler
Roger Meier5af78c82015-04-12 21:43:12 +020052set( thrift_SOURCES
Pascal Bach6eb015a2014-04-17 16:19:07 +020053 src/main.cc
54 src/md5.c
55 src/generate/t_generator.cc
56 src/generate/t_generator_registry.h
57 src/globals.h
58 src/main.h
59 src/platform.h
60 src/md5.h
61 src/parse/t_doc.h
62 src/parse/t_type.h
63 src/parse/t_base_type.h
64 src/parse/t_enum.h
65 src/parse/t_enum_value.h
66 src/parse/t_typedef.h
67 src/parse/t_typedef.cc
68 src/parse/t_container.h
69 src/parse/t_list.h
70 src/parse/t_set.h
71 src/parse/t_map.h
72 src/parse/t_struct.h
73 src/parse/t_field.h
74 src/parse/t_service.h
75 src/parse/t_function.h
76 src/parse/t_program.h
77 src/parse/t_scope.h
78 src/parse/t_const.h
79 src/parse/t_const_value.h
80 src/parse/parse.cc
81 src/generate/t_generator.h
82 src/generate/t_oop_generator.h
83 src/generate/t_html_generator.h
84 src/windows/config.h
85 version.h
86)
87
88# This macro adds an option THRIFT_COMPILER_${NAME}
89# that allows enabling or disabling certain languages
90macro(THRIFT_ADD_COMPILER name description initial)
91 string(TOUPPER "THRIFT_COMPILER_${name}" enabler)
92 set(src "src/generate/t_${name}_generator.cc")
93 option(${enabler} ${description} ${initial})
94 if(${enabler})
95 list(APPEND thrift_SOURCES ${src})
96 endif()
97endmacro()
98
99# The following compiler can be enabled or disabled
100THRIFT_ADD_COMPILER(c_glib "Enable compiler for C with Glib" ON)
101THRIFT_ADD_COMPILER(cpp "Enable compiler for C++" ON)
102THRIFT_ADD_COMPILER(java "Enable compiler for Java" ON)
103THRIFT_ADD_COMPILER(as3 "Enable compiler for ActionScript 3" ON)
Jens Geyerbd52f1a2014-07-28 01:25:30 +0200104THRIFT_ADD_COMPILER(haxe "Enable compiler for Haxe" ON)
Pascal Bach6eb015a2014-04-17 16:19:07 +0200105THRIFT_ADD_COMPILER(csharp "Enable compiler for C#" ON)
106THRIFT_ADD_COMPILER(py "Enable compiler for Python 2.0" ON)
107THRIFT_ADD_COMPILER(rb "Enable compiler for Ruby" ON)
108THRIFT_ADD_COMPILER(perl "Enable compiler for Perl" ON)
109THRIFT_ADD_COMPILER(php "Enable compiler for PHP" ON)
110THRIFT_ADD_COMPILER(erl "Enable compiler for Erlang" ON)
111THRIFT_ADD_COMPILER(cocoa "Enable compiler for Cocoa Objective-C" ON)
112THRIFT_ADD_COMPILER(st "Enable compiler for Smalltalk" ON)
113THRIFT_ADD_COMPILER(ocaml "Enable compiler for OCaml" ON)
114THRIFT_ADD_COMPILER(hs "Enable compiler for Haskell" ON)
115THRIFT_ADD_COMPILER(xsd "Enable compiler for XSD" ON)
116THRIFT_ADD_COMPILER(html "Enable compiler for HTML Documentation" ON)
117THRIFT_ADD_COMPILER(js "Enable compiler for JavaScript" ON)
Roger Meier1a74d9c2014-10-12 23:35:43 +0200118THRIFT_ADD_COMPILER(json "Enable compiler for JSON" ON)
Pascal Bach6eb015a2014-04-17 16:19:07 +0200119THRIFT_ADD_COMPILER(javame "Enable compiler for Java ME" ON)
120THRIFT_ADD_COMPILER(delphi "Enable compiler for Delphi" ON)
121THRIFT_ADD_COMPILER(go "Enable compiler for Go" ON)
122THRIFT_ADD_COMPILER(d "Enable compiler for D" ON)
123THRIFT_ADD_COMPILER(lua "Enable compiler for Lua" ON)
124
125# Thrift is looking for include files in the src directory
126# we also add the current binary directory for generated files
127include_directories(${CMAKE_CURRENT_BINARY_DIR} src)
128
Pascal Bachd5f87e12014-12-12 15:59:17 +0100129add_executable(thrift-compiler ${thrift_SOURCES})
130set_target_properties(thrift-compiler PROPERTIES OUTPUT_NAME thrift)
Pascal Bach42be4e82014-04-23 18:19:06 +0200131
Pascal Bachd5f87e12014-12-12 15:59:17 +0100132target_link_libraries(thrift-compiler libparse)
Pascal Bach6eb015a2014-04-17 16:19:07 +0200133
Pascal Bachd5f87e12014-12-12 15:59:17 +0100134install(TARGETS thrift-compiler DESTINATION "${BIN_INSTALL_DIR}")