Skip to content

Commit 2f4bf72

Browse files
authored
Merge pull request #31 from lkpworkspace/dev
v0.9.2 - feature - 支持编写进程间/机器间通信组件并添加示例 - 支持docker - 支持deb打包 - 子模块支持deb打包 - api - Send/SendRequest方法删除dst_addr参数 - other - 消息调度线程timeout从1000ms减小到100ms
2 parents 08cccd2 + 0129542 commit 2f4bf72

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+709
-370
lines changed

.github/workflows/linux.yml

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ jobs:
8787
cmake -S . -B ${{github.workspace}}/build_${{matrix.build_type}} \
8888
-DCMAKE_CXX_STANDARD=${{matrix.std}} \
8989
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
90+
-DMYFRAME_USE_CV=OFF \
9091
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
9192
-DCMAKE_PREFIX_PATH="${{github.workspace}}/jsoncpp;${{github.workspace}}/glog" \
9293
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/install \

CMakeLists.txt

+27-80
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
cmake_minimum_required(VERSION 3.10)
2-
project(myframe VERSION 0.9.1)
2+
project(myframe VERSION 0.9.2)
33

44
### option
5-
option(MYFRAME_USE_CV "Using conditional variables for thread communication" OFF)
6-
option(MYFRAME_INSTALL_DEPS "Install deps" ON)
5+
option(MYFRAME_USE_CV "Using conditional variables for thread communication" ON)
6+
option(MYFRAME_INSTALL_DEPS "Install deps" OFF)
77
option(MYFRAME_GENERATE_EXAMPLE "Generate example library" ON)
88
option(MYFRAME_GENERATE_TEST "Generate test executable program" ON)
99

10+
### cmake module
11+
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
12+
1013
### compile option
1114
set(CMAKE_C_VISIBILITY_PRESET hidden)
1215
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
@@ -20,16 +23,9 @@ else()
2023
message(STATUS "Set default cxx standard 17")
2124
endif()
2225

23-
### output path
24-
set(MYFRAME_OUTPUT_ROOT "${CMAKE_BINARY_DIR}/output")
25-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${MYFRAME_OUTPUT_ROOT}/lib)
26-
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${MYFRAME_OUTPUT_ROOT}/lib)
27-
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${MYFRAME_OUTPUT_ROOT}/bin)
28-
2926
### install path
3027
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
31-
set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/${CMAKE_PROJECT_NAME}" CACHE PATH "myframe default install prefix" FORCE)
32-
message(STATUS "Set default install prefix $ENV{HOME}/${CMAKE_PROJECT_NAME}")
28+
message(STATUS "Set default install prefix ${CMAKE_INSTALL_PREFIX}")
3329
else()
3430
message(STATUS "Set install prefix ${CMAKE_INSTALL_PREFIX}")
3531
endif()
@@ -46,90 +42,41 @@ find_package(Threads REQUIRED)
4642
find_package(jsoncpp REQUIRED)
4743
find_package(glog REQUIRED)
4844

49-
link_libraries(
50-
Threads::Threads
51-
${CMAKE_DL_LIBS}
52-
glog::glog
53-
jsoncpp_lib
54-
)
55-
56-
### include dir
57-
include_directories(.)
58-
5945
### sub directory
6046
add_subdirectory(myframe)
6147
add_subdirectory(launcher)
6248
if (MYFRAME_GENERATE_EXAMPLE)
63-
add_subdirectory(examples)
49+
add_subdirectory(examples)
6450
endif()
6551
if (MYFRAME_GENERATE_TEST)
66-
add_subdirectory(test)
52+
add_subdirectory(test)
6753
endif()
6854

6955
### install file/dir
7056
install(FILES
71-
"LICENSE"
72-
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
73-
DESTINATION .
57+
"LICENSE"
58+
PERMISSIONS
59+
OWNER_READ OWNER_WRITE
60+
GROUP_READ
61+
WORLD_READ
62+
DESTINATION .
63+
)
64+
install(PROGRAMS
65+
"tools/gen_mod_proj.py"
66+
DESTINATION ${MYFRAME_BIN_DIR}
7467
)
7568
install(DIRECTORY templates DESTINATION .)
76-
install(DIRECTORY tools DESTINATION .)
77-
install(DIRECTORY conf DESTINATION .)
7869
install(DIRECTORY DESTINATION ${MYFRAME_LOG_DIR})
7970
install(DIRECTORY DESTINATION ${MYFRAME_SERVICE_DIR})
80-
install(CODE "
81-
file(
82-
WRITE ${CMAKE_INSTALL_PREFIX}/version.txt
83-
\"${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}\"
84-
)
85-
")
8671
if (MYFRAME_INSTALL_DEPS)
87-
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.21")
88-
install(IMPORTED_RUNTIME_ARTIFACTS jsoncpp_lib)
89-
install(IMPORTED_RUNTIME_ARTIFACTS glog::glog)
90-
install(IMPORTED_RUNTIME_ARTIFACTS gflags)
91-
endif()
72+
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.21")
73+
install(IMPORTED_RUNTIME_ARTIFACTS jsoncpp_lib)
74+
install(IMPORTED_RUNTIME_ARTIFACTS glog::glog)
75+
install(IMPORTED_RUNTIME_ARTIFACTS gflags)
76+
else()
77+
message(WARNING "Can not install deps lib, cmake version ${CMAKE_VERSION} < 3.21")
78+
endif()
9279
endif()
9380

9481
### package
95-
include(InstallRequiredSystemLibraries)
96-
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
97-
set(CPACK_PACKAGE_VERSION_MAJOR "${${PROJECT_NAME}_VERSION_MAJOR}")
98-
set(CPACK_PACKAGE_VERSION_MINOR "${${PROJECT_NAME}_VERSION_MINOR}")
99-
set(CPACK_PACKAGE_VERSION_PATCH "${${PROJECT_NAME}_VERSION_PATCH}")
100-
include(CPack)
101-
102-
### export cmake file
103-
install(EXPORT "${PROJECT_NAME}Targets"
104-
FILE "${PROJECT_NAME}Targets.cmake"
105-
DESTINATION lib/cmake/${PROJECT_NAME}
106-
)
107-
108-
include(CMakePackageConfigHelpers)
109-
# generate the config file that is includes the exports
110-
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
111-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
112-
INSTALL_DESTINATION "lib/cmake/${PROJECT_NAME}"
113-
NO_SET_AND_CHECK_MACRO
114-
NO_CHECK_REQUIRED_COMPONENTS_MACRO
115-
)
116-
117-
# generate the version file for the config file
118-
write_basic_package_version_file(
119-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
120-
VERSION "${PROJECT_VERSION}"
121-
COMPATIBILITY SameMinorVersion
122-
)
123-
124-
# install the configuration file
125-
install(FILES
126-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
127-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
128-
DESTINATION lib/cmake/${PROJECT_NAME}
129-
)
130-
131-
# generate the export targets for the build tree
132-
# needs to be after the install(TARGETS ) command
133-
export(EXPORT "${PROJECT_NAME}Targets"
134-
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake"
135-
)
82+
include(Packing)

Config.cmake.in

-4
This file was deleted.

README.md

-5
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ worker自驱动,可以通过消息与actor交互;
2525
* [github ci windows](.github/workflows/windows.yml)
2626
* [github ci macOS](.github/workflows/macos.yml)
2727

28-
## 运行所有的example
29-
```sh
30-
path/to/myframe/bin/launcher -p app
31-
```
32-
3328
### Hello,World 示例
3429
```c
3530
#include <string.h>

cmake/InstallingConfigs.cmake

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# export cmake file
2+
install(EXPORT "${PROJECT_NAME}Targets"
3+
FILE "${PROJECT_NAME}Targets.cmake"
4+
DESTINATION lib/cmake/${PROJECT_NAME}
5+
)
6+
7+
include(CMakePackageConfigHelpers)
8+
# generate the config file that is includes the exports
9+
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
10+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
11+
INSTALL_DESTINATION "lib/cmake/${PROJECT_NAME}"
12+
NO_SET_AND_CHECK_MACRO
13+
NO_CHECK_REQUIRED_COMPONENTS_MACRO
14+
)
15+
16+
# generate the version file for the config file
17+
write_basic_package_version_file(
18+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
19+
VERSION "${PROJECT_VERSION}"
20+
COMPATIBILITY SameMinorVersion
21+
)
22+
23+
# install the configuration file
24+
install(FILES
25+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
26+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
27+
DESTINATION lib/cmake/${PROJECT_NAME}
28+
)
29+
30+
# generate the export targets for the build tree
31+
# needs to be after the install(TARGETS ) command
32+
export(EXPORT "${PROJECT_NAME}Targets"
33+
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake"
34+
)

cmake/Packing.cmake

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
include(InstallRequiredSystemLibraries)
2+
3+
set(CPACK_PACKAGE_NAME ${PROJECT_NAME} CACHE STRING "The resulting package name")
4+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "C++ application framework"
5+
CACHE STRING "Package description for the package metadata"
6+
)
7+
set(CPACK_STRIP_FILES YES)
8+
set(CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
9+
OWNER_READ OWNER_WRITE OWNER_EXECUTE
10+
GROUP_READ GROUP_EXECUTE
11+
WORLD_READ WORLD_EXECUTE
12+
)
13+
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
14+
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
15+
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
16+
set(CPACK_PACKAGE_CONTACT "[email protected]")
17+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
18+
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
19+
20+
# group
21+
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)
22+
23+
# deb
24+
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "likepeng <${CPACK_PACKAGE_CONTACT}>")
25+
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
26+
set(CPACK_DEB_COMPONENT_INSTALL YES)
27+
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES)
28+
29+
include(CPack)

doc/development_guide.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454

5555
### 创建组件工程
5656
```sh
57-
python3 path/to/myframe/tools/gen_mod_proj.py --dir="path/to/proj_dir/" --name="mod_name"
57+
python path/to/myframe/bin/gen_mod_proj.py --dir="path/to/proj_dir/" --name="mod_name"
5858
```
5959

6060
### 组件工程目录说明
@@ -66,7 +66,8 @@ python3 path/to/myframe/tools/gen_mod_proj.py --dir="path/to/proj_dir/" --name="
6666

6767
### 组件工程构建安装
6868
```sh
69-
cmake -S . -B build -DCMAKE_INSTALL_PREFIX="path/to/myframe" -DCMAKE_PREFIX_PATH="path/to/jsoncpp;path/to/glog"
69+
# 如果myframe库和依赖库安装到系统目录里,则不需要设置CMAKE_PREFIX_PATH变量
70+
cmake -S . -B build -DCMAKE_PREFIX_PATH="path/to/myframe;path/to/jsoncpp;path/to/glog"
7071
cmake --build build --config Release --target install
7172
```
7273

docker/README.md

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# myframe docker
2+
主要用于创建myframe docker容器镜像;
3+
包含编译好的myframe,可以运行example,benchmark和创建运行组件工程。
4+
5+
## 目录
6+
myframe安装目录:`/usr/local`
7+
8+
## docker操作
9+
```sh
10+
# eg:
11+
# arch: < aarch64 | amd64 >
12+
# myframe_version: 0.9.1
13+
14+
## 构建docker镜像
15+
bash docker_build.bash <myframe_version>
16+
17+
## 下载docker镜像
18+
docker pull docker.io/likepeng0418/myframe:<arch>-<myframe_version>
19+
20+
## 创建运行docker容器
21+
docker run -itd \
22+
--name "myframe_run" \
23+
myframe:${<arch>-<myframe_version>} \
24+
/bin/bash
25+
26+
## 进入docker容器
27+
docker exec -it \
28+
-it "myframe_run" \
29+
/bin/bash
30+
```
31+
32+
## 在docker中开发
33+
[开发手册](../doc/development_guide.md)

docker/dev.dockerfile

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
FROM docker.io/library/ubuntu:22.04
2+
SHELL ["/bin/bash", "-c"]
3+
4+
ENV DEBIAN_FRONTEND noninteractive
5+
ARG cpu_arch=unknown
6+
COPY docker/ubuntu2204_${cpu_arch}.sourcelist /etc/apt/sources.list
7+
# RUN yes | unminimize
8+
RUN apt update \
9+
&& apt install -y --no-install-recommends \
10+
build-essential cmake \
11+
wget python3 vim \
12+
libunwind-dev libgflags-dev
13+
14+
WORKDIR /tmp
15+
RUN wget -q --content-disposition --no-check-certificate \
16+
https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.9.5.tar.gz
17+
RUN tar -xf jsoncpp-1.9.5.tar.gz \
18+
&& cmake -S jsoncpp-1.9.5 -B build-jsoncpp \
19+
-DCMAKE_INSTALL_PREFIX=/usr/local \
20+
-DBUILD_OBJECT_LIBS=OFF \
21+
-DJSONCPP_WITH_TESTS=OFF \
22+
-DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF \
23+
-DJSONCPP_WITH_PKGCONFIG_SUPPORT=OFF \
24+
&& cmake --build build-jsoncpp --target install \
25+
&& rm -rf jsoncpp-1.9.5.tar.gz jsoncpp-1.9.5 build-jsoncpp
26+
27+
RUN wget -q --content-disposition --no-check-certificate \
28+
https://github.com/google/glog/archive/refs/tags/v0.6.0.tar.gz
29+
RUN tar -xf glog-0.6.0.tar.gz \
30+
&& cmake -S glog-0.6.0 -B build-glog \
31+
-DCMAKE_INSTALL_PREFIX=/usr/local \
32+
-DWITH_PKGCONFIG=OFF \
33+
-DWITH_GTEST=OFF \
34+
&& cmake --build build-glog --target install \
35+
&& rm -rf glog-0.6.0.tar.gz glog-0.6.0 build-glog
36+
37+
ARG myframe_version=latest
38+
RUN wget -q --content-disposition --no-check-certificate \
39+
https://github.com/lkpworkspace/myframe/archive/refs/tags/v${myframe_version}.tar.gz
40+
RUN tar -xf myframe-${myframe_version}.tar.gz
41+
RUN cmake -S myframe-${myframe_version} -B build-myframe \
42+
-DCMAKE_CXX_STANDARD=17 \
43+
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
44+
-DCMAKE_INSTALL_PREFIX=/usr/local \
45+
&& cmake --build build-myframe --target install \
46+
&& rm -rf myframe-${myframe_version}.tar.gz myframe-${myframe_version} build-myframe

docker/docker_build.bash

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/usr/bin/env bash
2+
readonly PWD0="$(dirname "$(readlink -fn "$0")")"
3+
readonly MYFRAME_ROOT="$(dirname ${PWD0})"
4+
5+
readonly IMAGE_NAME="myframe"
6+
7+
set -e
8+
9+
function main {
10+
cd "${PWD0}"
11+
12+
local -a cmd=()
13+
if command -v docker; then
14+
cmd+=("docker" "build")
15+
else
16+
echo "No docker existed!"
17+
exit 1
18+
fi
19+
20+
local arc="$(uname -m)"
21+
local cpu_arch="unknown"
22+
case "${arc}" in
23+
"aarch64" | "arm64")
24+
arc="aarch64"
25+
cpu_arch="arm"
26+
;;
27+
"x86_64" | "amd64")
28+
arc="amd64"
29+
cpu_arch="x86"
30+
;;
31+
*)
32+
echo "Unknown arch: ${arc}"
33+
exit 1
34+
;;
35+
esac
36+
37+
local tag="${arc}-$1"
38+
39+
"${cmd[@]}" \
40+
--build-arg myframe_version=$1 \
41+
--build-arg cpu_arch=${cpu_arch} \
42+
--ulimit nofile=102400:102400 \
43+
-f "dev.dockerfile" \
44+
-t "${IMAGE_NAME}:${tag}" \
45+
"${MYFRAME_ROOT}"
46+
}
47+
48+
if [ "$#" -ne 1 ]; then
49+
echo "Error: No arguments provided. Usage: $0 \"myframe_version\""
50+
exit 1
51+
fi
52+
53+
main "$@"

0 commit comments

Comments
 (0)