You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by li...@apache.org on 2022/09/20 14:17:43 UTC

[rocketmq-clients] 01/01: Prepare to build binary package

This is an automated email from the ASF dual-hosted git repository.

lizhanhui pushed a commit to branch cmake_package
in repository https://gitbox.apache.org/repos/asf/rocketmq-clients.git

commit a8ed15fc35d75b5dc7c1f9565c8db1f5a66cd305
Author: lizhanhui <li...@gmail.com>
AuthorDate: Tue Sep 20 22:17:10 2022 +0800

    Prepare to build binary package
---
 cpp/examples/Makefile            | 16 ++++++++++++++++
 cpp/source/CMakeLists.txt        | 11 +++++++++--
 cpp/source/rocketmq/rocketmq.lds |  9 +++++++++
 cpp/tools/package.sh             | 36 ++++++++++++++++++++++++++++++++++++
 4 files changed, 70 insertions(+), 2 deletions(-)

diff --git a/cpp/examples/Makefile b/cpp/examples/Makefile
new file mode 100644
index 0000000..31773fb
--- /dev/null
+++ b/cpp/examples/Makefile
@@ -0,0 +1,16 @@
+all: $(wildcard *.cpp)
+	c++ -std=c++11 -I../include -L../lib ExampleProducer.cpp -o example_producer -lrocketmq -Wl,-rpath,../lib
+	c++ -std=c++11 -I../include -L../lib ExamplePushConsumer.cpp -o example_push_consumer -lrocketmq -Wl,-rpath,../lib
+	c++ -std=c++11 -I../include -L../lib ExampleProducerWithAsync.cpp -o example_producer_with_async -lrocketmq -Wl,-rpath,../lib
+	c++ -std=c++11 -I../include -L../lib ExampleProducerWithFifoMessage.cpp -o example_producer_with_fifo_message -lrocketmq -Wl,-rpath,../lib
+	c++ -std=c++11 -I../include -L../lib ExampleProducerWithTimedMessage.cpp -o example_producer_with_timed_message -lrocketmq -Wl,-rpath,../lib
+	c++ -std=c++11 -I../include -L../lib ExampleProducerWithTransactionalMessage.cpp.cpp -o example_producer_with_transactinoal_message -lrocketmq -Wl,-rpath,../lib
+		c++ -std=c++11 -I../include -L../lib ExampleSimpleConsumer.cpp -o example_simple_consumer -lrocketmq -Wl,-rpath,../lib
+clean:
+	rm -fr example_producer
+	rm -fr example_push_consumer
+	rm -fr example_producer_with_async
+	rm -fr example_producer_with_fifo_message
+	rm -fr example_producer_with_timed_message
+	rm -fr example_producer_with_transactinoal_message
+	rm -fr example_simple_consumer
\ No newline at end of file
diff --git a/cpp/source/CMakeLists.txt b/cpp/source/CMakeLists.txt
index d42c6a1..32e7466 100644
--- a/cpp/source/CMakeLists.txt
+++ b/cpp/source/CMakeLists.txt
@@ -29,7 +29,9 @@ target_link_libraries(rocketmq
             opencensus::stats
             opencensus_proto
             spdlog)
-set_target_properties(rocketmq PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+set_target_properties(rocketmq 
+        PROPERTIES 
+                ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
 
 
 add_library(rocketmq_shared SHARED
@@ -53,7 +55,12 @@ target_link_libraries(rocketmq_shared
             opencensus::stats
             opencensus_proto
             spdlog)
+target_link_options(rocketmq_shared 
+        PRIVATE 
+                $<$<PLATFORM_ID:Linux>:-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/rocketmq/rocketmq.lds>)            
 set_target_properties(rocketmq_shared
         PROPERTIES
             LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
-            LIBRARY_OUTPUT_NAME rocketmq)
\ No newline at end of file
+            LIBRARY_OUTPUT_NAME rocketmq
+            VERSION 5.0.0 
+            SOVERSION 5)
\ No newline at end of file
diff --git a/cpp/source/rocketmq/rocketmq.lds b/cpp/source/rocketmq/rocketmq.lds
new file mode 100644
index 0000000..80ff8dc
--- /dev/null
+++ b/cpp/source/rocketmq/rocketmq.lds
@@ -0,0 +1,9 @@
+VERSION_5.0.0 {
+    global:
+        *rocketmq::*;
+        extern "C++" {
+            *rocketmq::*;
+        };
+    local: 
+        *;
+};
\ No newline at end of file
diff --git a/cpp/tools/package.sh b/cpp/tools/package.sh
new file mode 100644
index 0000000..640d9ec
--- /dev/null
+++ b/cpp/tools/package.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+TOOLS_DIR=$(dirname "$0")
+WORKSPACE=$(cd -- "$TOOLS_DIR/.." && pwd)
+BUILD_DIR=$WORKSPACE/_build
+if [ -d $BUILD_DIR ]; then
+    rm -fr $BUILD_DIR
+fi
+
+mkdir -p "$BUILD_DIR"
+
+cd $BUILD_DIR
+cmake -DCMAKE_BUILD_TYPE=Release ..
+make -j $(nproc)
+VERSION="rocketmq-client-5.0.0"
+DIST_DIR="$WORKSPACE/$VERSION/"
+if [ -d "$DIST_DIR" ]; then
+    rm -fr $DIST_DIR
+fi
+
+mkdir -p "$DIST_DIR/include"
+mkdir -p "$DIST_DIR/lib"
+mkdir -p "$DIST_DIR/examples"
+
+cp -r $WORKSPACE/include/rocketmq $DIST_DIR/include/
+cp $WORKSPACE/examples/*.cpp $DIST_DIR/examples/
+cp $WORKSPACE/examples/Makefile $DIST_DIR/examples/
+
+if [[ "$OSTYPE" == "linux-gnu"* ]]; then
+  cp $BUILD_DIR/librocketmq.so $DIST_DIR/lib/
+elif [[ "$OSTYPE" == "darwin"* ]]; then
+  cp $BUILD_DIR/librocketmq.dylib $DIST_DIR/lib/
+fi
+
+echo "Create Package"
+cd "$WORKSPACE"
+tar -czvf "$VERSION.tar.gz" "$VERSION"