Commit a8e4360d by ZhongJianfu

first commit

parent 76a05f4c
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -3,6 +3,21 @@ cmake_minimum_required ( VERSION 3.10 ) ...@@ -3,6 +3,21 @@ cmake_minimum_required ( VERSION 3.10 )
# 配置可执行文件的名字 # 配置可执行文件的名字
project ( helloworld CXX C) project ( helloworld CXX C)
#判断是不是交叉编译环境
if($ENV{XPL_OBJECT_TYPE} STREQUAL ARM)
# 指定交叉编译的目标系统,此处为arm-linux-gnueabihf,依情形设置
SET(CMAKE_SYSTEM_NAME arm-linux-gnueabihf)
SET(TOOL_ADD "/home/lkt/Soft_packet/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux")
set(triple arm-linux-gnueabihf)
# 指定C编译器
set(CMAKE_C_COMPILER "${TOOL_ADD}/bin/arm-linux-gnueabihf-gcc")
set(CMAKE_C_COMPILER_TARGET ${triple})
# 指定C++编译器
set(CMAKE_CXX_COMPILER "${TOOL_ADD}/bin/arm-linux-gnueabihf-g++")
set(CMAKE_CXX_COMPILER_TARGET ${triple})
endif( )
#reset output path 设置编译输出文件的路径 ${CMAKE_BINARY_DIR}=执行cmake 指令的路径 #reset output path 设置编译输出文件的路径 ${CMAKE_BINARY_DIR}=执行cmake 指令的路径
set ( EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin ) set ( EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin )
...@@ -13,7 +28,7 @@ set ( CMAKE_SHARED_LIBRARY_LINK_C_FLAGS ) ...@@ -13,7 +28,7 @@ set ( CMAKE_SHARED_LIBRARY_LINK_C_FLAGS )
set (CMAKE_FEATURE_PATH $ENV{XPL_FEATURE_DIR}) set (CMAKE_FEATURE_PATH $ENV{XPL_FEATURE_DIR})
set (CMAKE_THIRDPARTY_PATH $ENV{XPL_THIRDPARTY_DIR}) set (CMAKE_THIRDPARTY_PATH $ENV{XPL_THIRDPARTY_DIR})
# 想到 # 相当与cout的效果
message(STATUS "CMake Info") message(STATUS "CMake Info")
message(STATUS "=======================================================") message(STATUS "=======================================================")
message(STATUS " Operation System : ${CMAKE_SYSTEM}") message(STATUS " Operation System : ${CMAKE_SYSTEM}")
...@@ -69,12 +84,12 @@ if(CMAKE_BUILD_TYPE STREQUAL Debug) ...@@ -69,12 +84,12 @@ if(CMAKE_BUILD_TYPE STREQUAL Debug)
endif() endif()
#添加静态库 静态库的路径 # #添加静态库 静态库的路径
add_library ( libtest1 STATIC IMPORTED ) # add_library ( libtest1 STATIC IMPORTED )
set_property (TARGET libtest1 PROPERTY IMPORTED_LOCATION ${CMAKE_THIRDPARTY_PATH}/test1/libtest1.a) # set_property (TARGET libtest1 PROPERTY IMPORTED_LOCATION ${CMAKE_THIRDPARTY_PATH}/test1/libtest1.a)
add_library ( libtest2 STATIC IMPORTED ) # add_library ( libtest2 STATIC IMPORTED )
set_property (TARGET libtest2 PROPERTY IMPORTED_LOCATION ${CMAKE_THIRDPARTY_PATH}/test2/libtest2.a) # set_property (TARGET libtest2 PROPERTY IMPORTED_LOCATION ${CMAKE_THIRDPARTY_PATH}/test2/libtest2.a)
MESSAGE( STATUS "There are source files : ${DIR_USR_SOURCE}.") MESSAGE( STATUS "There are source files : ${DIR_USR_SOURCE}.")
...@@ -82,7 +97,7 @@ MESSAGE( STATUS "There are source files : ${DIR_USR_SOURCE}.") ...@@ -82,7 +97,7 @@ MESSAGE( STATUS "There are source files : ${DIR_USR_SOURCE}.")
#generate target 生成可执行文件 #generate target 生成可执行文件
add_executable ( ${CMAKE_PROJECT_NAME} ${DIR_USR_SOURCE} ) add_executable ( ${CMAKE_PROJECT_NAME} ${DIR_USR_SOURCE} )
# 给可执行文件连接静态库 # 给可执行文件连接静态库
target_link_libraries ( ${CMAKE_PROJECT_NAME} pthread libtest1 libtest2) target_link_libraries ( ${CMAKE_PROJECT_NAME})
#add custom #add custom
add_custom_target ( clean-all COMMAND rm -rf {CMAKE_BINARY_DIR}/* ) add_custom_target ( clean-all COMMAND rm -rf {CMAKE_BINARY_DIR}/* )
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
## helloworld 修改了cmakelist ,使其适配了交叉编译。学习若格网关的记录
当前工程git clong : ## 1.安装配置交叉编译工具
``` ```
http://git.linkortech.com:10020/NO.14/HelloWorld 1.下载指定的交叉工具链。
``` https://pan.baidu.com/s/1a8FAd4AqiFsFfqxY7XmZNw
**简单说明**
```
一个基本的基于shell脚本与README实现的在linux下运行的helloworld工程C语言工程
```
## 工程结构说明
OPC UA + MQTT 的通用数据采集框架研究
### 1、文件说明
a) build_project.sh 整体构建脚本,用法如下
i. ./build_project.sh //默认编译
ii. ./build_project.sh clean // 清除工程
iii. ./build_project.sh build Debug //编译(增量/全量自动 暂时没有)
b) cleartmp.py 清除所有Build目录下的内容
c) CMakeLists.txt 构建可执行应用的cmake文件
d) env_linux_arm.sh 用于设置交叉编译环境 2.我这里是解压到/home/lkt/Soft_packet/目录下,配置环境变量 这个是临时的配置,重启端口就无效了。
export PATH=/home/lkt/Soft_packet/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin:$PATH
e) env_linux.sh 用于设置本地编译环境 3.因为我们的系统是64位的,而交叉工具是32位的,需要安装以下
apt-get install aptitude //这个先不试
apt-get install lib32z1
apt-get install lib32ncurses5
apt-get install lib32stdc++6
g) git_push.sh 用于上传代码到gitlab的远程厂库 4.然后执行
lkt@lkt-VirtualBox:~/gitlab/HelloWorld_ARM$ arm-linux-gnueabihf-gcc -v
5.可以查看到版本,表示工具链正常了。
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/home/lkt/Soft_packet/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/../libexec/gcc/arm-linux-gnueabihf/4.9.2/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: /cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/src/gcc-linaro-4.9-2014.09/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-linux-gnueabihf --prefix=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install --with-sysroot=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fortran --disable-multilib --enable-multiarch --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3-d16 --with-float=hard --with-pkgversion='crosstool-NG linaro-1.13.1-4.9-2014.09 - Linaro GCC 4.9-2014.09' --with-bugurl=https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --with-gmp=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpc=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-isl=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-libelf=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-plugin --enable-gold --with-local-prefix=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long --with-mode=thumb --disable-multilib --with-float=hard
Thread model: posix
gcc version 4.9.2 20140904 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.09 - Linaro GCC 4.9-2014.09)
lkt@lkt-VirtualBox:~/gitlab/HelloWorld_ARM$ arm-linux-gnueabihf-gcc main.cpp -0 -n
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘-0’
### 2、目录说明
- ​ doc: 存放开发文档,包括研究,特性,学习记录等,可供大家学习
- ​ zjf:存放建福的个人的测试工程
- ​ xxx:其他开发人员也在当前目录下传教自己的名字缩写的目录,然后上传自己的测试工程
### 3、使用说明
通过系统环境变量来设置CMake中使用的一些变量,例如工程中的:
a) env_linux.sh 本机编译使用,用法如下:
```
source env_linux.sh
```
b) env_linux_arm.sh 交叉编译使用
``` 6.编译一个cpp
source env_linux_arm.sh lkt@lkt-VirtualBox:~/gitlab/HelloWorld_ARM$ arm-linux-gnueabihf-gcc 111.cpp -o eeee
lkt@lkt-VirtualBox:~/gitlab/HelloWorld_ARM$ ./eeee
bash: ./eeee:无法执行二进制文件: 可执行文件格式错误
因为是32位的程序,64位的虚拟机无法运行。到此验证交叉编译工具完成。
``` ```
**##特别注意##** ## 2.cmake+交叉编译
``` ```
切换嵌入式环境变量后,需要执行./build_xdatacollecter.sh clean 再编译。每次都要编译前都要 #判断是不是交叉编译环境
造成问题的原因还不知道。目前按照这个方式就可以正常的进行交叉编译 if($ENV{XPL_OBJECT_TYPE} STREQUAL ARM)
``` # 指定交叉编译的目标系统,此处为arm-linux-gnueabihf,依情形设置
SET(CMAKE_SYSTEM_NAME arm-linux-gnueabihf)
SET(TOOL_ADD "/home/lkt/Soft_packet/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux")
set(triple arm-linux-gnueabihf)
# 指定C编译器
set(CMAKE_C_COMPILER "${TOOL_ADD}/bin/arm-linux-gnueabihf-gcc")
set(CMAKE_C_COMPILER_TARGET ${triple})
打开相关的文件即可了解环境变量的设置 # 指定C++编译器
set(CMAKE_CXX_COMPILER "${TOOL_ADD}/bin/arm-linux-gnueabihf-g++")
set(CMAKE_CXX_COMPILER_TARGET ${triple})
endif( )
交叉编译中有个很重要的参数 --sysroot 指定的库路径,基本就是glibc
我的虚拟机是这个路径,交叉编译的一些第三方的库全部都放到这目录下. 区别在于 XPL_OBJECT_TYPE是否被设置为了ARM
export PATH=/home/lkt/Soft_packet/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin:$PATH
``` 执行source arm_env_linux.sh
/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/lib 就可以了
``` ```
首先配置环境变量
```
source env_linux.sh
```
执行编译 arm_env_linux.sh
``` ```
编译并且正常运行 export XPL_OBJECT_TYPE="ARM"
./build_project.sh export XPL_PROJECT_DIR=$(pwd)
运行脚本 参数1 export XPL_FEATURE_DIR=$XPL_PROJECT_DIR/feature
``` export XPL_PROTOCOL_DIR=$XPL_PROJECT_DIR/protocol
export XPL_THIRDPARTY_DIR=$XPL_PROJECT_DIR/thirdparty
``` export CCACHE_PATH=/usr/bin:$CCACHE_PATH
清除所有编译文件 export CC="gcc"
./build_project.sh clean export AR="gcc-ar"
运行脚本 参数1 export CXX="g++"
``` export CPP="gcc"
export AS="as"
export GDB=gdb
export STRIP=strip
export RANLIB=ranlib
export OBJCOPY=objcopy
export OBJDUMP=objdump
export PATH=/home/lkt/Soft_packet/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin:$PATH
# . /opt/fsl-qoriq/2.0/environment-setup-aarch64-fsl-linux
## 文件说明
#### 脚本文件
##### 使用方法
```Shell
清空Build目录下的编译文件
sh build_hello_test.sh clean
在Build目录下生成编译文件
sh build_hello_test.sh
最终生成的目标文件都放在Build/bin目录下
``` ```
##### 使用注意事项
![1598182508009](README.assets/1598182508009.png)
![1598182520103](README.assets/1598182520103.png)
如果构建新的README工程,需要注意这几处的路径。
##### 脚本源码
```Shell
#!/bin/bash
echo "=======================Bulid HELLOWORD Test================="
#检查当前目录下是否有生成用于存放编译文件的Bulid文件夹,如果已经有了就跳过
check_build_dir=`ls -l |grep "Build"`
echo $check_build_dir
if [[ $check_build_dir =~ "Build" ]]
then
echo "Has Bulid Directroy!"
else
echo "Create Build Directory!"
mkdir Build
fi
#检查hello目录下是否有Build文件夹,如果没有则生成一个
check_liblorastack_dir=`ls -l ./hello/ |grep "Build"`
echo $check_liblorastack_dir
if [[ $check_liblorastack_dir =~ "Build" ]]
then
echo "Has lorastack build Directory"
else
echo "Create lorastack Build Directory"
mkdir ./hello/Build
fi
#把输入的参数打印出来 脚本的参数是在脚本名后用空格区分的 sh build_hello_test.sh 1 Debug
echo "$1"
echo "$2"
echo "$3"
#在./hello/Build执行README这样就回把全部编译的文件都放到了该目录下
cd ./hello/Build
README -D README_BUILD_TYPE=$2 ..
if [[ "$1" =~ "clean" ]]
then
make clean-all
else
echo "====================================....Build helloword start....====================================="
make
echo "====================================....Build helloword end....======================================="
fi
#README顶层READMELists的文件
cd ~/zjf_lib_study/arm-test3/Build/
README -D README_BUILD_TYPE=$2 ..
if [[ "$1" =~ "clean" ]]
then
make clean-all
#rm -rf ./*
#clear swp
#cd ~/linux-test3/
#范工这里还有一些额外操作目前我用不到
#clear html
#check_dox_html=`ls -l ./doc/ |grep "html"`
#echo $check_dox_html
#if [[ $check_dox_html =~ "html" ]]
#then
# rm -rf ./doc/html
else
#fi
#python version
#python -V
#rtn="$?"
#if [[ $rtn == "0" ]]
#then
# echo "python"
# python cleartmp.py
#else
# echo "python3"
# python3 cleartmp.py
#fi
#echo $check_python_ver
echo "====================================....clean Success....========================================="
else
echo "====================================....Build start....==============================================="
make
echo "generate stacktest at ./Build/bin/"
echo "====================================....Build Success....========================================="
fi
echo "press anykey to exit"
read input
```
#### 顶层READMELists文件说明
##### 使用注意事项
配置源码文件路径
![1598183889283](README.assets/1598183889283.png)
配置编译链
![1598182945506](README.assets/1598182945506.png)
配置链接库(动态和静态)
![1598184171936](README.assets/1598184171936.png)
最终可执行文件
![1598184208063](README.assets/1598184208063.png)
##### READMEList文件源码
```cmake
#README version 说明README的版本
README_minimum_required ( VERSION 2.8 )
#最终生成可执行文件的名字
project ( project_hello )
#The name of the operating system for which README is to build.
SET(README_SYSTEM_NAME Linux)
#设置输出文件的存放位置 README_BINARY_DIR是README语句执行当前路径 这里我们是在脚本中执行的目录是对应的Build文件夹
set ( EXECUTABLE_OUTPUT_PATH ${README_BINARY_DIR}/bin )
set ( LIBRARY_OUTPUT_PATH ${README_BINARY_DIR}/bin )
#这个不太知道
set ( README_SHARED_LIBRARY_LINK_C_FLAGS )
#set include file 头文件路径说明
include_directories (./hello/inc)
#set source file 源文件路径说明 空即当前目录 DIR_USR_SOURCE是对当前目录取的别名
aux_source_directory ( . DIR_USR_SOURCE )
#set CC AR LD AS
#set arm compiler 设定编译的工具链
set ( README_C_COMPILER "arm-poky-linux-gnueabi-gcc" )
#set linux compiler
#set ( README_C_COMPILER "gcc" )
set ( README_C_AR "gcc-ar" )
#CFLAGS 设定语言
set ( README_C_FLAGS "-g -std=c++11 -pthread" )
#set debug 这里的README_BUILD_TYPE在脚本中有赋值的
if(README_BUILD_TYPE STREQUAL Debug)
add_definitions (
-DPRINT_DEBUG_INFO
-DLORA_SOCKET_SIM
)
endif()
#load extern library 把libhelloword.so变成链接 helloword
#添加动态库
add_library ( helloword SHARED IMPORTED )
#动态库的路径
set_property (TARGET helloword PROPERTY IMPORTED_LOCATION ${README_SOURCE_DIR}/hello/Build/lib/libhelloword.so)
#添加静态库
#add_library ( helloword STATIC IMPORTED )
#静态库的路径
#set_property (TARGET helloword PROPERTY IMPORTED_LOCATION ${README_SOURCE_DIR}/hello/Build/lib/libhelloword.a)
#generate target
add_executable ( ${README_PROJECT_NAME} ${DIR_USR_SOURCE} )
#根据前面生成的链接helloword,导入库到最后编译的文件中
#.so动态库链接方式
target_link_libraries ( ${README_PROJECT_NAME} PRIVATE helloword pthread)
#.a静态库链接方式
#target_link_libraries ( ${README_PROJECT_NAME} helloword pthread)
#add custom
add_custom_target ( clean-all COMMAND rm -rf {README_BINARY_DIR}/* )
```
#### 驱动层面的READMELists文件
##### 使用注意事项
配置源码路径
![1598184963852](README.assets/1598184963852.png)
配置编译链
![1598182945506](README.assets/1598182945506.png)
配置生成那种库(动态或静态)
![1598185040852](README.assets/1598185040852.png)
##### READMEList文件源码
```cmake
#set version
README_minimum_required ( VERSION 2.8 )
#project
project ( hellowordlib )
#The name of the operating system for which README is to build.
SET(README_SYSTEM_NAME Linux)
#设置输出文件的存放位置 README_BINARY_DIR是README语句执行当前路径 这里我们是在脚本中执行的目录是对应的Build文件夹
set ( EXECUTABLE_OUTPUT_PATH ${README_BINARY_DIR}/bin )
set ( LIBRARY_OUTPUT_PATH ${README_BINARY_DIR}/lib )
#set include
include_directories ( ./inc )
#set source file
aux_source_directory ( ./src DIR_HELLOWROD_SRC )
#set CC AR
set (README_C_COMPILER "arm-poky-linux-gnueabi-gcc")
#set linux compiler
#set ( README_C_COMPILER "gcc" )
set (README_C_AR "gcc-ar")
#set cflags //zjf:what?
set (README_C_FLAGS "-g -std=c++11 -pthread")
if(README_BUILD_TYPE STREQUAL Debug)
add_definitions(
-DPRINT_DEBUG_INFO
-DLORA_SOCKET_SIM
)
endif()
#generate target 最后生成了libhelloword.a
#creat .so 生成动态库
add_library ( helloword SHARED ${DIR_HELLOWROD_SRC} )
#creat .a 生成静态库
#add_library ( helloword ${DIR_HELLOWROD_SRC} )
#add custom
add_custom_target ( clean-all COMMAND rm -rf ${README_BINARY_DIR}/* )
```
### Astyle linux下整理代码格式
##### 使用方法,
```shell
#执行该脚本,就会将但其目录下,及次级目录下的.C .H文件安装既定的规则整理好格式
sh astyle.sh
a
```
##### astyle.sh
```shell
#!/bin/bash
for f in $(find . -name '*.c' -or -name '*.cpp' -or -name '*.h' -type f)
do
astyle --style=ansi -s4 -S -p -D -m0 -M40 --convert-tabs --suffix=.pre $f
done
# after formate the code,we need to rm '*.orig' files
for f in $(find . -name '*.orig' -type f)
do
rm $f
done
```
##### 安装教程
https://blog.csdn.net/shawhe/article/details/13770643
\ No newline at end of file
export XPL_OBJECT_TYPE="LINUX-X86" export XPL_OBJECT_TYPE="ARM"
export XPL_PROJECT_DIR=$(pwd) export XPL_PROJECT_DIR=$(pwd)
export XPL_FEATURE_DIR=$XPL_PROJECT_DIR/feature export XPL_FEATURE_DIR=$XPL_PROJECT_DIR/feature
export XPL_PROTOCOL_DIR=$XPL_PROJECT_DIR/protocol export XPL_PROTOCOL_DIR=$XPL_PROJECT_DIR/protocol
export XPL_THIRDPARTY_DIR=$XPL_PROJECT_DIR/thirdparty
export CCACHE_PATH=/usr/bin:$CCACHE_PATH export CCACHE_PATH=/usr/bin:$CCACHE_PATH
export CC="gcc" export CC="gcc"
export AR="gcc-ar" export AR="gcc-ar"
...@@ -13,6 +14,8 @@ export STRIP=strip ...@@ -13,6 +14,8 @@ export STRIP=strip
export RANLIB=ranlib export RANLIB=ranlib
export OBJCOPY=objcopy export OBJCOPY=objcopy
export OBJDUMP=objdump export OBJDUMP=objdump
. /opt/fsl-qoriq/2.0/environment-setup-aarch64-fsl-linux export PATH=/home/lkt/Soft_packet/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin:$PATH
# . /opt/fsl-qoriq/2.0/environment-setup-aarch64-fsl-linux
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
#include <stdio.h>
#include "my_easylogging.h"
// #define HDDD
int main()
{
log_test(); //日志自测函数 里面可以看细节的用法
LOG(INFO) << "》》》》》》》》》》打印测试11111《《《《《《《《";
printf("Hello world\n\r");
return 0;
}
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment