| 
 | 1 | +#  | 
 | 2 | +# Copyright 2013 Real Logic Ltd.  | 
 | 3 | +#  | 
 | 4 | +# Licensed under the Apache License, Version 2.0 (the "License");  | 
 | 5 | +# you may not use this file except in compliance with the License.  | 
 | 6 | +# You may obtain a copy of the License at  | 
 | 7 | +#  | 
 | 8 | +# http://www.apache.org/licenses/LICENSE-2.0  | 
 | 9 | +#  | 
 | 10 | +# Unless required by applicable law or agreed to in writing, software  | 
 | 11 | +# distributed under the License is distributed on an "AS IS" BASIS,  | 
 | 12 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  | 
 | 13 | +# See the License for the specific language governing permissions and  | 
 | 14 | +# limitations under the License.  | 
 | 15 | +#  | 
 | 16 | +cmake_minimum_required(VERSION 2.8)  | 
 | 17 | + | 
 | 18 | +option(USE_PROTOBUF "Build Protobuf installed in PROTOBUF_HOME." OFF)  | 
 | 19 | +option(RETRIEVE_AND_BUILD_PROTOBUF "Retrieve and build protobuf in PROTOBUF_HOME. Not Windows!!" OFF)  | 
 | 20 | + | 
 | 21 | +if(UNIX)  | 
 | 22 | +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Ofast")  | 
 | 23 | +endif()  | 
 | 24 | + | 
 | 25 | +if(APPLE)  | 
 | 26 | +add_definitions(-DDarwin)  | 
 | 27 | +elseif(WIN32)  | 
 | 28 | +add_definitions(-DWIN32)  | 
 | 29 | +else()  | 
 | 30 | +add_definitions(-D_GNU_SOURCE)  | 
 | 31 | +endif()  | 
 | 32 | + | 
 | 33 | +include_directories(  | 
 | 34 | +# the generated code directory  | 
 | 35 | +${CMAKE_CURRENT_BINARY_DIR}/cpp  | 
 | 36 | +# the benchmark code directory  | 
 | 37 | +${CMAKE_CURRENT_SOURCE_DIR}/../../main/cpp  | 
 | 38 | +)  | 
 | 39 | + | 
 | 40 | +set(SRCS_BENCHLET_MAIN  | 
 | 41 | +benchlet-main.cpp  | 
 | 42 | +)  | 
 | 43 | + | 
 | 44 | +set(SBE_CAR_SCHEMA ${CMAKE_CURRENT_SOURCE_DIR}/../resources/sbe/car-c.xml)  | 
 | 45 | +set(SBE_MD_SCHEMA ${CMAKE_CURRENT_SOURCE_DIR}/../resources/sbe/fix-message-samples.xml)  | 
 | 46 | +set(SBE_TARGET_DIR ${CMAKE_CURRENT_BINARY_DIR}/cpp)  | 
 | 47 | +set(SBE_JAR ${CMAKE_CURRENT_BINARY_DIR}/../dist/sbe.jar)  | 
 | 48 | +set(SBE_MD_GENERATED_HEADERS  | 
 | 49 | +${SBE_TARGET_DIR}/uk_co_real_logic_sbe_samples_fix/MarketDataIncrementalRefreshTrades.hpp  | 
 | 50 | +${SBE_TARGET_DIR}/uk_co_real_logic_sbe_samples_fix/MessageHeader.hpp  | 
 | 51 | +)  | 
 | 52 | +set(SBE_CAR_GENERATED_HEADERS  | 
 | 53 | +${SBE_TARGET_DIR}/uk_co_real_logic_sbe_examples_car/Car.hpp  | 
 | 54 | +${SBE_TARGET_DIR}/uk_co_real_logic_sbe_examples_car/MessageHeader.hpp  | 
 | 55 | +)  | 
 | 56 | + | 
 | 57 | +#  | 
 | 58 | +# Generation of the C++ codecs are done here as well as in the ant build as this might be used standalone  | 
 | 59 | +#  | 
 | 60 | + | 
 | 61 | +find_package(Java)  | 
 | 62 | + | 
 | 63 | +add_custom_command(  | 
 | 64 | +OUTPUT ${SBE_MD_GENERATED_HEADERS}  | 
 | 65 | +DEPENDS ${SBE_MD_SCHEMA}  | 
 | 66 | +COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${SBE_TARGET_DIR} -Dsbe.target.language="cpp98" -jar ${SBE_JAR} ${SBE_MD_SCHEMA}  | 
 | 67 | +)  | 
 | 68 | +add_custom_target(generate_sbe_md DEPENDS ${SBE_MD_GENERATED_HEADERS})  | 
 | 69 | + | 
 | 70 | +add_custom_command(  | 
 | 71 | +OUTPUT ${SBE_CAR_GENERATED_HEADERS}  | 
 | 72 | +DEPENDS ${SBE_CAR_SCHEMA}  | 
 | 73 | +COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${SBE_TARGET_DIR} -Dsbe.target.language="cpp98" -jar ${SBE_JAR} ${SBE_CAR_SCHEMA}  | 
 | 74 | +)  | 
 | 75 | +add_custom_target(generate_sbe_car DEPENDS ${SBE_CAR_GENERATED_HEADERS})  | 
 | 76 | + | 
 | 77 | +add_executable(benchlet-sbe-car-runner ${SRCS_BENCHLET_MAIN} CarBench.cpp)  | 
 | 78 | +add_executable(benchlet-sbe-md-runner ${SRCS_BENCHLET_MAIN} MarketDataBench.cpp)  | 
 | 79 | +add_dependencies(benchlet-sbe-md-runner generate_sbe_md)  | 
 | 80 | +add_dependencies(benchlet-sbe-car-runner generate_sbe_car)  | 
 | 81 | + | 
 | 82 | +set(DEV_DIR $ENV{HOME}/dev CACHE PATH "Path to dependencies")  | 
 | 83 | + | 
 | 84 | +set(PROTOBUF_VSN "protobuf-2.5.0")  | 
 | 85 | +set(PROTOBUF_HOME ${DEV_DIR}/${PROTOBUF_VSN} CACHE PATH "Path to protobuf install directory")  | 
 | 86 | +set(PROTOBUF_TARGET_DIR ${CMAKE_CURRENT_BINARY_DIR}/gen/cpp)  | 
 | 87 | + | 
 | 88 | +if(RETRIEVE_AND_BUILD_PROTOBUF)  | 
 | 89 | +if(EXISTS ${PROTOBUF_HOME})  | 
 | 90 | +message("PROTUBUF_HOME exists.")  | 
 | 91 | +else()  | 
 | 92 | +file(MAKE_DIRECTORY ${DEV_DIR}/deps)  | 
 | 93 | +file(DOWNLOAD https://protobuf.googlecode.com/files/${PROTOBUF_VSN}.tar.gz ${DEV_DIR}/deps/${PROTOBUF_VSN}.tar.gz)  | 
 | 94 | +execute_process(  | 
 | 95 | +WORKING_DIRECTORY ${DEV_DIR}/deps  | 
 | 96 | +COMMAND tar xzf ${DEV_DIR}/deps/${PROTOBUF_VSN}.tar.gz  | 
 | 97 | +)  | 
 | 98 | +execute_process(  | 
 | 99 | +WORKING_DIRECTORY ${DEV_DIR}/deps/${PROTOBUF_VSN}  | 
 | 100 | +OUTPUT_FILE ${DEV_DIR}/deps/${PROTOBUF_VSN}.configure.out  | 
 | 101 | +ERROR_FILE ${DEV_DIR}/deps/${PROTOBUF_VSN}.configure.err  | 
 | 102 | +COMMAND ./configure --prefix=${PROTOBUF_HOME}  | 
 | 103 | +)  | 
 | 104 | +execute_process(  | 
 | 105 | +WORKING_DIRECTORY ${DEV_DIR}/deps/${PROTOBUF_VSN}  | 
 | 106 | +OUTPUT_FILE ${DEV_DIR}/deps/${PROTOBUF_VSN}.make.out  | 
 | 107 | +ERROR_FILE ${DEV_DIR}/deps/${PROTOBUF_VSN}.make.err  | 
 | 108 | +COMMAND make  | 
 | 109 | +)  | 
 | 110 | +execute_process(  | 
 | 111 | +WORKING_DIRECTORY ${DEV_DIR}/deps/${PROTOBUF_VSN}  | 
 | 112 | +OUTPUT_FILE ${DEV_DIR}/deps/${PROTOBUF_VSN}.make-install.out  | 
 | 113 | +ERROR_FILE ${DEV_DIR}/deps/${PROTOBUF_VSN}.make-install.err  | 
 | 114 | +COMMAND make install  | 
 | 115 | +)  | 
 | 116 | +endif()  | 
 | 117 | +endif()  | 
 | 118 | + | 
 | 119 | +if(USE_PROTOBUF)  | 
 | 120 | +set(PROTOBUF_CAR_SCHEMA ${CMAKE_CURRENT_SOURCE_DIR}/../resources/protobuf/car.proto)  | 
 | 121 | +set(PROTOBUF_MD_SCHEMA ${CMAKE_CURRENT_SOURCE_DIR}/../resources/protobuf/fix-messages.proto)  | 
 | 122 | +set(PROTOBUF_MD_GENERATED_HEADERS  | 
 | 123 | +${CMAKE_CURRENT_BINARY_DIR}/cpp/fix-messages.pb.h  | 
 | 124 | +)  | 
 | 125 | +set(PROTOBUF_MD_GENERATED_SOURCES  | 
 | 126 | +${CMAKE_CURRENT_BINARY_DIR}/cpp/fix-messages.pb.cc  | 
 | 127 | +)  | 
 | 128 | +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cpp)  | 
 | 129 | +add_custom_command(  | 
 | 130 | +OUTPUT ${PROTOBUF_MD_GENERATED_HEADERS} ${PROTOBUF_MD_GENERATED_SOURCES}  | 
 | 131 | +DEPENDS ${PROTOBUF_MD_SCHEMA}  | 
 | 132 | +COMMAND ${PROTOBUF_HOME}/bin/protoc -I${CMAKE_CURRENT_SOURCE_DIR}/../resources/protobuf --cpp_out ${PROTOBUF_TARGET_DIR} ${PROTOBUF_MD_SCHEMA}  | 
 | 133 | +)  | 
 | 134 | +include_directories(AFTER ${PROTOBUF_HOME}/include)  | 
 | 135 | +find_library(PROTOBUF_LIBS protobuf ${PROTOBUF_HOME}/lib)  | 
 | 136 | +add_custom_target(generate_protobuf_md DEPENDS ${PROTOBUF_MD_GENERATED_HEADERS} ${PROTOBUF_MD_GENERATED_SOURCES})  | 
 | 137 | +add_executable(benchlet-pb-md-runner ${SRCS_BENCHLET_MAIN} ${PROTOBUF_MD_GENERATED_SOURCES} PbMarketDataBench.cpp)  | 
 | 138 | +add_dependencies(benchlet-pb-md-runner generate_protobuf_md)  | 
 | 139 | +target_link_libraries(benchlet-pb-md-runner ${PROTOBUF_LIBS})  | 
 | 140 | +endif()  | 
0 commit comments