Petr Mrázek 2012-03-10 02:15:34 +01:00
commit c260aca3f1
9 changed files with 133 additions and 23 deletions

@ -80,6 +80,10 @@ ENDIF()
#add depends to include path #add depends to include path
INCLUDE_DIRECTORIES ( library/depends ) INCLUDE_DIRECTORIES ( library/depends )
INCLUDE_DIRECTORIES ( library/depends/protobuf/ )
# use shared libraries for protobuf
ADD_DEFINITIONS(-DPROTOBUF_USE_DLLS)
# build the static lua for dfusion # build the static lua for dfusion
INCLUDE_DIRECTORIES ( lua/include ) INCLUDE_DIRECTORIES ( lua/include )

@ -141,6 +141,26 @@ ELSE()
LIST(APPEND PROJECT_SRCS ${PROJECT_SRCS_WINDOWS}) LIST(APPEND PROJECT_SRCS ${PROJECT_SRCS_WINDOWS})
ENDIF() ENDIF()
# Protobuf
FILE(GLOB PROJECT_PROTOS ${CMAKE_CURRENT_SOURCE_DIR}/proto/*.proto)
STRING(REPLACE ".proto" ".pb.cc" PROJECT_PROTO_SRCS ${PROJECT_PROTOS})
STRING(REPLACE ".proto" ".pb.h" PROJECT_PROTO_HDRS ${PROJECT_PROTOS})
LIST(APPEND PROJECT_HDRS ${PROJECT_PROTO_HDRS})
LIST(APPEND PROJECT_SRCS ${PROJECT_PROTO_SRCS})
ADD_CUSTOM_COMMAND(
OUTPUT ${PROJECT_PROTO_SRCS} ${PROJECT_PROTO_HDRS}
COMMAND protoc-bin -I=${CMAKE_CURRENT_SOURCE_DIR}/proto/
--cpp_out=dllexport_decl=DFHACK_EXPORT:${CMAKE_CURRENT_SOURCE_DIR}/proto/
${PROJECT_PROTOS}
DEPENDS protoc-bin ${PROJECT_PROTOS}
)
#
SET_SOURCE_FILES_PROPERTIES( ${PROJECT_HDRS} PROPERTIES HEADER_FILE_ONLY TRUE ) SET_SOURCE_FILES_PROPERTIES( ${PROJECT_HDRS} PROPERTIES HEADER_FILE_ONLY TRUE )
LIST(APPEND PROJECT_SRCS ${PROJECT_HDRS}) LIST(APPEND PROJECT_SRCS ${PROJECT_HDRS})
@ -193,10 +213,16 @@ else()
ENDIF() ENDIF()
endif() endif()
IF(WIN32)
SET_TARGET_PROPERTIES(dfhack PROPERTIES COMPILE_FLAGS "/FI\"Export.h\"" )
ELSE()
SET_TARGET_PROPERTIES(dfhack PROPERTIES COMPILE_FLAGS "-include Export.h" )
ENDIF()
#effectively disables debug builds... #effectively disables debug builds...
SET_TARGET_PROPERTIES(dfhack PROPERTIES DEBUG_POSTFIX "-debug" ) SET_TARGET_PROPERTIES(dfhack PROPERTIES DEBUG_POSTFIX "-debug" )
TARGET_LINK_LIBRARIES(dfhack ${PROJECT_LIBS}) TARGET_LINK_LIBRARIES(dfhack protobuf-lite ${PROJECT_LIBS})
IF(UNIX) IF(UNIX)
# On linux, copy our version of the df launch script which sets LD_PRELOAD # On linux, copy our version of the df launch script which sets LD_PRELOAD

@ -91,6 +91,8 @@ google/protobuf/wire_format_lite.h
google/protobuf/wire_format_lite_inl.h google/protobuf/wire_format_lite_inl.h
google/protobuf/io/zero_copy_stream.h google/protobuf/io/zero_copy_stream.h
google/protobuf/io/zero_copy_stream_impl_lite.h google/protobuf/io/zero_copy_stream_impl_lite.h
google/protobuf/io/gzip_stream.h
google/protobuf/io/zero_copy_stream_impl.h
) )
SET(LIBPROTOBUF_FULL_HDRS SET(LIBPROTOBUF_FULL_HDRS
@ -99,7 +101,6 @@ google/protobuf/descriptor.pb.h
google/protobuf/descriptor_database.h google/protobuf/descriptor_database.h
google/protobuf/dynamic_message.h google/protobuf/dynamic_message.h
google/protobuf/generated_message_reflection.h google/protobuf/generated_message_reflection.h
google/protobuf/io/gzip_stream.h
google/protobuf/compiler/importer.h google/protobuf/compiler/importer.h
google/protobuf/message.h google/protobuf/message.h
google/protobuf/compiler/parser.h google/protobuf/compiler/parser.h
@ -112,7 +113,6 @@ google/protobuf/text_format.h
google/protobuf/io/tokenizer.h google/protobuf/io/tokenizer.h
google/protobuf/unknown_field_set.h google/protobuf/unknown_field_set.h
google/protobuf/wire_format.h google/protobuf/wire_format.h
google/protobuf/io/zero_copy_stream_impl.h
) )
LIST(APPEND LIBPROTOBUF_FULL_HDRS ${LIBPROTOBUF_LITE_HDRS}) LIST(APPEND LIBPROTOBUF_FULL_HDRS ${LIBPROTOBUF_LITE_HDRS})
@ -128,6 +128,8 @@ google/protobuf/repeated_field.cc
google/protobuf/wire_format_lite.cc google/protobuf/wire_format_lite.cc
google/protobuf/io/zero_copy_stream.cc google/protobuf/io/zero_copy_stream.cc
google/protobuf/io/zero_copy_stream_impl_lite.cc google/protobuf/io/zero_copy_stream_impl_lite.cc
google/protobuf/io/gzip_stream.cc
google/protobuf/io/zero_copy_stream_impl.cc
) )
SET(LIBPROTOBUF_FULL_SRCS SET(LIBPROTOBUF_FULL_SRCS
@ -137,7 +139,6 @@ google/protobuf/descriptor_database.cc
google/protobuf/dynamic_message.cc google/protobuf/dynamic_message.cc
google/protobuf/extension_set_heavy.cc google/protobuf/extension_set_heavy.cc
google/protobuf/generated_message_reflection.cc google/protobuf/generated_message_reflection.cc
google/protobuf/io/gzip_stream.cc
google/protobuf/compiler/importer.cc google/protobuf/compiler/importer.cc
google/protobuf/message.cc google/protobuf/message.cc
google/protobuf/compiler/parser.cc google/protobuf/compiler/parser.cc
@ -151,7 +152,6 @@ google/protobuf/text_format.cc
google/protobuf/io/tokenizer.cc google/protobuf/io/tokenizer.cc
google/protobuf/unknown_field_set.cc google/protobuf/unknown_field_set.cc
google/protobuf/wire_format.cc google/protobuf/wire_format.cc
google/protobuf/io/zero_copy_stream_impl.cc
) )
SET(LIBPROTOC_HDRS SET(LIBPROTOC_HDRS
@ -201,9 +201,36 @@ LIST(APPEND LIBPROTOBUF_FULL_SRCS ${LIBPROTOBUF_LITE_SRCS})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
INCLUDE_DIRECTORIES(${dfhack_SOURCE_DIR}/library/depends/zlib) INCLUDE_DIRECTORIES(${dfhack_SOURCE_DIR}/library/depends/zlib)
ADD_LIBRARY(protobuf-lite ${LIBPROTOBUF_LITE_SRCS} ${LIBPROTOBUF_LITE_HDRS}) # Protobuf shared libraries
ADD_LIBRARY(protobuf ${LIBPROTOBUF_FULL_SRCS} ${LIBPROTOBUF_FULL_HDRS})
ADD_LIBRARY(protoc ${LIBPROTOC_SRCS} ${LIBPROTOC_HDRS}) ADD_LIBRARY(protobuf SHARED ${LIBPROTOBUF_FULL_SRCS} ${LIBPROTOBUF_FULL_HDRS})
ADD_LIBRARY(protobuf-lite SHARED ${LIBPROTOBUF_LITE_SRCS} ${LIBPROTOBUF_LITE_HDRS})
SET_TARGET_PROPERTIES(protobuf PROPERTIES COMPILE_DEFINITIONS LIBPROTOBUF_EXPORTS)
SET_TARGET_PROPERTIES(protobuf-lite PROPERTIES COMPILE_DEFINITIONS LIBPROTOBUF_EXPORTS)
IF(WIN32)
TARGET_LINK_LIBRARIES(protobuf ${CMAKE_THREAD_LIBS_INIT} zlib)
TARGET_LINK_LIBRARIES(protobuf-lite ${CMAKE_THREAD_LIBS_INIT} zlib)
ELSE()
TARGET_LINK_LIBRARIES(protobuf ${CMAKE_THREAD_LIBS_INIT} z)
TARGET_LINK_LIBRARIES(protobuf-lite ${CMAKE_THREAD_LIBS_INIT} z)
ENDIF()
install(TARGETS protobuf-lite
LIBRARY DESTINATION ${DFHACK_LIBRARY_DESTINATION}/deplibs
RUNTIME DESTINATION ${DFHACK_LIBRARY_DESTINATION}/deplibs)
# Protobuf compiler shared library
ADD_LIBRARY(protoc SHARED ${LIBPROTOC_SRCS} ${LIBPROTOC_HDRS})
SET_TARGET_PROPERTIES(protoc PROPERTIES COMPILE_DEFINITIONS LIBPROTOC_EXPORTS)
TARGET_LINK_LIBRARIES(protoc protobuf)
# Protobuf compiler executable
ADD_EXECUTABLE(protoc-bin google/protobuf/compiler/main.cc google/protobuf/compiler/command_line_interface.h google/protobuf/compiler/cpp/cpp_generator.h) ADD_EXECUTABLE(protoc-bin google/protobuf/compiler/main.cc google/protobuf/compiler/command_line_interface.h google/protobuf/compiler/cpp/cpp_generator.h)
SET_TARGET_PROPERTIES(protoc-bin PROPERTIES OUTPUT_NAME protoc) SET_TARGET_PROPERTIES(protoc-bin PROPERTIES OUTPUT_NAME protoc)
TARGET_LINK_LIBRARIES(protoc-bin protoc protobuf ${CMAKE_THREAD_LIBS_INIT}) TARGET_LINK_LIBRARIES(protoc-bin protoc)

@ -72,7 +72,7 @@ double Infinity();
double NaN(); double NaN();
// Constant used for empty default strings. // Constant used for empty default strings.
extern const ::std::string kEmptyString; extern LIBPROTOBUF_EXPORT const ::std::string kEmptyString;
} // namespace internal } // namespace internal

@ -96,6 +96,9 @@ namespace protobuf {
#else #else
#define LIBPROTOC_EXPORT __declspec(dllimport) #define LIBPROTOC_EXPORT __declspec(dllimport)
#endif #endif
#elif defined(PROTOBUF_USE_DLLS)
#define LIBPROTOBUF_EXPORT __attribute__ ((visibility("default")))
#define LIBPROTOC_EXPORT __attribute__ ((visibility("default")))
#else #else
#define LIBPROTOBUF_EXPORT #define LIBPROTOBUF_EXPORT
#define LIBPROTOC_EXPORT #define LIBPROTOC_EXPORT

@ -0,0 +1,2 @@
*.pb.cc
*.pb.h

@ -0,0 +1,59 @@
package dfproto;
option optimize_for = LITE_RUNTIME;
message CoreTextFragment {
required string text = 1;
enum Color {
COLOR_BLACK = 0;
COLOR_BLUE = 1;
COLOR_GREEN = 2;
COLOR_CYAN = 3;
COLOR_RED = 4;
COLOR_MAGENTA = 5;
COLOR_BROWN = 6;
COLOR_GREY = 7;
COLOR_DARKGREY = 8;
COLOR_LIGHTBLUE = 9;
COLOR_LIGHTGREEN = 10;
COLOR_LIGHTCYAN = 11;
COLOR_LIGHTRED = 12;
COLOR_LIGHTMAGENTA = 13;
COLOR_YELLOW = 14;
COLOR_WHITE = 15;
};
optional Color color = 2;
}
message CoreTextNotification {
repeated CoreTextFragment fragments = 1;
}
message CoreErrorNotification {
enum ErrorCode {
CR_WOULD_BREAK = -2;
CR_NOT_IMPLEMENTED = -1;
CR_FAILURE = 0;
CR_OK = 1;
CR_WRONG_USAGE = 2;
};
required ErrorCode code = 1;
}
message CoreBindRequest {
required string method = 1;
optional string plugin = 2;
optional int32 min_version = 3;
}
message CoreBindReply {
required int32 assigned_id = 1;
required int32 version = 2;
}
message CoreRunStringRequest {
required string command = 1;
repeated string arguments = 2;
}

@ -1,15 +1,5 @@
PROJECT(mapexport) PROJECT(mapexport)
INCLUDE_DIRECTORIES (
${CMAKE_CURRENT_SOURCE_DIR}
${dfhack_SOURCE_DIR}/library/depends/protobuf/
${dfhack_SOURCE_DIR}/library/depends/zlib/
)
LINK_DIRECTORIES(
${dfhack_SOURCE_DIR}/library/depends/zlib/
)
#The protobuf sources we generate will require these headers #The protobuf sources we generate will require these headers
SET(PROJECT_HDRS SET(PROJECT_HDRS
${dfhack_SOURCE_DIR}/library/depends/protobuf/google/protobuf/stubs/once.h ${dfhack_SOURCE_DIR}/library/depends/protobuf/google/protobuf/stubs/once.h
@ -51,7 +41,7 @@ DEPENDS protoc-bin ${PROJECT_PROTOS}
) )
IF(WIN32) IF(WIN32)
DFHACK_PLUGIN(mapexport ${PROJECT_SRCS} ${PROJECT_HDRS} LINK_LIBRARIES protobuf zlib) DFHACK_PLUGIN(mapexport ${PROJECT_SRCS} ${PROJECT_HDRS} LINK_LIBRARIES protobuf-lite)
ELSE() ELSE()
DFHACK_PLUGIN(mapexport ${PROJECT_SRCS} ${PROJECT_HDRS} LINK_LIBRARIES protobuf z) DFHACK_PLUGIN(mapexport ${PROJECT_SRCS} ${PROJECT_HDRS} LINK_LIBRARIES protobuf-lite)
ENDIF() ENDIF()

@ -37,7 +37,6 @@ DFhackCExport command_result plugin_init ( Core * c, std::vector <PluginCommand>
DFhackCExport command_result plugin_shutdown ( Core * c ) DFhackCExport command_result plugin_shutdown ( Core * c )
{ {
google::protobuf::ShutdownProtobufLibrary();
return CR_OK; return CR_OK;
} }