理想星环OS开源项目VBSPro编译部署

1.代码下载

sudo apt install curl -y
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
sudo mv repo /usr/bin
sudo vim /usr/bin/repo

在125行,修改为以下内容。然后保存文件。

REPO_URL = "https://mirrors.tuna.tsinghua.edu.cn/git/git-repo"

配置Git,需要按照自己的账号进行配置。

cd ~/work
mkdir vbsprospace
cd vbsprospace
repo init -u git@gitee.com:haloos/manifests.git -b master -m vbs.xml
repo sync
repo start local --all

2.安装依赖

2.1安装库依赖

sudo apt install libssl-dev
sudo apt install libssl1.1

//安装cmake
sudo apt  install cmake

//安装ninja
sudo apt install ninja-build

//安装JAVA
sudo apt install openjdk-11-jdk
sudo vim /etc/profile
最下面添加以下两行,具体的JAVA_HOME按照自己安装的路径进行修改
export JAVA_HOME="/usr/lib/jvm/java-1.11.0-openjdk-amd64/"
export PATH=$JAVA_HOME/bin:$PATH
保存以后
source /etc/profile

2.2安装工具依赖

修改 ~/work/vbsprospace/vbs/vbspro/tools/idlgen/gradlew中86行

REMOTE_URL="https\\://mirrors.aliyun.com/gradle/distributions/v7.2.0/gradle-7.2-bin.zip"

替换~/work/vbsprospace/vbs/vbspro/tools/idlgen/thirdparty/idl-parser/build.gradle


// internal plugins
apply plugin: 'java-library'
apply plugin: 'maven-publish'
apply plugin: 'eclipse' // Eclipse integration
apply plugin: 'antlr'

description = """"""

ext {
    publishURL = project.hasProperty('publishURL') ? project.publishURL.toString() : ''
    publishUsername = project.hasProperty('publishUsername') ? project.publishUsername.toString() : ''
    publishPassword = project.hasProperty('publishPassword') ? project.publishPassword.toString() : ''
}

repositories {
    //mavenCentral()
    // maven {
    //     url 'https://artifactory.ep.chehejia.com/artifactory/jcenter/'
    //     credentials {
    //         username = "$artifactory_user"
    //         password = "$artifactory_password"
    //     }
    // }
    maven {
        url 'https://maven.aliyun.com/repository/jcenter'
    }

    // maven {
    //     url 'https://artifactory.ep.chehejia.com/artifactory/google/dl/android/maven2/'
    //     credentials {
    //         username = "$artifactory_user"
    //         password = "$artifactory_password"
    //     }
    // }
    maven {
        url 'https://repo.maven.apache.org/maven2'
    }

    // maven {
    //     url 'https://artifactory.ep.chehejia.com/artifactory/maven'
    //     credentials {
    //         username = "$artifactory_user"
    //         password = "$artifactory_password"
    //     }
    // }
}

dependencies {
    antlr('org.antlr:antlr4:4.5') {
        exclude group: 'org.antlr', module:'antlr-runtime'
        exclude group: 'org.antlr', module:'ST4'
    }
    implementation group: 'org.antlr', name: 'stringtemplate', version:'3.2'
    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter', version: '5.8.1'
    implementation 'org.apache.commons:commons-jexl3:3.1'
}

generateGrammarSource {
    arguments += ["-long-messages", "-package", "com.eprosima.idl.parser.grammar"]
}

compileJava {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    options.compilerArgs.add('-Xlint:deprecation')
    options.compilerArgs.add('-Xlint:unchecked')
}

// add the generated source files to the list of java sources

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
            srcDir 'src/it/java' //integration tests
        }
    }
}

group = "com.eprosima"
version = "1.4.0"

//general properties
jar {
    duplicatesStrategy 'exclude'
    from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
    archiveBaseName = 'idlparser'
    manifest {
        attributes("Created-By": "eProsima", "Main-Class": "com.eprosima.idl.test.TestIDLParser")
    }
}

task sourceJar(type: Jar, dependsOn: classes) {
   classifier = 'sources'
   from sourceSets.main.allJava
}

/**
 * Set up publishing. User must set the following properties
 * in ~/.gradle/gradle.properties or pass via -Pproperty=value
 * on command line.
 *
 * publishUsername=yourusername
 * publishPassword=yourpassword
 * publishUrl=https://some.url/maven/orgname/reponame/projectname
 */
publishing {
   publications {
      mavenJava(MavenPublication) {
         artifactId = "idl-parser"
         from components.java

         artifact sourceJar {
            classifier 'sources'
         }
      }
   }
   repositories {
    maven {
        url publishURL
        credentials.username = publishUsername
        credentials.password = publishPassword
    }
   }
}

buildscript {
    // ...其他配置...
    repositories {
        // maven {
        //     url 'https://artifactory.ep.chehejia.com/artifactory/jcenter/'
        //     credentials {
        //         username = "${artifactory_user}"
        //         password = "${artifactory_password}"
        //     }
        // }
        // ...其他可能的仓库...
    }
    // ...其他配置...
}

repositories {
    // maven {
    //     url 'https://artifactory.ep.chehejia.com/artifactory/maven'
    //     credentials {
    //         username = "${artifactory_user}"
    //         password = "${artifactory_password}"
    //     }
    // }
}

dependencies {
    // 使用公司内部仓库的依赖方式
    antlr('org.antlr:antlr4:4.5') {
        exclude group: 'org.antlr', module: 'antlr-runtime'
        exclude group: 'org.antlr', module: 'ST4'
    }
    // ...其他依赖项...
}

test {
    useJUnitPlatform()
}

// ...其他配置...

3.工具编译

cd tools/idlgen
cp thirdparty/idl-parser/gradle/wrapper/gradle-wrapper.properties gradle/wrapper/
export IDLGEN_OUTPUT_PATH=share/idlgen/java
./gradlew assemble

4.修改CMAKE

修改~/work/vbsprospace/vbs/vbspro/build/CMakeLists.txt

# Copyright (c) 2025 Li Auto Inc. and its affiliates
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

cmake_minimum_required(VERSION 3.16)
project(livbs)

# 清空CMAKE_CXX_FLAGS
set(CMAKE_CXX_FLAGS "")
set(CMAKE_C_FLAGS "")
set(UNIFIED_INCLUDE_DIRS_PRIVATE "")
set(UNIFIED_LINK_LIBS "")
set(UNIFIED_DEFINES "")
set(UNIFIED_DEFINES_PRIVATE "")
set(UNIFIED_SOURCES "")
set(CMAKE_INSTALL_MESSAGE NEVER)

# 添加统一库编译选项
option(BUILD_UNIFIED_LIB "Build unified library (livbs) instead of multiple libraries" ON)
message(STATUS "BUILD_UNIFIED_LIB is set to: ${BUILD_UNIFIED_LIB}")

# Using ccache by default
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
    set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
    set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif(CCACHE_FOUND)

set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES "")

# 设置依赖库路径
set(ECDR_INCLUDE_PATH ${CMAKE_BINARY_DIR}/thirdparty/ECDR/include)
set(ECDR_LIB_PATH ${CMAKE_INSTALL_PREFIX}/lib)
set(THIRDPARTY_PATH ${CMAKE_SOURCE_DIR}/thirdparty)
set(UTILS_PATH ${CMAKE_SOURCE_DIR}/utils)

set(ENABLE_TRACER OFF)
set(CONAN_INSTALL ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)

if(CMAKE_BUILD_TYPE STREQUAL "Release")
    set(CMAKE_CXX_FLAGS_RELEASE "-O3")
    set(CMAKE_C_FLAGS_RELEASE "-O3")
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(CMAKE_CXX_FLAGS_DEBUG "-g -O3")
    set(CMAKE_C_FLAGS_DEBUG "-g -O3")
endif()

if(CMAKE_BUILD_TYPE STREQUAL "Release")
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fPIC -Wall -Wno-reorder")
    set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fPIC -Wall -Wno-reorder")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--strip-all -z nonexecstack -z relro -z now")
    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--strip-all -z nonexecstack -z relro -z now")
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fPIC -Wall -Wno-reorder")
    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fPIC -Wall -Wno-reorder")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z nonexecstack -z relro -z now")
    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -z nonexecstack -z relro -z now")
endif()

# 设置全局变量,用于收集所有源文件和包含路径
set(UNIFIED_SOURCES "" CACHE INTERNAL "Unified sources for all libraries")
set(UNIFIED_INCLUDE_DIRS "" CACHE INTERNAL "Unified include directories for all libraries")
set(UNIFIED_LINK_LIBS "" CACHE INTERNAL "Unified link libraries for all libraries")
set(UNIFIED_DEFINES "" CACHE INTERNAL "Unified defines for all libraries")
set(UNIFIED_DEFINES_PRIVATE "" CACHE INTERNAL "Unified defines for all libraries")

###############################################################################
# Options
###############################################################################
option(BUILD_SHARED_LIBS "Create shared libraries by default" ON)
option(SECURITY "Activate security" OFF)
option(SECURITY "Activate security" OFF)
option(BUILD_DSF "Activate liddsdsf" OFF)
option(EXAMPLE ON)

set(TLS_FOUND 0)
if(SECURITY OR TLS_FOUND)
    find_package(OpenSSL REQUIRED)
    set(HAVE_SECURITY 1)
    if(NOT CONAN_BUILD)
        option(VBSAUTH "Activate VBSAuth" ON)
    endif()
    set(LINK_SSL 1)
else()
    find_package(OpenSSL)
    set(HAVE_SECURITY 0)
    set(LINK_SSL 0)
endif()

option(SQLITE3_SUPPORT "Activate SQLITE3 support" ON)
set(SQLITE3_SUPPORT ON)
if(SQLITE3_SUPPORT)
    message(STATUS "SQLite3 support is enabled.")
    set(HAVE_SQLITE3 1)
    enable_language(C)
else()
    message(STATUS "SQLite3 support is disabled.")
    set(HAVE_SQLITE3 0)
endif()

option(COMPILE_COVB "Test coverage option" OFF)
message("COMPILE_COVB Value is: ${COMPILE_COVB}")

if(COMPILE_COVB)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage")
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage")
endif()

# Option to enable strict real-time. In this case, several API functions have a real-time behaviour.
# * Publisher::write() - Uses ReliabilityQosPolicy.max_blocking_time
# * Subscriber::takeNextData() - Uses ReliabilityQosPolicy.max_blocking_time
# * Subscriber::readNextData() - Uses ReliabilityQosPolicy.max_blocking_time
option(STRICT_REALTIME "Enable a strict real-time behavour." OFF)
if(STRICT_REALTIME)
    set(HAVE_STRICT_REALTIME 1)
else()
    set(HAVE_STRICT_REALTIME 0)
endif()

# 添加缓存变量控制是否重新下载依赖
option(FORCE_DOWNLOAD_DEPENDENCIES "Force download dependencies even if they exist" ON)

list(APPEND UNIFIED_INCLUDE_DIRS
    ${CMAKE_BINARY_DIR}
    ${CMAKE_BINARY_DIR}/evbs/include
    ${CMAKE_BINARY_DIR}/rpc/include
    ${CMAKE_BINARY_DIR}/erpc/include
    ${CMAKE_BINARY_DIR}/framework/vui/include
    ${CMAKE_BINARY_DIR}/dsf/include
    ${CMAKE_BINARY_DIR}/utils/include
)

list(APPEND UNIFIED_INCLUDE_DIRS
    ${PROJECT_SOURCE_DIR}/rpc/include
)

# 添加Asio依赖
include(FetchContent)

# 设置Asio依赖下载和构建路径
set(ASIO_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty_other/asio/src")
set(ASIO_BINARY_DIR "${CMAKE_BINARY_DIR}/thirdparty_other/asio/build")

if(NOT EXISTS "${ASIO_SOURCE_DIR}" OR NOT EXISTS "${ASIO_BINARY_DIR}" OR FORCE_DOWNLOAD_DEPENDENCIES)
    FetchContent_Declare(
        asio
        GIT_REPOSITORY https://gitee.com/zhoupeize/asio.git
        GIT_TAG asio-1-29-0
        SOURCE_DIR ${ASIO_SOURCE_DIR}
        BINARY_DIR ${ASIO_BINARY_DIR}
    )
    message(STATUS "正在下载Asio依赖(可能需要几分钟,请耐心等待)...")
    FetchContent_MakeAvailable(asio)
endif()

# 添加Asio的包含路径
list(APPEND UNIFIED_INCLUDE_DIRS
    ${ASIO_SOURCE_DIR}/asio/include
)

# 添加foonathan_memory依赖
# 设置依赖下载和构建路径
set(FOONATHAN_MEMORY_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty_other/foonathan_memory/src")
set(FOONATHAN_MEMORY_BINARY_DIR "${CMAKE_BINARY_DIR}/thirdparty_other/foonathan_memory/build")

if(NOT EXISTS "${FOONATHAN_MEMORY_SOURCE_DIR}" OR NOT EXISTS "${FOONATHAN_MEMORY_BINARY_DIR}" OR FORCE_DOWNLOAD_DEPENDENCIES)
    FetchContent_Declare(
        foonathan_memory
        GIT_REPOSITORY https://gitee.com/zhoupeize/memory.git
        GIT_TAG v0.7-1
        SOURCE_DIR ${FOONATHAN_MEMORY_SOURCE_DIR}
        BINARY_DIR ${FOONATHAN_MEMORY_BINARY_DIR}
    )
    message(STATUS "正在下载foonathan_memory依赖(可能需要几分钟,请耐心等待)...")
    FetchContent_MakeAvailable(foonathan_memory)
endif()

# 添加foonathan_memory的包含路径
list(APPEND UNIFIED_INCLUDE_DIRS
    ${FOONATHAN_MEMORY_SOURCE_DIR}/include
    ${FOONATHAN_MEMORY_BINARY_DIR}/src
)

# 添加TinyXML2依赖
set(TINYXML2_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty_other/tinyxml2/src")
set(TINYXML2_BINARY_DIR "${CMAKE_BINARY_DIR}/thirdparty_other/tinyxml2/build")

if(NOT EXISTS "${TINYXML2_SOURCE_DIR}" OR NOT EXISTS "${TINYXML2_BINARY_DIR}" OR FORCE_DOWNLOAD_DEPENDENCIES)
    FetchContent_Declare(
        tinyxml2
        GIT_REPOSITORY https://gitee.com/zhoupeize/tinyxml2.git
        GIT_TAG 10.0.0
        SOURCE_DIR ${TINYXML2_SOURCE_DIR}
        BINARY_DIR ${TINYXML2_BINARY_DIR}
    )
    message(STATUS "正在下载TinyXML2依赖(可能需要几分钟,请耐心等待)...")
    FetchContent_MakeAvailable(tinyxml2)
endif()

# 添加TinyXML2的包含路径
list(APPEND UNIFIED_INCLUDE_DIRS
    ${TINYXML2_SOURCE_DIR}
)

# 设置TinyXML2的库路径
set(TINYXML2_LIBRARY tinyxml2)
set(TINYXML2_INCLUDE_DIR ${TINYXML2_SOURCE_DIR})

# 添加C++17标准到UNIFIED_DEFINES
set(UNIFIED_DEFINES "${UNIFIED_DEFINES}" CACHE INTERNAL "Unified defines for all libraries" FORCE)
set(UNIFIED_DEFINES_PRIVATE "${UNIFIED_DEFINES_PRIVATE}" CACHE INTERNAL "Unified defines for all libraries" FORCE)
set(UNIFIED_SOURCES "${UNIFIED_SOURCES}" CACHE INTERNAL "Unified sources for all libraries" FORCE)
set(UNIFIED_INCLUDE_DIRS "${UNIFIED_INCLUDE_DIRS}" CACHE INTERNAL "Unified include directories for all libraries" FORCE)
set(UNIFIED_INCLUDE_DIRS_PRIVATE "${UNIFIED_INCLUDE_DIRS_PRIVATE}" CACHE INTERNAL "Unified include directories for all libraries" FORCE)
set(UNIFIED_LINK_LIBS "${UNIFIED_LINK_LIBS}" CACHE INTERNAL "Unified link libraries for all libraries" FORCE)

# 在统一库模式下,子目录只收集源文件和配置信息
add_subdirectory(utils)
add_subdirectory(thirdparty)
add_subdirectory(evbs)
add_subdirectory(rpc)
add_subdirectory(dsf)
add_subdirectory(framework)
add_subdirectory(tools/daemon)
if(VBSAUTH)
    add_subdirectory(vbsauth)
endif()
# Test Cases
add_subdirectory(examples)

add_definitions(${UNIFIED_DEFINES})

# 创建统一库 NDK保持动态库
if (NOT BUILD_SHARED_LIBS)
    add_library(livbs STATIC ${UNIFIED_SOURCES})
else()
    add_library(livbs SHARED ${UNIFIED_SOURCES})
endif()

# 设置包含目录
target_include_directories(livbs PUBLIC ${UNIFIED_INCLUDE_DIRS})
target_include_directories(livbs PRIVATE ${UNIFIED_INCLUDE_DIRS_PRIVATE})

# 设置链接库
list(APPEND UNIFIED_LINK_LIBS
    rt
    pthread
    stdc++
)

list(APPEND UNIFIED_LINK_LIBS
    ecdr
    tinyxml2
)

target_link_directories(livbs
    PUBLIC
    ${ECDR_LIB_PATH}
    ${TINYXML_LIB_PATH}
    ${GTEST_LIB_PATH}
    $ENV{ROOT_PATH}/lib
    ${CMAKE_BINARY_DIR}/lib
    )

target_link_libraries(livbs PUBLIC ${UNIFIED_LINK_LIBS})

# Installation paths
set(TOOL_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/tool/ CACHE PATH "Installation directory for tool")

# 安装统一库
install(TARGETS livbs
    LIBRARY DESTINATION ${LIB_INSTALL_DIR}
    ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
    RUNTIME DESTINATION ${BIN_INSTALL_DIR}
    COMPONENT libraries
)

# 安装头文件
install(DIRECTORY
    ${CMAKE_CURRENT_SOURCE_DIR}/utils/include/
    ${CMAKE_CURRENT_SOURCE_DIR}/evbs/include/
    ${CMAKE_CURRENT_SOURCE_DIR}/rpc/include/
    ${CMAKE_CURRENT_SOURCE_DIR}/framework/vui/include/
    ${CMAKE_CURRENT_SOURCE_DIR}/dsf/include/
    DESTINATION ${INCLUDE_INSTALL_DIR}
    COMPONENT headers
    FILES_MATCHING
    PATTERN "*.h"
    PATTERN "*.hpp"
    PATTERN "*.ipp"
)

install(DIRECTORY
    ${CMAKE_BINARY_DIR}/utils/include/
    DESTINATION ${INCLUDE_INSTALL_DIR}
    COMPONENT headers
)

5.编译安装

cd ~/work/vbsprospace/vbs/vbspro/
./cmake-build.sh install

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pzzhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值