diff --git a/0_cmake_library/clear.cmake b/0_cmake_library/clear.cmake index e1e946f..efd6e33 100644 --- a/0_cmake_library/clear.cmake +++ b/0_cmake_library/clear.cmake @@ -176,6 +176,8 @@ function(_attach_target _target _build_type) if("${_build_type}" IN_LIST _attached_build_types) message(STATUS "skip already attached target: ${_target}, build_type=${_build_type}") return() + else() + message(STATUS "attached target: ${_target}, build_type=${_build_type}") endif() set(target_type) @@ -245,6 +247,12 @@ function(_attach_target _target _build_type) TARGET "${_target}" PROPERTY PSC_ATTACHED_BUILD_TYPES "${_attached_build_types}" ) + +# if(G_Enable_CCache AND MSVC) +# set_target_properties("${_target}" PROPERTIES +# MSVC_DEBUG_INFORMATION_FORMAT "Embedded" +# ) +# endif() endfunction() diff --git a/0_cmake_library/main.cmake b/0_cmake_library/main.cmake index e88bb7b..06d9981 100644 --- a/0_cmake_library/main.cmake +++ b/0_cmake_library/main.cmake @@ -7,6 +7,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/skill.cmake) include(${CMAKE_CURRENT_LIST_DIR}/register_libaray/export.cmake) + macro(w_install files dir) install(FILES ${files} DESTINATION "${dir}") endmacro() @@ -44,17 +45,27 @@ set(_system_build_tool_build_dir) include(${CMAKE_CURRENT_LIST_DIR}/clear.cmake) macro(_load_cmake_library) - if(MSVC) - set(launcher_utf8 "${CMAKE_SOURCE_DIR}/0_cmake_library/cl_launcher.bat") -# set(CMAKE_C_COMPILER_LAUNCHER "${launcher_utf8}") -# set(CMAKE_CXX_COMPILER_LAUNCHER "${launcher_utf8}") -# set(CMAKE_C_LINKER_LAUNCHER "${launcher_utf8}") -# set(CMAKE_CXX_LINKER_LAUNCHER "${launcher_utf8}") - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${launcher_utf8}") - set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${launcher_utf8}") - set_property(GLOBAL PROPERTY RULE_LAUNCH_CUSTOM "${launcher_utf8}") + set(CCACHE "D:/ae/tools/ccache/ccache.exe") + set(G_Enable_CCache_Default OFF) + if(CMAKE_HOST_WIN32 AND EXISTS "${CCACHE}") + set(G_Enable_CCache_Default ON) endif() + option(G_Enable_CCache "Enable ccache compiler launcher" ${G_Enable_CCache_Default}) + set(launcher) + if(MSVC) + list(APPEND launcher "D:/ae/proj/ae/0_cmake_library/set_utf8.bat") + endif() + if(G_Enable_CCache AND CMAKE_HOST_WIN32) + list(APPEND launcher "${CCACHE}") + if(MSVC) + list(APPEND launcher "compiler_type=msvc") + endif() + endif() + set(CMAKE_C_COMPILER_LAUNCHER "${launcher}") + set(CMAKE_CXX_COMPILER_LAUNCHER "${launcher}") + set(CMAKE_C_LINKER_LAUNCHER "${launcher}") + set(CMAKE_CXX_LINKER_LAUNCHER "${launcher}") # 清除默认环境 _clear_env() @@ -63,7 +74,6 @@ macro(_load_cmake_library) - set(CMAKE_GRAPHVIZ_OUTPUT_DIR "${CMAKE_BINARY_DIR}/graphviz") enable_testing() # 让 find_package 产生的 targets 在全局可见 @@ -80,25 +90,16 @@ macro(_load_cmake_library) - if(DEFINED CMAKE_TOOLCHAIN_FILE AND NOT CMAKE_TOOLCHAIN_FILE STREQUAL "") - get_filename_component(name "${CMAKE_TOOLCHAIN_FILE}" NAME) - string(REGEX REPLACE "\\.cmake$" "" name "${name}") - - set(_system_build_tool_install_dir_name "${name}") - set(G_Architecture_Name "${name}_${CMAKE_BUILD_TYPE}") - #set(G_Architecture_Name "${name}_${CMAKE_CXX_COMPILER_ID}_${CMAKE_CXX_COMPILER_VERSION}_${CMAKE_SYSTEM_PROCESSOR}_${CMAKE_BUILD_TYPE}") - - message(STATUS "当前使用 toolchain 文件: [${CMAKE_TOOLCHAIN_FILE}]") - - else() - get_filename_component(compilerName "${CMAKE_CXX_COMPILER}" NAME) - string(REPLACE ".exe" "" compilerName "${compilerName}") - string(REPLACE "." "_" compilerName "${compilerName}") - string(REPLACE "+" "x" compilerName "${compilerName}") - set(G_Architecture_Name "${compilerName}_${CMAKE_SYSTEM_NAME}_${CMAKE_BUILD_TYPE}") - set(_system_build_tool_install_dir_name "${compilerName}_${CMAKE_SYSTEM_NAME}") + # 这个地方反复触发是 工具链编译器 和 toolchain写的不一样导致的 + if(NOT DEFINED CMAKE_TOOLCHAIN_FILE OR CMAKE_TOOLCHAIN_FILE STREQUAL "") message(FATAL_ERROR "没有使用 toolchain 文件") endif() + get_filename_component(name "${CMAKE_TOOLCHAIN_FILE}" NAME) + string(REGEX REPLACE "\\.cmake$" "" name "${name}") + set(_system_build_tool_install_dir_name "${name}") + set(G_Architecture_Name "${name}_${CMAKE_BUILD_TYPE}") + message(STATUS "当前使用 toolchain 文件: [${CMAKE_TOOLCHAIN_FILE}]") + message(STATUS "当前 toolchain 名称: [${name}]") diff --git a/0_cmake_library/cl_launcher.bat b/0_cmake_library/set_utf8.bat similarity index 100% rename from 0_cmake_library/cl_launcher.bat rename to 0_cmake_library/set_utf8.bat diff --git a/CMakeLists.txt b/CMakeLists.txt index eec6ad4..22f3a4d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,6 @@ cmake_minimum_required(VERSION 3.16) +cmake_policy(SET CMP0141 NEW) +set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$:Embedded>") project(plantSunCat) set(PLANT_SUN_CAT_VERSION 1.0.0) set(CMAKE_CXX_STANDARD 20) @@ -8,32 +10,12 @@ set(ENABLE_BUILD_TIMER ON CACHE BOOL "" FORCE) - -## 驱动不能加 empty.cpp 影响sdv -#if ( -# # _type_ MATCHES "sys" OR -# _type_ MATCHES "object" -#) -# -# message("222222222222 ${_name_}") -# -# # message("create [${_type_}] [${name}] [${_rely_domain_}] [${empty_file}] ") -# target_sources(${_name_} ${_rely_domain_} ${empty_file}) -# -# return() -#endif () - - -if(0 AND MSVC) - # TODO:临时设置 为什么 vs2019 不用预设也能编译 - set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/toolchain/vs2019.cmake) - include(${CMAKE_TOOLCHAIN_FILE}) -endif() - include(0_cmake_library/main.cmake) _add_binary_to_clion() _load_cmake_library() + + rcl_init() diff --git a/3rdParty/boost/install_boost.bash b/install_script/boost/install_boost.bash similarity index 100% rename from 3rdParty/boost/install_boost.bash rename to install_script/boost/install_boost.bash diff --git a/3rdParty/boost/install_boost.ps1 b/install_script/boost/install_boost.ps1 similarity index 100% rename from 3rdParty/boost/install_boost.ps1 rename to install_script/boost/install_boost.ps1 diff --git a/install_script/ccache/ccache.ps1 b/install_script/ccache/ccache.ps1 new file mode 100644 index 0000000..53ba86a --- /dev/null +++ b/install_script/ccache/ccache.ps1 @@ -0,0 +1,52 @@ +$ErrorActionPreference = "Stop" +$toolsDir = "D:\ae\tools" +$installDir = "D:\ae\tools\ccache" +$cacheDir = "D:\ae\tools\ccache-cache" +$tmpDir = Join-Path $env:TEMP "ccache_install" +$apiUrl = "https://api.github.com/repos/ccache/ccache/releases/latest" +New-Item -ItemType Directory -Force -Path $toolsDir | Out-Null +New-Item -ItemType Directory -Force -Path $cacheDir | Out-Null +if(Test-Path $tmpDir) { + Remove-Item -Recurse -Force $tmpDir +} +New-Item -ItemType Directory -Force -Path $tmpDir | Out-Null +Write-Host "获取 ccache 最新版本信息..." +$release = Invoke-RestMethod -Uri $apiUrl -Headers @{ "User-Agent" = "PowerShell" } +$asset = $release.assets | Where-Object { $_.name -match "windows-x86_64\.zip$" } | Select-Object -First 1 +if($null -eq $asset) { + throw "没有找到 Windows x86_64 版本的 ccache zip 包" +} +$zipFile = Join-Path $tmpDir $asset.name +Write-Host "下载 $($asset.name)..." +Invoke-WebRequest -Uri $asset.browser_download_url -OutFile $zipFile +Write-Host "解压..." +Expand-Archive -Path $zipFile -DestinationPath $tmpDir -Force +$ccacheExe = Get-ChildItem -Path $tmpDir -Filter "ccache.exe" -Recurse | Select-Object -First 1 +if($null -eq $ccacheExe) { + throw "解压后没有找到 ccache.exe" +} +if(Test-Path $installDir) { + Remove-Item -Recurse -Force $installDir +} +New-Item -ItemType Directory -Force -Path $installDir | Out-Null +Copy-Item -Path (Join-Path $ccacheExe.DirectoryName "*") -Destination $installDir -Recurse -Force +[Environment]::SetEnvironmentVariable("CCACHE_DIR", $cacheDir, "User") +$userPath = [Environment]::GetEnvironmentVariable("Path", "User") +$paths = $userPath -split ";" +if($paths -notcontains $installDir) { + if([string]::IsNullOrWhiteSpace($userPath)) { + $newPath = $installDir + } else { + $newPath = "$userPath;$installDir" + } + [Environment]::SetEnvironmentVariable("Path", $newPath, "User") +} +$env:Path = "$installDir;$env:Path" +$env:CCACHE_DIR = $cacheDir +& "$installDir\ccache.exe" --version +& "$installDir\ccache.exe" -M 20G +& "$installDir\ccache.exe" -s +Remove-Item -Recurse -Force $tmpDir +Write-Host "ccache 已安装到: $installDir" +Write-Host "ccache 缓存目录: $cacheDir" +Write-Host "已经写入用户 PATH,新开的 PowerShell 窗口可直接使用 ccache" \ No newline at end of file diff --git a/install_script/ccache/set_cache_env.ps1 b/install_script/ccache/set_cache_env.ps1 new file mode 100644 index 0000000..7d6544d --- /dev/null +++ b/install_script/ccache/set_cache_env.ps1 @@ -0,0 +1,31 @@ +$ErrorActionPreference = "Stop" +$installDir = "D:\ae\tools\ccache" +$cacheDir = "D:\ae\tools\ccache-cache" +$tmpDir = "D:\ae\tools\ccache-tmp" +New-Item -ItemType Directory -Force -Path $installDir | Out-Null +New-Item -ItemType Directory -Force -Path $cacheDir | Out-Null +New-Item -ItemType Directory -Force -Path $tmpDir | Out-Null +[Environment]::SetEnvironmentVariable("CCACHE_DIR", $cacheDir, "User") +[Environment]::SetEnvironmentVariable("CCACHE_MAXSIZE", "20G", "User") +[Environment]::SetEnvironmentVariable("CCACHE_TEMPDIR", $tmpDir, "User") +$userPath = [Environment]::GetEnvironmentVariable("Path", "User") +$paths = $userPath -split ";" +if($paths -notcontains $installDir) { + if([string]::IsNullOrWhiteSpace($userPath)) { + $newPath = $installDir + } else { + $newPath = "$userPath;$installDir" + } + [Environment]::SetEnvironmentVariable("Path", $newPath, "User") +} +$env:Path = "$installDir;$env:Path" +$env:CCACHE_DIR = $cacheDir +$env:CCACHE_MAXSIZE = "20G" +$env:CCACHE_TEMPDIR = $tmpDir +& "$installDir\ccache.exe" --show-config +& "$installDir\ccache.exe" --show-stats +Write-Host "ccache 环境变量已设置" +Write-Host "ccache 安装目录: $installDir" +Write-Host "ccache 缓存目录: $cacheDir" +Write-Host "ccache 临时目录: $tmpDir" +Write-Host "已经写入用户 PATH,新开的 PowerShell 窗口可直接使用 ccache" \ No newline at end of file diff --git a/install_script/ccache/地址.txt b/install_script/ccache/地址.txt new file mode 100644 index 0000000..d6fbcb1 --- /dev/null +++ b/install_script/ccache/地址.txt @@ -0,0 +1 @@ +https://ccache.dev/download.html \ No newline at end of file diff --git a/3rdParty/cef/build_cef.ps1 b/install_script/cef/build_cef.ps1 similarity index 100% rename from 3rdParty/cef/build_cef.ps1 rename to install_script/cef/build_cef.ps1 diff --git a/3rdParty/cef/build_cef_log.ps1 b/install_script/cef/build_cef_log.ps1 similarity index 100% rename from 3rdParty/cef/build_cef_log.ps1 rename to install_script/cef/build_cef_log.ps1 diff --git a/3rdParty/cef/git_trace.log b/install_script/cef/git_trace.log similarity index 100% rename from 3rdParty/cef/git_trace.log rename to install_script/cef/git_trace.log diff --git a/3rdParty/cef/test_url.ps1 b/install_script/cef/test_url.ps1 similarity index 100% rename from 3rdParty/cef/test_url.ps1 rename to install_script/cef/test_url.ps1 diff --git a/3rdParty/cef/选项说明.txt b/install_script/cef/选项说明.txt similarity index 100% rename from 3rdParty/cef/选项说明.txt rename to install_script/cef/选项说明.txt diff --git a/3rdParty/msys2/install.ps1 b/install_script/msys2/install.ps1 similarity index 100% rename from 3rdParty/msys2/install.ps1 rename to install_script/msys2/install.ps1 diff --git a/toolchain/vs2019.cmake b/toolchain/vs2019.cmake index f5f9b71..04b5bb6 100644 --- a/toolchain/vs2019.cmake +++ b/toolchain/vs2019.cmake @@ -1,85 +1,85 @@ -set(dir "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64") - -set(CMAKE_CXX_COMPILER "${dir}/cl.exe") -set(CMAKE_C_COMPILER "${dir}/cl.exe") -set(CMAKE_LINKER "${dir}/link.exe") +#set(dir "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64") +# +#set(CMAKE_CXX_COMPILER "${dir}/cl.exe") +#set(CMAKE_C_COMPILER "${dir}/cl.exe") +#set(CMAKE_LINKER "${dir}/link.exe") -if(CMAKE_HOST_WIN32 AND CMAKE_GENERATOR MATCHES "Ninja") - - - message(STATUS "CMAKE_GENERATOR = ${CMAKE_GENERATOR}") - message(STATUS "CMAKE_GENERATOR_INSTANCE = ${CMAKE_GENERATOR_INSTANCE}") - message(STATUS "CMAKE_GENERATOR_TOOLSET = ${CMAKE_GENERATOR_TOOLSET}") - message(STATUS "CMAKE_GENERATOR_PLATFORM = ${CMAKE_GENERATOR_PLATFORM}") - message(STATUS "CMAKE_MAKE_PROGRAM before = ${CMAKE_MAKE_PROGRAM}") - - file(GLOB CLION_NINJA_CANDIDATES - "C:/Program Files/JetBrains/CLion */bin/ninja/win/x64/ninja.exe" - ) - - list(SORT CLION_NINJA_CANDIDATES ORDER DESCENDING) - - if(CLION_NINJA_CANDIDATES) - list(GET CLION_NINJA_CANDIDATES 0 CLION_NINJA_EXE) - message(STATUS "CLION_NINJA_EXE = ${CLION_NINJA_EXE}") - - set(CMAKE_MAKE_PROGRAM "${CLION_NINJA_EXE}" CACHE FILEPATH "Ninja executable" FORCE) - else() - message(WARNING "CLion ninja.exe not found") - endif() - - message(STATUS "CMAKE_MAKE_PROGRAM after = ${CMAKE_MAKE_PROGRAM}") - - # 输出 Ninja 版本 - execute_process( - COMMAND "${CMAKE_MAKE_PROGRAM}" --version - OUTPUT_VARIABLE _ninja_version - ERROR_VARIABLE _ninja_version_err - RESULT_VARIABLE _ninja_version_ret - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE - ) - - message(STATUS "Ninja version ret = ${_ninja_version_ret}") - message(STATUS "Ninja version = ${_ninja_version}") - if(_ninja_version_err) - message(STATUS "Ninja version err = ${_ninja_version_err}") - endif() - - # 输出 Ninja Windows 编码模式 - execute_process( - COMMAND "${CMAKE_MAKE_PROGRAM}" -t wincodepage - OUTPUT_VARIABLE _ninja_wincodepage - ERROR_VARIABLE _ninja_wincodepage_err - RESULT_VARIABLE _ninja_wincodepage_ret - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE - ) - - message(STATUS "Ninja wincodepage ret = ${_ninja_wincodepage_ret}") - message(STATUS "Ninja wincodepage = ${_ninja_wincodepage}") - if(_ninja_wincodepage_err) - message(STATUS "Ninja wincodepage err = ${_ninja_wincodepage_err}") - endif() - - # 输出当前 cmd 代码页 - execute_process( - COMMAND cmd /c chcp - OUTPUT_VARIABLE _cmd_chcp - ERROR_VARIABLE _cmd_chcp_err - RESULT_VARIABLE _cmd_chcp_ret - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE - ) - - message(STATUS "cmd chcp ret = ${_cmd_chcp_ret}") - message(STATUS "cmd chcp = ${_cmd_chcp}") - if(_cmd_chcp_err) - message(STATUS "cmd chcp err = ${_cmd_chcp_err}") - endif() -endif() +#if(CMAKE_HOST_WIN32 AND CMAKE_GENERATOR MATCHES "Ninja") +# +# +# message(STATUS "CMAKE_GENERATOR = ${CMAKE_GENERATOR}") +# message(STATUS "CMAKE_GENERATOR_INSTANCE = ${CMAKE_GENERATOR_INSTANCE}") +# message(STATUS "CMAKE_GENERATOR_TOOLSET = ${CMAKE_GENERATOR_TOOLSET}") +# message(STATUS "CMAKE_GENERATOR_PLATFORM = ${CMAKE_GENERATOR_PLATFORM}") +# message(STATUS "CMAKE_MAKE_PROGRAM before = ${CMAKE_MAKE_PROGRAM}") +# +# file(GLOB CLION_NINJA_CANDIDATES +# "C:/Program Files/JetBrains/CLion */bin/ninja/win/x64/ninja.exe" +# ) +# +# list(SORT CLION_NINJA_CANDIDATES ORDER DESCENDING) +# +# if(CLION_NINJA_CANDIDATES) +# list(GET CLION_NINJA_CANDIDATES 0 CLION_NINJA_EXE) +# message(STATUS "CLION_NINJA_EXE = ${CLION_NINJA_EXE}") +# +# set(CMAKE_MAKE_PROGRAM "${CLION_NINJA_EXE}" CACHE FILEPATH "Ninja executable" FORCE) +# else() +# message(WARNING "CLion ninja.exe not found") +# endif() +# +# message(STATUS "CMAKE_MAKE_PROGRAM after = ${CMAKE_MAKE_PROGRAM}") +# +# # 输出 Ninja 版本 +# execute_process( +# COMMAND "${CMAKE_MAKE_PROGRAM}" --version +# OUTPUT_VARIABLE _ninja_version +# ERROR_VARIABLE _ninja_version_err +# RESULT_VARIABLE _ninja_version_ret +# OUTPUT_STRIP_TRAILING_WHITESPACE +# ERROR_STRIP_TRAILING_WHITESPACE +# ) +# +# message(STATUS "Ninja version ret = ${_ninja_version_ret}") +# message(STATUS "Ninja version = ${_ninja_version}") +# if(_ninja_version_err) +# message(STATUS "Ninja version err = ${_ninja_version_err}") +# endif() +# +# # 输出 Ninja Windows 编码模式 +# execute_process( +# COMMAND "${CMAKE_MAKE_PROGRAM}" -t wincodepage +# OUTPUT_VARIABLE _ninja_wincodepage +# ERROR_VARIABLE _ninja_wincodepage_err +# RESULT_VARIABLE _ninja_wincodepage_ret +# OUTPUT_STRIP_TRAILING_WHITESPACE +# ERROR_STRIP_TRAILING_WHITESPACE +# ) +# +# message(STATUS "Ninja wincodepage ret = ${_ninja_wincodepage_ret}") +# message(STATUS "Ninja wincodepage = ${_ninja_wincodepage}") +# if(_ninja_wincodepage_err) +# message(STATUS "Ninja wincodepage err = ${_ninja_wincodepage_err}") +# endif() +# +# # 输出当前 cmd 代码页 +# execute_process( +# COMMAND cmd /c chcp +# OUTPUT_VARIABLE _cmd_chcp +# ERROR_VARIABLE _cmd_chcp_err +# RESULT_VARIABLE _cmd_chcp_ret +# OUTPUT_STRIP_TRAILING_WHITESPACE +# ERROR_STRIP_TRAILING_WHITESPACE +# ) +# +# message(STATUS "cmd chcp ret = ${_cmd_chcp_ret}") +# message(STATUS "cmd chcp = ${_cmd_chcp}") +# if(_cmd_chcp_err) +# message(STATUS "cmd chcp err = ${_cmd_chcp_err}") +# endif() +#endif()