From 506f3787da79c56ecd3a5849250981d37f25dd09 Mon Sep 17 00:00:00 2001 From: wyc <1104749580@qq.com> Date: Mon, 20 Jul 2026 16:05:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E4=B8=8A=E5=91=BD=E5=90=8D=E7=A9=BA?= =?UTF-8?q?=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0_cmake_library/clear.cmake | 2 +- 0_cmake_library/cmake_bash_library/core.cmake | 4 +- .../cmake_bash_library/export.cmake | 2 +- .../cmake_library/base/codec/codec.cmake | 6 + .../composite/registry/registry.cmake | 45 +- .../cmake_library/domain/action/action.cmake | 7 +- .../domain/library/library.cmake | 861 +++++++++------- .../cmake_library/scripts/library/library.sh | 139 ++- .../composite/registry/registry_test.cmake | 4 +- .../library/library_namespace_test.cmake | 105 ++ .../test/domain/library/library_test.cmake | 100 +- .../cmake_library/test/test_all.cmake | 1 + .../cmake_library/test/test_common.cmake | 2 +- .../create_linux_driver_proj.cmake | 10 +- 0_cmake_library/main.cmake | 2 +- .../ninja_build_analyze/build_analyze.sh | 2 +- .../ninja_build_analyze/export.cmake | 2 +- .../register}/base.cmake | 49 +- .../register}/computer_graphics.cmake | 83 +- 0_cmake_library/register/export.cmake | 8 + .../register}/libarchive.cmake | 86 +- 0_cmake_library/register/osg_earth.cmake | 959 ++++++++++++++++++ .../register}/register_library.cmake | 131 +-- .../register}/with_qt.cmake | 12 +- .../register_libaray/rcl_register_ex.cmake | 317 ++++-- 0_cmake_library/调试选项.md | 121 --- 3rdParty/库编译规范.txt | 4 - CMakeLists.txt | 57 +- end.cmake | 5 +- register/export.cmake | 8 - register/osgearth.cmake | 375 ------- register/图表库.md | 24 - register_project.cmake | 4 +- start.cmake | 5 +- toolchain/交叉编译工具链.md | 46 - toolchain/注意事项.txt | 16 - toolchain/示例CMakePresets.json | 401 -------- 37 files changed, 2216 insertions(+), 1789 deletions(-) create mode 100644 0_cmake_library/cmake_library/test/domain/library/library_namespace_test.cmake rename {register => 0_cmake_library/register}/base.cmake (79%) rename {register => 0_cmake_library/register}/computer_graphics.cmake (68%) create mode 100644 0_cmake_library/register/export.cmake rename {register => 0_cmake_library/register}/libarchive.cmake (85%) create mode 100644 0_cmake_library/register/osg_earth.cmake rename {register => 0_cmake_library/register}/register_library.cmake (66%) rename {register => 0_cmake_library/register}/with_qt.cmake (65%) delete mode 100644 0_cmake_library/调试选项.md delete mode 100644 3rdParty/库编译规范.txt delete mode 100644 register/export.cmake delete mode 100644 register/osgearth.cmake delete mode 100644 register/图表库.md delete mode 100644 toolchain/交叉编译工具链.md delete mode 100644 toolchain/注意事项.txt delete mode 100644 toolchain/示例CMakePresets.json diff --git a/0_cmake_library/clear.cmake b/0_cmake_library/clear.cmake index efd6e33..0f17945 100644 --- a/0_cmake_library/clear.cmake +++ b/0_cmake_library/clear.cmake @@ -312,7 +312,7 @@ endfunction() macro(attach_current_source_dir ) - get_property(_targets DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" PROPERTY BUILDSYSTEM_TARGETS) + get_property(_targets DIRECTORY "." PROPERTY BUILDSYSTEM_TARGETS) foreach(target IN LISTS _targets) get_target_property(target_type "${target}" TYPE) diff --git a/0_cmake_library/cmake_bash_library/core.cmake b/0_cmake_library/cmake_bash_library/core.cmake index d09e14c..ac599cc 100644 --- a/0_cmake_library/cmake_bash_library/core.cmake +++ b/0_cmake_library/cmake_bash_library/core.cmake @@ -1,6 +1,6 @@ include_guard(GLOBAL) -include(${CMAKE_CURRENT_LIST_DIR}/base.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/prop.cmake) +include(base.cmake) +include(prop.cmake) diff --git a/0_cmake_library/cmake_bash_library/export.cmake b/0_cmake_library/cmake_bash_library/export.cmake index 60b2441..4f57923 100644 --- a/0_cmake_library/cmake_bash_library/export.cmake +++ b/0_cmake_library/cmake_bash_library/export.cmake @@ -1,2 +1,2 @@ include_guard(GLOBAL) -include(${CMAKE_CURRENT_LIST_DIR}/core.cmake) +include(core.cmake) diff --git a/0_cmake_library/cmake_library/base/codec/codec.cmake b/0_cmake_library/cmake_library/base/codec/codec.cmake index fd6df16..7095364 100644 --- a/0_cmake_library/cmake_library/base/codec/codec.cmake +++ b/0_cmake_library/cmake_library/base/codec/codec.cmake @@ -63,6 +63,12 @@ endfunction() # 注意: 所有结构层和业务层的导出文件都应使用这个函数,避免 Windows CRLF/CR 残留进入 Bash 解析链路。 function(codec_write_text_file path text) codec_normalize_line_endings(_text "${text}") + if(EXISTS "${path}") + file(READ "${path}" _current_text) + if("${_current_text}" STREQUAL "${_text}") + return() + endif() + endif() file(WRITE "${path}" "${_text}") endfunction() diff --git a/0_cmake_library/cmake_library/composite/registry/registry.cmake b/0_cmake_library/cmake_library/composite/registry/registry.cmake index 14da14d..41943d6 100644 --- a/0_cmake_library/cmake_library/composite/registry/registry.cmake +++ b/0_cmake_library/cmake_library/composite/registry/registry.cmake @@ -20,12 +20,13 @@ include("${CMAKE_CURRENT_LIST_DIR}/../../base/codec/codec.cmake") # /items.txt # /order.txt # /graph.mmd -# /nodes//map.txt -# /nodes//init.cmake -# /nodes//clear.cmake -# 10. registry_deserialize_dir 从同样的文件夹结构恢复 registry。 -# 11. graph.txt 中的 N 行第三列就是 map id;反序列化时用这个 map id 定位 nodes//map.txt。 -# 12. init.cmake 和 clear.cmake 是节点 map 中 INIT_SCRIPT_CONTENT / CLEAR_SCRIPT_CONTENT 的文件投影。 +# /nodes//map.txt +# /nodes//init.cmake +# /nodes//clear.cmake +# 10. 带 :: 的节点名按命名空间层级展开为 node_path;普通节点继续使用 map id。 +# 11. registry_deserialize_dir 从同样的文件夹结构恢复 registry。 +# 12. graph.txt 中的 N 行第三列仍然保存 map id,只用于恢复内存中的属性 map。 +# 13. init.cmake 和 clear.cmake 是节点 map 中 INIT_SCRIPT_CONTENT / CLEAR_SCRIPT_CONTENT 的文件投影。 # 反序列化时会读取同目录下的 init.cmake / clear.cmake 并回写到该节点 map。 # API: registry_create() @@ -61,9 +62,11 @@ function(registry_add self name) get_property(_graph GLOBAL PROPERTY "__registry.${self}.graph") get_property(_items GLOBAL PROPERTY "__registry.${self}.items") get_property(_order GLOBAL PROPERTY "__registry.${self}.order") - - set(_map_id "__registry_${self}_map_${name}") - + if(ARGC GREATER 2) + set(_map_id "${ARGV2}") + else() + set(_map_id "__registry_${self}_map_${name}") + endif() graph_add_node("${_graph}" "${name}" "${_map_id}") set_add("${_items}" "${name}") list_push_back("${_order}" "${name}") @@ -232,21 +235,31 @@ function(registry_export_mermaid self out) set(${out} "${_text}" PARENT_SCOPE) endfunction() +function(__registry_node_relative_dir name map_id out) + if("${name}" MATCHES "^[A-Za-z0-9_+-]+(::[A-Za-z0-9_+-]+)+$") + string(REPLACE "::" "/" _relative_dir "${name}") + else() + set(_relative_dir "${map_id}") + endif() + set(${out} "${_relative_dir}" PARENT_SCOPE) +endfunction() + # API: registry_node_dir( ) # 作用: 返回对象 name 在 registry 序列化目录中的节点目录。 # 参数: self 是 registry 名称;name 是对象名;dir 是 registry_serialize_dir 的根目录;out 是接收目录路径的变量名。 # 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: 目录规则固定为 /nodes/;map_id 来自 graph 节点 data。 +# 注意: 带 :: 的节点按命名空间层级展开;普通节点继续使用 map id。 function(registry_node_dir self name dir out) registry_get_map_id("${self}" "${name}" _map_id) - set(${out} "${dir}/nodes/${_map_id}" PARENT_SCOPE) + __registry_node_relative_dir("${name}" "${_map_id}" _relative_dir) + set(${out} "${dir}/nodes/${_relative_dir}" PARENT_SCOPE) endfunction() # API: registry_serialize_dir( ) # 作用: 将 registry 分层序列化到文件夹。 # 参数: self 是 registry 名称;dir 是输出文件夹路径。 # 返回: 无。 -# 注意: 复用 graph/map/set/list 的 serialize_file;graph 节点 data 决定 nodes/ 目录。 +# 注意: 复用 graph/map/set/list 的 serialize_file;带命名空间的节点使用 nodes//,普通节点使用 nodes/。 function(registry_serialize_dir self dir) get_property(_graph GLOBAL PROPERTY "__registry.${self}.graph") get_property(_items GLOBAL PROPERTY "__registry.${self}.items") @@ -265,7 +278,8 @@ function(registry_serialize_dir self dir) graph_nodes("${_graph}" _nodes) foreach(_node IN LISTS _nodes) graph_get_node_data("${_graph}" "${_node}" _map_id) - set(_node_dir "${dir}/nodes/${_map_id}") + __registry_node_relative_dir("${_node}" "${_map_id}" _relative_dir) + set(_node_dir "${dir}/nodes/${_relative_dir}") file(MAKE_DIRECTORY "${_node_dir}") map_serialize_file("${_map_id}" "${_node_dir}/map.txt") map_get("${_map_id}" INIT_SCRIPT_CONTENT _init_script_content) @@ -279,7 +293,7 @@ endfunction() # 作用: 从 registry_serialize_dir 输出的文件夹恢复 registry。 # 参数: self 是新 registry 名称;dir 是输入文件夹路径。 # 返回: 无。 -# 注意: 先清空已有 registry 当前可枚举内容,再恢复外层 graph,并按 graph 节点 data 读取 nodes//map.txt。 +# 注意: 先清空已有 registry 当前可枚举内容,再恢复外层 graph,并按节点名规则读取对应的 map.txt。 function(registry_deserialize_dir self dir) get_property(_old_graph GLOBAL PROPERTY "__registry.${self}.graph") @@ -318,7 +332,8 @@ function(registry_deserialize_dir self dir) graph_nodes("${_graph}" _nodes) foreach(_node IN LISTS _nodes) graph_get_node_data("${_graph}" "${_node}" _map_id) - set(_node_dir "${dir}/nodes/${_map_id}") + __registry_node_relative_dir("${_node}" "${_map_id}" _relative_dir) + set(_node_dir "${dir}/nodes/${_relative_dir}") file(READ "${_node_dir}/map.txt" _map_text) map_deserialize("${_map_id}" "${_map_text}") file(READ "${_node_dir}/init.cmake" _init_script_content) diff --git a/0_cmake_library/cmake_library/domain/action/action.cmake b/0_cmake_library/cmake_library/domain/action/action.cmake index 3a11fd8..0756504 100644 --- a/0_cmake_library/cmake_library/domain/action/action.cmake +++ b/0_cmake_library/cmake_library/domain/action/action.cmake @@ -147,7 +147,7 @@ endfunction() # 返回: 通过 PARENT_SCOPE 设置 out。 # 注意: 当前只把 '-' 转成 '_';业务层仍要保证 action 名是安全 id。 function(action_target_name operation out) - string(REPLACE "-" "_" _target_name "${operation}") + string(REGEX REPLACE "[^A-Za-z0-9_]+" "_" _target_name "${operation}") set(${out} "${_target_name}" PARENT_SCOPE) endfunction() @@ -191,15 +191,16 @@ endfunction() # 注意: target 名为 __。item/action 名必须由业务层保证安全。 function(action_add_item_operation_targets prefix dir bash script items operations folder_root) foreach(_item IN LISTS items) + action_target_name("${_item}" _item_target) foreach(_op IN LISTS operations) action_target_name("${_op}" _op_target) - add_custom_target("${prefix}_${_item}_${_op_target}" + add_custom_target("${prefix}_${_item_target}_${_op_target}" COMMAND "${bash}" "${script}" "${_op}" --data-dir "${dir}" --config "$" "${_item}" COMMENT "Run action ${_op} for ${_item}" USES_TERMINAL VERBATIM ) - action_set_target_folder("${prefix}_${_item}_${_op_target}" "${folder_root}" "items/${_item}") + action_set_target_folder("${prefix}_${_item_target}_${_op_target}" "${folder_root}" "items/${_item}") endforeach() endforeach() endfunction() diff --git a/0_cmake_library/cmake_library/domain/library/library.cmake b/0_cmake_library/cmake_library/domain/library/library.cmake index b1618ff..160bd3b 100644 --- a/0_cmake_library/cmake_library/domain/library/library.cmake +++ b/0_cmake_library/cmake_library/domain/library/library.cmake @@ -122,103 +122,265 @@ endfunction() # 6. 操作枚举来自 Bash:CMake 配置期执行 library.sh list-ops,结果缓存后用于生成 custom target。 # 7. 操作枚举不传参数文件;实际操作必须传 --data-dir 指向导出目录。 # 8. 对象名、属性名和 self 仍然是安全 id;复杂值由底层 codec 自动处理。 -# 9. 每个库的 map.txt、init.cmake、clear.cmake 统一由 registry 导出到 registry/nodes//。 +# 9. 每个库的 map.txt、init.cmake、clear.cmake 统一由 registry 导出到 registry/nodes///。 # 10. library_init_environment 和 library_clear_environment 是 macro,保证 init/clear 中设置或 unset 的变量作用到调用者作用域。 # 11. OTHER_USE_OPT 是库导出给依赖方使用的 CMake configure 参数;Bash 构建依赖方时会按依赖闭包顺序自动追加。 -# INTERNAL: __library_registry_id( ) -# 作用: 计算 library 业务对象内部 registry id。 -# 参数: self 是 library 名称;out 是接收 registry id 的变量名。 -# 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: registry id 是内部结构名,调用层不直接使用。 function(__library_registry_id self out) - set(${out} "__library_${self}_registry" PARENT_SCOPE) + string(SHA256 _hash "registry:${self}") + set(${out} "__library_registry_${_hash}" PARENT_SCOPE) endfunction() - -# INTERNAL: __library_globals_id( ) -# 作用: 计算 library 业务对象内部全局参数 map id。 -# 参数: self 是 library 名称;out 是接收 map id 的变量名。 -# 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: globals map 与 registry 一对一;导出为 globals.txt。 function(__library_globals_id self out) - set(${out} "__library_${self}_globals" PARENT_SCOPE) + string(SHA256 _hash "globals:${self}") + set(${out} "__library_globals_${_hash}" PARENT_SCOPE) endfunction() - -# INTERNAL: __library_operations_id( ) -# 作用: 计算 library 业务对象内部操作列表 list id。 -# 参数: self 是 library 名称;out 是接收 list id 的变量名。 -# 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: 操作列表来自 Bash 的 list-ops 输出,用于 CMake target 生成。 function(__library_operations_id self out) - set(${out} "__library_${self}_operations" PARENT_SCOPE) + string(SHA256 _hash "operations:${self}") + set(${out} "__library_operations_${_hash}" PARENT_SCOPE) +endfunction() +function(__library_export_registry_id self out) + string(SHA256 _hash "export:${self}") + set(${out} "__library_export_registry_${_hash}" PARENT_SCOPE) +endfunction() +function(__library_map_id scope full_name out) + string(SHA256 _hash "${scope}:${full_name}") + set(${out} "__library_map_${_hash}" PARENT_SCOPE) +endfunction() +function(__library_storage_path full_name out) + string(REPLACE "::" "/" _path "${full_name}") + set(${out} "${_path}" PARENT_SCOPE) +endfunction() +function(__library_namespace_parent namespace out) + if("${namespace}" MATCHES "::") + string(REGEX REPLACE "::[^:]+$" "" _parent "${namespace}") + else() + set(_parent "") + endif() + set(${out} "${_parent}" PARENT_SCOPE) +endfunction() +function(__library_namespace_leaf namespace out) + string(REGEX REPLACE "^.*::" "" _leaf "${namespace}") + set(${out} "${_leaf}" PARENT_SCOPE) +endfunction() +function(__library_register_namespace_path namespace) + string(REPLACE "::" ";" _parts "${namespace}") + set(_current "") + foreach(_part IN LISTS _parts) + if("${_part}" STREQUAL "" OR NOT "${_part}" MATCHES "^[A-Za-z0-9_+-]+$") + message(FATAL_ERROR "invalid namespace: ${namespace}") + endif() + if("${_current}" STREQUAL "") + set(_current "${_part}") + else() + string(APPEND _current "::${_part}") + endif() + get_property(_names GLOBAL PROPERTY "__library.namespaces") + list(FIND _names "${_current}" _index) + if(_index EQUAL -1) + set_property(GLOBAL APPEND PROPERTY "__library.namespaces" "${_current}") + set_property(GLOBAL PROPERTY "__library.namespace.${_current}.dependencies" "") + endif() + endforeach() +endfunction() +function(__library_namespace_initialized namespace out) + get_property(_initialized GLOBAL PROPERTY "__library.namespace.${namespace}.initialized") + if(_initialized) + set(${out} TRUE PARENT_SCOPE) + else() + set(${out} FALSE PARENT_SCOPE) + endif() +endfunction() +function(__library_resolve_namespace self reference out) + get_property(_names GLOBAL PROPERTY "__library.namespaces") + set(_candidates "") + list(FIND _names "${reference}" _exact_index) + if(NOT _exact_index EQUAL -1) + list(APPEND _candidates "${reference}") + endif() + if(NOT "${reference}" MATCHES "::") + __library_namespace_parent("${self}" _parent) + if(NOT "${_parent}" STREQUAL "") + set(_sibling "${_parent}::${reference}") + list(FIND _names "${_sibling}" _sibling_index) + if(NOT _sibling_index EQUAL -1) + list(APPEND _candidates "${_sibling}") + endif() + endif() + foreach(_name IN LISTS _names) + __library_namespace_leaf("${_name}" _leaf) + if("${_leaf}" STREQUAL "${reference}") + list(APPEND _candidates "${_name}") + endif() + endforeach() + endif() + list(REMOVE_DUPLICATES _candidates) + list(LENGTH _candidates _count) + if(_count EQUAL 0) + message(FATAL_ERROR "namespace not found: ${reference}") + endif() + if(_count GREATER 1) + string(REPLACE ";" ", " _text "${_candidates}") + message(FATAL_ERROR "ambiguous namespace '${reference}': ${_text}") + endif() + list(GET _candidates 0 _resolved) + set(${out} "${_resolved}" PARENT_SCOPE) +endfunction() +function(library_namespace_depends self) + __library_namespace_initialized("${self}" _initialized) + if(NOT _initialized) + message(FATAL_ERROR "namespace is not initialized: ${self}") + endif() + get_property(_dependencies GLOBAL PROPERTY "__library.namespace.${self}.dependencies") + foreach(_reference IN LISTS ARGN) + __library_resolve_namespace("${self}" "${_reference}" _dependency) + if("${_dependency}" STREQUAL "${self}") + message(FATAL_ERROR "namespace cannot depend on itself: ${self}") + endif() + list(APPEND _dependencies "${_dependency}") + message(STATUS "[namespace-depends] ${self} -> ${_dependency}") + endforeach() + list(REMOVE_DUPLICATES _dependencies) + set_property(GLOBAL PROPERTY "__library.namespace.${self}.dependencies" "${_dependencies}") +endfunction() +function(library_namespace_dependencies self out) + get_property(_dependencies GLOBAL PROPERTY "__library.namespace.${self}.dependencies") + set(${out} "${_dependencies}" PARENT_SCOPE) +endfunction() +function(__library_visible_namespaces self out) + set(_visible "") + set(_current "${self}") + while(NOT "${_current}" STREQUAL "") + list(APPEND _visible "${_current}") + get_property(_dependencies GLOBAL PROPERTY "__library.namespace.${_current}.dependencies") + list(APPEND _visible ${_dependencies}) + __library_namespace_parent("${_current}" _current) + endwhile() + list(REMOVE_DUPLICATES _visible) + set(${out} "${_visible}" PARENT_SCOPE) +endfunction() +function(__library_full_name namespace id out) + set(${out} "${namespace}::${id}" PARENT_SCOPE) +endfunction() +function(__library_split_full_name full_name namespace_out id_out) + if(NOT "${full_name}" MATCHES "::") + message(FATAL_ERROR "library full name must contain '::': ${full_name}") + endif() + string(REGEX REPLACE "::[^:]+$" "" _namespace "${full_name}") + string(REGEX REPLACE "^.*::" "" _id "${full_name}") + set(${namespace_out} "${_namespace}" PARENT_SCOPE) + set(${id_out} "${_id}" PARENT_SCOPE) +endfunction() +function(__library_local_has namespace full_name out) + __library_namespace_initialized("${namespace}" _initialized) + if(NOT _initialized) + set(${out} FALSE PARENT_SCOPE) + return() + endif() + __library_registry_id("${namespace}" _registry) + registry_has("${_registry}" "${full_name}" _has) + set(${out} "${_has}" PARENT_SCOPE) +endfunction() +function(library_resolve self reference out) + if("${reference}" MATCHES "::") + __library_split_full_name("${reference}" _namespace _id) + __library_local_has("${_namespace}" "${reference}" _has) + if(NOT _has) + message(FATAL_ERROR "library not found: ${reference}") + endif() + set(${out} "${reference}" PARENT_SCOPE) + return() + endif() + set(_candidates "") + __library_visible_namespaces("${self}" _visible) + foreach(_namespace IN LISTS _visible) + __library_full_name("${_namespace}" "${reference}" _candidate) + __library_local_has("${_namespace}" "${_candidate}" _has) + if(_has) + list(APPEND _candidates "${_candidate}") + endif() + endforeach() + list(REMOVE_DUPLICATES _candidates) + list(LENGTH _candidates _count) + if(_count EQUAL 0) + message(FATAL_ERROR "library not found from namespace '${self}': ${reference}") + endif() + if(_count GREATER 1) + string(REPLACE ";" ", " _text "${_candidates}") + message(FATAL_ERROR "ambiguous library '${reference}' from namespace '${self}': ${_text}; use a full name") + endif() + list(GET _candidates 0 _resolved) + set(${out} "${_resolved}" PARENT_SCOPE) +endfunction() +function(__library_resolve_owner self reference full_out namespace_out registry_out) + library_resolve("${self}" "${reference}" _full_name) + __library_split_full_name("${_full_name}" _namespace _id) + __library_registry_id("${_namespace}" _registry) + set(${full_out} "${_full_name}" PARENT_SCOPE) + set(${namespace_out} "${_namespace}" PARENT_SCOPE) + set(${registry_out} "${_registry}" PARENT_SCOPE) endfunction() - -# INTERNAL: __library_get_bash_executable( ) -# 作用: 获取当前 library 业务对象要调用的 Bash 可执行文件路径。 -# 参数: self 是 library 名称;out 是接收 Bash 可执行文件的变量名。 -# 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: 不做候选命令搜索;Windows 默认 C:/Program Files/Git/bin/bash.exe,其他平台默认 bash。调用层可用 BASH_EXECUTABLE 覆盖。 function(__library_get_bash_executable self out) __library_globals_id("${self}" _globals) map_get("${_globals}" BASH_EXECUTABLE _bash) - - if ("${_bash}" STREQUAL "") + if("${_bash}" STREQUAL "") set(_bash "${__library_default_bash_executable}") - endif () - + endif() set(${out} "${_bash}" PARENT_SCOPE) endfunction() - -# INTERNAL: __library_get_bash_script( ) -# 作用: 获取当前 library 业务对象要调用的 Bash 主脚本路径。 -# 参数: self 是 library 名称;out 是接收脚本路径的变量名。 -# 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: 优先读取 globals 中的 BASH_SCRIPT;没有设置时使用 scripts/library/library.sh。 function(__library_get_bash_script self out) __library_globals_id("${self}" _globals) map_get("${_globals}" BASH_SCRIPT _script) - - if ("${_script}" STREQUAL "") + if("${_script}" STREQUAL "") set(_script "${__library_default_bash_script}") - endif () - + endif() set(${out} "${_script}" PARENT_SCOPE) endfunction() +function(__library_namespace_storage_id self out) + string(REGEX REPLACE "[^A-Za-z0-9_]" "_" _namespace_storage "${self}") + set(${out} "${_namespace_storage}" PARENT_SCOPE) +endfunction() -# API: library_create() -# 作用: 创建库依赖业务对象,并初始化 registry、globals map 和 operations list。 -# 参数: self 是业务对象名称。 -# 返回: 无。 -# 注意: 会自动捕获当前 CMake 配置环境参数;不做重复创建检查。 -function(library_create self root_dir) - define_property(GLOBAL PROPERTY "__library.${self}" - BRIEF_DOCS "library business object ${self}" - FULL_DOCS "domain library object ${self}" - ) - +# 经常修改的函数位置 +function(__library_set_default_dirs self root_dir) + __library_globals_id("${self}" _globals) + __library_namespace_storage_id("${self}" _namespace_storage) + get_filename_component(_source_cache_root "${root_dir}/../source" ABSOLUTE) + map_set("${_globals}" ROOT_DIR "${root_dir}") + map_set("${_globals}" CACHE_ROOT "${root_dir}") + map_set("${_globals}" SOURCE_CACHE_ROOT "${_source_cache_root}") + map_set("${_globals}" INSTALL_CACHE_ROOT "${root_dir}/install") + map_set("${_globals}" DATA_EXPORT_DIR "${root_dir}/library_data") + map_set("${_globals}" BUILD_CACHE_ROOT "${CMAKE_BINARY_DIR}/_yc_deps_${_namespace_storage}") +endfunction() +function(library_set_root_dir self root_dir) + __library_set_default_dirs("${self}" "${root_dir}") +endfunction() +function(library_create self) + set(root_dir "${ARGV1}") + __library_register_namespace_path("${self}") + __library_namespace_initialized("${self}" _initialized) + if(_initialized) + message(FATAL_ERROR "namespace already initialized: ${self}") + endif() + if("${root_dir}" STREQUAL "") + set(root_dir "${CMAKE_BINARY_DIR}") + endif() + define_property(GLOBAL PROPERTY "__library.${self}" BRIEF_DOCS "library namespace ${self}" FULL_DOCS "library namespace ${self}") __library_registry_id("${self}" _registry) __library_globals_id("${self}" _globals) __library_operations_id("${self}" _operations) - set_property(GLOBAL PROPERTY "__library.${self}.registry" "${_registry}") set_property(GLOBAL PROPERTY "__library.${self}.globals" "${_globals}") set_property(GLOBAL PROPERTY "__library.${self}.operations" "${_operations}") - + set_property(GLOBAL PROPERTY "__library.namespace.${self}.initialized" TRUE) registry_create("${_registry}") map_create("${_globals}") list_create("${_operations}") - library_capture_cmake_environment("${self}" "${root_dir}") endfunction() - -# API: library_capture_cmake_environment() -# 作用: 将当前 CMake 配置过程的工具链参数写入 globals map。 -# 参数: self 是业务对象名称。 -# 返回: 无。 -# 注意: Bash 不猜 generator/toolchain/preset;统一读取这里导出的全局参数。 function(library_capture_cmake_environment self root_dir) __library_globals_id("${self}" _globals) - + __library_namespace_storage_id("${self}" _namespace_storage) map_set("${_globals}" CMAKE_COMMAND "${CMAKE_COMMAND}") map_set("${_globals}" CMAKE_GENERATOR "${CMAKE_GENERATOR}") map_set("${_globals}" CMAKE_GENERATOR_PLATFORM "${CMAKE_GENERATOR_PLATFORM}") @@ -232,209 +394,262 @@ function(library_capture_cmake_environment self root_dir) map_set("${_globals}" CMAKE_SOURCE_DIR "${CMAKE_SOURCE_DIR}") map_set("${_globals}" CMAKE_BINARY_DIR "${CMAKE_BINARY_DIR}") map_set("${_globals}" CMAKE_PROJECT_NAME "${CMAKE_PROJECT_NAME}") - - # CMake preset 名称在不同版本/入口下不一定有统一变量;这里保留显式覆盖端口。 map_set("${_globals}" CMAKE_CONFIGURE_PRESET "${CMAKE_CONFIGURE_PRESET}") map_set("${_globals}" CMAKE_BUILD_PRESET "${CMAKE_BUILD_PRESET}") map_set("${_globals}" CMAKE_INSTALL_PRESET "${CMAKE_INSTALL_PRESET}") - map_set("${_globals}" BASH_EXECUTABLE "${__library_default_bash_executable}") map_set("${_globals}" BASH_SCRIPT "${__library_default_bash_script}") map_set("${_globals}" SCRIPT_ROOT "${__library_project_root}/scripts") - - map_set("${_globals}" CACHE_ROOT "${root_dir}/${self}") - map_set("${_globals}" SOURCE_CACHE_ROOT "${root_dir}/../source") - map_set("${_globals}" INSTALL_CACHE_ROOT "${root_dir}_${self}/install") - map_set("${_globals}" DATA_EXPORT_DIR "${root_dir}_${self}/library_data") - map_set("${_globals}" BUILD_CACHE_ROOT "${CMAKE_BINARY_DIR}/_yc_deps_${self}") + map_set("${_globals}" NAMESPACE "${self}") + map_set("${_globals}" NAMESPACE_STORAGE_ID "${_namespace_storage}") + __library_set_default_dirs("${self}" "${root_dir}") endfunction() - -# API: library_set_global( [value...]) -# 作用: 设置业务层全局参数。 -# 参数: self 是业务对象名称;key 是全局参数名;ARGN 是参数值。 -# 返回: 无。 -# 注意: 用于覆盖 CMake 自动捕获值,例如 BASH_SCRIPT、CACHE_ROOT、CMAKE_TOOLCHAIN_FILE、CMAKE_CONFIGURE_PRESET。 function(library_set_global self key) __library_globals_id("${self}" _globals) map_set("${_globals}" "${key}" "${ARGN}") endfunction() - -# API: library_get_global( ) -# 作用: 读取业务层全局参数。 -# 参数: self 是业务对象名称;key 是全局参数名;out 是接收值的变量名。 -# 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: 读取结果已由 map/codec 自动 decode。 function(library_get_global self key out) __library_globals_id("${self}" _globals) map_get("${_globals}" "${key}" _value) set(${out} "${_value}" PARENT_SCOPE) endfunction() - -# API: library_register( ) -# 作用: 注册一个库对象。 -# 参数: self 是业务对象名称;name 是库对象安全 id。 -# 返回: 无。 -# 注意: 实际写入内部 registry;属性默认写入 name 对应的 map。 -function(library_register self name) +function(library_register self id) + if("${id}" MATCHES "::" OR NOT "${id}" MATCHES "^[A-Za-z0-9_+-]+$") + message(FATAL_ERROR "invalid library id '${id}' in namespace '${self}'") + endif() + __library_namespace_initialized("${self}" _initialized) + if(NOT _initialized) + message(FATAL_ERROR "namespace is not initialized: ${self}") + endif() + __library_full_name("${self}" "${id}" _full_name) __library_registry_id("${self}" _registry) - registry_add("${_registry}" "${name}") - registry_set("${_registry}" "${name}" NAME "${name}") + registry_has("${_registry}" "${_full_name}" _has) + if(_has) + message(FATAL_ERROR "duplicate library id '${id}' in namespace '${self}'") + endif() + __library_map_id("${_registry}" "${_full_name}" _map_id) + registry_add("${_registry}" "${_full_name}" "${_map_id}") + registry_set("${_registry}" "${_full_name}" ID "${id}") + registry_set("${_registry}" "${_full_name}" NAME "${_full_name}") + registry_set("${_registry}" "${_full_name}" FULL_NAME "${_full_name}") + registry_set("${_registry}" "${_full_name}" NAMESPACE "${self}") + registry_set("${_registry}" "${_full_name}" STORAGE_ID "${id}") + registry_set("${_registry}" "${_full_name}" RESOLVED_DEPENDENCIES "") + message(STATUS "[register] ${_full_name}") endfunction() - -# API: library_set( [value...]) -# 作用: 设置库对象属性。 -# 参数: self 是业务对象名称;name 是库对象名;key 是属性名;ARGN 是属性值。 -# 返回: 无。 -# 注意: 常用字段包括 GIT_URL、GIT_BRANCH、LOCAL_SOURCE_DIR、PATCH_FILES、CMAKE_OPTIONS、OTHER_USE_OPT;OTHER_USE_OPT 会在依赖方的 CMake configure 阶段自动追加。专用可选字段优先使用 library_set_find_package_scripts、library_set_cmake_source_subdir 和 library_set_patch_files。 function(library_set self name key) - __library_registry_id("${self}" _registry) - - if ("${key}" STREQUAL "CMAKE_OPTIONS" OR "${key}" STREQUAL "OTHER_USE_OPT") - # CMAKE_OPTIONS/OTHER_USE_OPT 可以传 CMake list,也可以传一段带引号的命令行片段。 - # 单参数命令行片段在 CMake 侧拆成 list 后再导出,Bash 侧只按分号恢复 argv,不按空格拆。 - set(_library_option_args "${ARGN}") - list(LENGTH _library_option_args _library_option_arg_count) - if (_library_option_arg_count EQUAL 1) - set(_library_option_text "${ARGN}") - separate_arguments(_library_option_args NATIVE_COMMAND "${_library_option_text}") - endif () - registry_set("${_registry}" "${name}" "${key}" "${_library_option_args}") - else () - registry_set("${_registry}" "${name}" "${key}" "${ARGN}") - endif () + __library_resolve_owner("${self}" "${name}" _full_name _namespace _registry) + if("${key}" STREQUAL "CMAKE_OPTIONS" OR "${key}" STREQUAL "OTHER_USE_OPT") + set(_option_args "${ARGN}") + list(LENGTH _option_args _option_count) + if(_option_count EQUAL 1) + separate_arguments(_option_args NATIVE_COMMAND "${ARGN}") + endif() + registry_set("${_registry}" "${_full_name}" "${key}" "${_option_args}") + else() + registry_set("${_registry}" "${_full_name}" "${key}" "${ARGN}") + endif() endfunction() - -# API: library_get( ) -# 作用: 读取库对象属性。 -# 参数: self 是业务对象名称;name 是库对象名;key 是属性名;out 是接收值的变量名。 -# 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: 读取结果已由 registry/map/codec 自动 decode。 function(library_get self name key out) - __library_registry_id("${self}" _registry) - registry_get("${_registry}" "${name}" "${key}" _value) + __library_resolve_owner("${self}" "${name}" _full_name _namespace _registry) + registry_get("${_registry}" "${_full_name}" "${key}" _value) set(${out} "${_value}" PARENT_SCOPE) endfunction() - -# API: library_set_find_package_scripts( ) -# 作用: 设置库对象的 find_package 前置初始化脚本内容和后置清理脚本内容。 -# 参数: self 是业务对象名称;name 是库对象名;init_script_content 是 init.cmake 内容;clear_script_content 是 clear.cmake 内容。 -# 返回: 无。 -# 注意: 这是可选属性,不在 library_register 中设置。内容写入 registry 节点 map,导出时由 registry 生成 nodes//init.cmake 和 clear.cmake。 function(library_set_find_package_scripts self name init_script_content clear_script_content) - __library_registry_id("${self}" _registry) - registry_set("${_registry}" "${name}" INIT_SCRIPT_CONTENT "${init_script_content}") - registry_set("${_registry}" "${name}" CLEAR_SCRIPT_CONTENT "${clear_script_content}") + library_set("${self}" "${name}" INIT_SCRIPT_CONTENT "${init_script_content}") + library_set("${self}" "${name}" CLEAR_SCRIPT_CONTENT "${clear_script_content}") endfunction() - - function(library_set_init_scripts self name init_script_content) - __library_registry_id("${self}" _registry) - registry_set("${_registry}" "${name}" INIT_SCRIPT_CONTENT "${init_script_content}") + library_set("${self}" "${name}" INIT_SCRIPT_CONTENT "${init_script_content}") endfunction() - - function(library_set_clear_scripts self name clear_script_content) - __library_registry_id("${self}" _registry) - registry_set("${_registry}" "${name}" CLEAR_SCRIPT_CONTENT "${clear_script_content}") + library_set("${self}" "${name}" CLEAR_SCRIPT_CONTENT "${clear_script_content}") endfunction() - - -# API: library_set_cmake_source_subdir( ) -# 作用: 设置源码缓存目录内部真正包含 CMakeLists.txt 的相对目录。 -# 参数: self 是业务对象名称;name 是库对象名;relative_dir 是相对源码根目录的路径,默认语义为空。 -# 返回: 无。 -# 注意: Bash 构建阶段读取 CMAKE_SOURCE_SUBDIR;为空时使用源码缓存根目录作为 cmake -S。 function(library_set_cmake_source_subdir self name relative_dir) - __library_registry_id("${self}" _registry) - registry_set("${_registry}" "${name}" CMAKE_SOURCE_SUBDIR "${relative_dir}") + library_set("${self}" "${name}" CMAKE_SOURCE_SUBDIR "${relative_dir}") endfunction() - -# API: library_set_patch_files( [files...]) -# 作用: 设置 CMake 配置前要应用的本地 patch 文件列表,覆盖已有 patch 队列。 -# 参数: self 是业务对象名称;name 是库对象名;files 是 patch 文件路径列表。 -# 返回: 无。 -# 注意: 兼容旧接口;新代码优先使用 library_add_patch_file/library_add_patch_url。 function(library_set_patch_files self name) - __library_registry_id("${self}" _registry) - set(_library_patch_items) - foreach (_library_patch_file IN LISTS ARGN) - list(APPEND _library_patch_items "file|${_library_patch_file}") - endforeach () - registry_set("${_registry}" "${name}" PATCH_FILES "${ARGN}") - registry_set("${_registry}" "${name}" PATCH_ITEMS "${_library_patch_items}") + set(_patch_items "") + foreach(_patch_file IN LISTS ARGN) + list(APPEND _patch_items "file|${_patch_file}") + endforeach() + library_set("${self}" "${name}" PATCH_FILES "${ARGN}") + library_set("${self}" "${name}" PATCH_ITEMS "${_patch_items}") endfunction() - -# API: library_add_patch_file( ) -# 作用: 按调用顺序追加本地 patch 文件。 -# 参数: self 是业务对象名称;name 是库对象名;file 是本地 patch 路径。 -# 返回: 无。 -# 注意: 多个 patch 按注册顺序在 build/configure 前统一应用。 function(library_add_patch_file self name) - __library_registry_id("${self}" _registry) - registry_get("${_registry}" "${name}" PATCH_ITEMS _library_patch_items) - foreach (_library_patch_file IN LISTS ARGN) - list(APPEND _library_patch_items "file|${_library_patch_file}") - endforeach () - registry_set("${_registry}" "${name}" PATCH_ITEMS "${_library_patch_items}") + library_get("${self}" "${name}" PATCH_ITEMS _patch_items) + foreach(_patch_file IN LISTS ARGN) + list(APPEND _patch_items "file|${_patch_file}") + endforeach() + library_set("${self}" "${name}" PATCH_ITEMS "${_patch_items}") endfunction() - -# API: library_add_patch_url( [sha256]) -# 作用: 按调用顺序追加网络 patch;Bash 端下载到 patch 缓存后按本地 patch 应用。 -# 参数: self 是业务对象名称;name 是库对象名;url 是 patch 地址;filename 是缓存文件名;sha256 是可选校验值。 -# 返回: 无。 -# 注意: sha256 为空时不校验,适合临时开发;正式依赖建议固定校验值。 function(library_add_patch_url self name url filename) - __library_registry_id("${self}" _registry) - set(_library_patch_sha256 "${ARGN}") - registry_get("${_registry}" "${name}" PATCH_ITEMS _library_patch_items) - list(APPEND _library_patch_items "url|${url}|${filename}|${_library_patch_sha256}") - registry_set("${_registry}" "${name}" PATCH_ITEMS "${_library_patch_items}") + set(_sha256 "${ARGN}") + library_get("${self}" "${name}" PATCH_ITEMS _patch_items) + list(APPEND _patch_items "url|${url}|${filename}|${_sha256}") + library_set("${self}" "${name}" PATCH_ITEMS "${_patch_items}") endfunction() - -# API: library_depends( [deps...]) -# 作用: 设置 name 依赖的一组库对象。 -# 参数: self 是业务对象名称;name 是依赖方;ARGN 是被依赖方列表。 -# 返回: 无。 -# 注意: 边方向是 name -> dep;构建顺序中 dep 会在 name 前面。 function(library_depends self name) - __library_registry_id("${self}" _registry) - - foreach (_dep IN LISTS ARGN) - registry_depends("${_registry}" "${name}" "${_dep}") - endforeach () + __library_resolve_owner("${self}" "${name}" _full_name _source_namespace _registry) + registry_get("${_registry}" "${_full_name}" RESOLVED_DEPENDENCIES _dependencies) + foreach(_reference IN LISTS ARGN) + library_resolve("${_source_namespace}" "${_reference}" _dependency) + list(APPEND _dependencies "${_dependency}") + registry_depends("${_registry}" "${_full_name}" "${_dependency}") + message(STATUS "[depends] ${_full_name} -> ${_dependency}") + endforeach() + list(REMOVE_DUPLICATES _dependencies) + registry_set("${_registry}" "${_full_name}" RESOLVED_DEPENDENCIES "${_dependencies}") +endfunction() +function(library_dependencies self name out) + library_get("${self}" "${name}" RESOLVED_DEPENDENCIES _dependencies) + set(${out} "${_dependencies}" PARENT_SCOPE) endfunction() - -# API: library_items( ) -# 作用: 返回注册过的库对象列表。 -# 参数: self 是业务对象名称;out 是接收列表的变量名。 -# 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: 顺序是注册顺序,不是构建顺序。 function(library_items self out) __library_registry_id("${self}" _registry) registry_items("${_registry}" _items) set(${out} "${_items}" PARENT_SCOPE) endfunction() - -# API: library_build_order( ) -# 作用: 返回依赖优先的构建顺序。 -# 参数: self 是业务对象名称;out 是接收构建顺序列表的变量名。 -# 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: 调用前应先 library_assert_acyclic;本函数不额外判环。 +function(__library_collect_graph_nodes self out) + library_items("${self}" _queue) + set(_nodes "") + while(_queue) + list(POP_FRONT _queue _item) + list(FIND _nodes "${_item}" _index) + if(NOT _index EQUAL -1) + continue() + endif() + list(APPEND _nodes "${_item}") + library_get("${self}" "${_item}" RESOLVED_DEPENDENCIES _dependencies) + list(APPEND _queue ${_dependencies}) + endwhile() + set(${out} "${_nodes}" PARENT_SCOPE) +endfunction() +function(__library_copy_to_registry self full_name target_registry) + __library_split_full_name("${full_name}" _namespace _id) + __library_registry_id("${_namespace}" _source_registry) + __library_map_id("${target_registry}" "${full_name}" _target_map_id) + registry_add("${target_registry}" "${full_name}" "${_target_map_id}") + registry_get_map_id("${_source_registry}" "${full_name}" _source_map_id) + map_keys("${_source_map_id}" _keys) + foreach(_key IN LISTS _keys) + map_get("${_source_map_id}" "${_key}" _value) + registry_set("${target_registry}" "${full_name}" "${_key}" "${_value}") + endforeach() + __library_globals_id("${_namespace}" _source_globals) + map_keys("${_source_globals}" _global_keys) + registry_get_map_id("${target_registry}" "${full_name}" _target_map_id) + foreach(_key IN LISTS _global_keys) + map_has("${_target_map_id}" "${_key}" _has) + if(NOT _has) + map_get("${_source_globals}" "${_key}" _value) + registry_set("${target_registry}" "${full_name}" "${_key}" "${_value}") + endif() + endforeach() +endfunction() +function(__library_build_registry self out) + __library_export_registry_id("${self}" _registry) + registry_create("${_registry}") + __library_collect_graph_nodes("${self}" _nodes) + foreach(_item IN LISTS _nodes) + __library_copy_to_registry("${self}" "${_item}" "${_registry}") + endforeach() + foreach(_item IN LISTS _nodes) + library_get("${self}" "${_item}" RESOLVED_DEPENDENCIES _dependencies) + foreach(_dependency IN LISTS _dependencies) + registry_depends("${_registry}" "${_item}" "${_dependency}") + endforeach() + endforeach() + set(${out} "${_registry}" PARENT_SCOPE) +endfunction() function(library_build_order self out) - __library_registry_id("${self}" _registry) + __library_build_registry("${self}" _registry) + registry_assert_acyclic("${_registry}") registry_build_order("${_registry}" _order) set(${out} "${_order}" PARENT_SCOPE) endfunction() - -# API: library_assert_acyclic() -# 作用: 断言库依赖图无环。 -# 参数: self 是业务对象名称。 -# 返回: 无;有环时 FATAL_ERROR。 -# 注意: 直接复用 registry_assert_acyclic。 function(library_assert_acyclic self) - __library_registry_id("${self}" _registry) + __library_build_registry("${self}" _registry) registry_assert_acyclic("${_registry}") endfunction() +function(__library_get_effective_dir self name dir_key root_key out) + __library_resolve_owner("${self}" "${name}" _full_name _namespace _registry) + registry_get("${_registry}" "${_full_name}" "${dir_key}" _dir) + if("${_dir}" STREQUAL "") + library_get_global("${_namespace}" "${root_key}" _root) + registry_get("${_registry}" "${_full_name}" ID _id) + set(_dir "${_root}/${_id}") + endif() + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() +function(library_set_source_dir self name dir) + library_set("${self}" "${name}" SOURCE_DIR "${dir}") +endfunction() +function(library_set_build_dir self name dir) + library_set("${self}" "${name}" BUILD_DIR "${dir}") +endfunction() +function(library_set_install_dir self name dir) + library_set("${self}" "${name}" INSTALL_DIR "${dir}") +endfunction() +function(library_get_effective_source_dir self name out) + __library_get_effective_dir("${self}" "${name}" SOURCE_DIR SOURCE_CACHE_ROOT _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() +function(library_get_effective_build_dir self name out) + __library_get_effective_dir("${self}" "${name}" BUILD_DIR BUILD_CACHE_ROOT _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() +function(library_get_effective_install_dir self name out) + __library_get_effective_dir("${self}" "${name}" INSTALL_DIR INSTALL_CACHE_ROOT _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() +function(library_set_patch_cache_dir self name dir) + library_set("${self}" "${name}" PATCH_CACHE_DIR "${dir}") +endfunction() +function(library_set_log_dir self name dir) + library_set("${self}" "${name}" LOG_DIR "${dir}") +endfunction() +function(library_set_local_source_dir self name dir) + library_set("${self}" "${name}" LOCAL_SOURCE_DIR "${dir}") +endfunction() +function(library_get_effective_patch_cache_dir self name out) + __library_resolve_owner("${self}" "${name}" _full_name _namespace _registry) + registry_get("${_registry}" "${_full_name}" PATCH_CACHE_DIR _dir) + if("${_dir}" STREQUAL "") + library_get_global("${_namespace}" PATCH_CACHE_ROOT _patch_root) + registry_get("${_registry}" "${_full_name}" ID _id) + if("${_patch_root}" STREQUAL "") + library_get_global("${_namespace}" SOURCE_CACHE_ROOT _source_root) + set(_dir "${_source_root}/${_id}_patch") + else() + set(_dir "${_patch_root}/${_id}") + endif() + endif() + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() +function(library_get_effective_log_dir self name out) + __library_resolve_owner("${self}" "${name}" _full_name _namespace _registry) + registry_get("${_registry}" "${_full_name}" LOG_DIR _dir) + if("${_dir}" STREQUAL "") + library_get_global("${_namespace}" LOG_CACHE_ROOT _log_root) + __library_storage_path("${_full_name}" _storage_path) + if("${_log_root}" STREQUAL "") + __library_data_export_dir("${self}" _data_dir) + set(_dir "${_data_dir}/registry/nodes/${_storage_path}") + else() + set(_dir "${_log_root}/${_storage_path}") + endif() + endif() + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() +function(library_get_effective_cmake_cache_dir self name out) + library_get_effective_build_dir("${self}" "${name}" _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() +function(library_get_effective_data_export_dir self out) + __library_data_export_dir("${self}" _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() # API: library_cache_operations( ) # 作用: 调用 Bash 端 list-ops,缓存并返回当前业务对象可用 action 列表。 @@ -460,31 +675,30 @@ endfunction() # 作用: 将业务层数据导出成 Bash 可读取的目录。 # 参数: self 是业务对象名称;dir 是输出目录。 # 返回: 无。 -# 注意: 输出 registry/、globals.txt、build_order.txt、operations.txt、dependencies/;每个库的 map/init/clear 统一在 registry/nodes//。 +# 注意: 输出 registry/、globals.txt、build_order.txt、operations.txt、dependencies/;每个库的 map/init/clear 统一在 registry/nodes///。 function(library_export_dir self dir) - __library_registry_id("${self}" _registry) __library_globals_id("${self}" _globals) __library_operations_id("${self}" _operations) - + __library_build_registry("${self}" _registry) file(MAKE_DIRECTORY "${dir}") - file(MAKE_DIRECTORY "${dir}/dependencies") - + file(GLOB _legacy_node_dirs LIST_DIRECTORIES TRUE "${dir}/registry/nodes/__library_map_*") + if(_legacy_node_dirs) + file(REMOVE_RECURSE ${_legacy_node_dirs}) + endif() registry_serialize_dir("${_registry}" "${dir}/registry") map_serialize_file("${_globals}" "${dir}/globals.txt") list_serialize_file("${_operations}" "${dir}/operations.txt") - registry_assert_acyclic("${_registry}") registry_build_order("${_registry}" _order) string(REPLACE ";" "\n" _order_text "${_order}") codec_write_text_file("${dir}/build_order.txt" "${_order_text}\n") - registry_items("${_registry}" _items) - foreach (_item IN LISTS _items) + foreach(_item IN LISTS _items) registry_collect_deps("${_registry}" "${_item}" _deps) string(REPLACE ";" "\n" _deps_text "${_deps}") - codec_write_text_file("${dir}/dependencies/${_item}.txt" "${_deps_text}\n") - - endforeach () + registry_node_dir("${_registry}" "${_item}" "${dir}/registry" _node_dir) + codec_write_text_file("${_node_dir}/dependencies.txt" "${_deps_text}\n") + endforeach() endfunction() @@ -492,12 +706,14 @@ endfunction() # 作用: 返回 library 默认数据导出目录。 # 参数: self 是业务对象名称;out 是接收目录路径的变量名。 # 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: 优先使用 globals 中的 DATA_EXPORT_DIR;为空时使用 ${CMAKE_BINARY_DIR}/library_data/。 +# 注意: 优先使用 globals 中的 DATA_EXPORT_DIR;为空时使用 INSTALL_CACHE_ROOT 同级 library_data。 function(__library_data_export_dir self out) library_get_global("${self}" DATA_EXPORT_DIR _dir) - if ("${_dir}" STREQUAL "") - set(_dir "${CMAKE_BINARY_DIR}/library_data/${self}") - endif () + if("${_dir}" STREQUAL "") + library_get_global("${self}" INSTALL_CACHE_ROOT _install_root) + get_filename_component(_ctx_root "${_install_root}" DIRECTORY) + set(_dir "${_ctx_root}/library_data") + endif() set(${out} "${_dir}" PARENT_SCOPE) endfunction() @@ -507,110 +723,72 @@ endfunction() # 返回: 通过 PARENT_SCOPE 设置 out。 # 注意: 输出顺序是依赖优先;ARGN 为空时使用全部注册对象。 function(__library_environment_order self out) - __library_registry_id("${self}" _registry) + __library_build_registry("${self}" _registry) registry_assert_acyclic("${_registry}") - set(_requested "${ARGN}") - if ("${_requested}" STREQUAL "") - registry_items("${_registry}" _requested) - endif () - + if("${_requested}" STREQUAL "") + library_items("${self}" _requested) + else() + set(_resolved_requested "") + foreach(_item IN LISTS _requested) + library_resolve("${self}" "${_item}" _resolved) + list(APPEND _resolved_requested "${_resolved}") + endforeach() + set(_requested "${_resolved_requested}") + endif() set(_wanted "") - foreach (_item IN LISTS _requested) + foreach(_item IN LISTS _requested) registry_collect_deps("${_registry}" "${_item}" _deps) - foreach (_dep IN LISTS _deps) - list(FIND _wanted "${_dep}" _dep_index) - if (_dep_index EQUAL -1) - list(APPEND _wanted "${_dep}") - endif () - endforeach () - list(FIND _wanted "${_item}" _item_index) - if (_item_index EQUAL -1) - list(APPEND _wanted "${_item}") - endif () - endforeach () - + list(APPEND _wanted ${_deps} "${_item}") + endforeach() + list(REMOVE_DUPLICATES _wanted) registry_build_order("${_registry}" _build_order) set(_result "") - foreach (_item IN LISTS _build_order) - list(FIND _wanted "${_item}" _wanted_index) - if (NOT _wanted_index EQUAL -1) + foreach(_item IN LISTS _build_order) + list(FIND _wanted "${_item}" _index) + if(NOT _index EQUAL -1) list(APPEND _result "${_item}") - endif () - endforeach () - + endif() + endforeach() set(${out} "${_result}" PARENT_SCOPE) endfunction() # MACRO API: library_init_environment( [items...]) -# 作用: 对一组库对象递归 include 其 init.cmake,用于 find_package 前准备变量环境。 -# 参数: self 是业务对象名称;ARGN 是库 id 列表,空列表表示全部库。 +# 作用: 对一组库对象递归执行其 init 脚本,用于 find_package 前准备变量环境。 +# 参数: self 是业务对象名称;ARGN 是库完整名称列表,空列表表示全部库。 # 返回: 无。 -# 注意: 这是 macro,不是 function;init.cmake 中 set 的变量会作用到调用者当前作用域。顺序是依赖优先。 -#macro(library_init_environment self) -# __library_data_export_dir("${self}" _library_env_data_dir) -# library_export_dir("${self}" "${_library_env_data_dir}") -# __library_environment_order("${self}" _library_env_order ${ARGN}) -# __library_registry_id("${self}" _library_env_registry) -# -# foreach (_library_env_item IN LISTS _library_env_order) -# registry_node_dir("${_library_env_registry}" "${_library_env_item}" "${_library_env_data_dir}/registry" _library_env_node_dir) -# set(_init_file "${_library_env_node_dir}/init.cmake") -# if (EXISTS "${_init_file}" AND NOT IS_DIRECTORY "${_init_file}") -# include("${_init_file}") -# message("加载 init.cmake: ${_init_file}") -# else () -# message(FATAL_ERROR "找不到 init.cmake: ${_init_file}") -# endif () -# endforeach () -#endmacro() - -function(library_init_environment self list_name) - __library_data_export_dir("${self}" _library_env_data_dir) - library_export_dir("${self}" "${_library_env_data_dir}") +# 注意: 这是 macro,脚本中的 set/unset 作用于调用者当前作用域;顺序是依赖优先。 +macro(library_init_environment self) __library_environment_order("${self}" _library_env_order ${ARGN}) - __library_registry_id("${self}" _library_env_registry) - set(ret) - foreach (_library_env_item IN LISTS _library_env_order) - registry_node_dir("${_library_env_registry}" "${_library_env_item}" "${_library_env_data_dir}/registry" _library_env_node_dir) - set(_init_file "${_library_env_node_dir}/init.cmake") - if (EXISTS "${_init_file}" AND NOT IS_DIRECTORY "${_init_file}") - # include("${_init_file}") - list(APPEND ret ${_init_file}) - # message("加载 init.cmake: ${_init_file}") - else () - message(FATAL_ERROR "找不到 init.cmake: ${_init_file}") - endif () - endforeach () - set(${list_name} "${ret}" PARENT_SCOPE) -endfunction() - + foreach(_library_env_item IN LISTS _library_env_order) + library_get("${self}" "${_library_env_item}" INIT_SCRIPT_CONTENT _library_env_script) + if(NOT "${_library_env_script}" STREQUAL "") + cmake_language(EVAL CODE "${_library_env_script}") + endif() + endforeach() + unset(_library_env_script) + unset(_library_env_item) + unset(_library_env_order) +endmacro() # MACRO API: library_clear_environment( [items...]) -# 作用: 对一组库对象递归 include 其 clear.cmake,用于 find_package 后清理变量环境。 -# 参数: self 是业务对象名称;ARGN 是库 id 列表,空列表表示全部库。 +# 作用: 对一组库对象递归执行其 clear 脚本,用于 find_package 后清理变量环境。 +# 参数: self 是业务对象名称;ARGN 是库完整名称列表,空列表表示全部库。 # 返回: 无。 -# 注意: 这是 macro,不是 function;clear.cmake 中 unset/set 会作用到调用者当前作用域。顺序是 init 的反向。 -macro(library_clear_environment self list_name) - __library_data_export_dir("${self}" _library_env_data_dir) - library_export_dir("${self}" "${_library_env_data_dir}") +# 注意: 这是 macro,脚本中的 set/unset 作用于调用者当前作用域;顺序是 init 的反向。 +macro(library_clear_environment self) __library_environment_order("${self}" _library_env_order ${ARGN}) list(REVERSE _library_env_order) - __library_registry_id("${self}" _library_env_registry) - set(ret) - foreach (_library_env_item IN LISTS _library_env_order) - registry_node_dir("${_library_env_registry}" "${_library_env_item}" "${_library_env_data_dir}/registry" _library_env_node_dir) - set(_clear_file "${_library_env_node_dir}/clear.cmake") - if (EXISTS "${_clear_file}" AND NOT IS_DIRECTORY "${_clear_file}") - # include("${_clear_file}") - list(APPEND ret ${_clear_file}) - else () - message(FATAL_ERROR "找不到 clear.cmake: ${_clear_file}") - endif () - endforeach () - set(${list_name} "${ret}" PARENT_SCOPE) + foreach(_library_env_item IN LISTS _library_env_order) + library_get("${self}" "${_library_env_item}" CLEAR_SCRIPT_CONTENT _library_env_script) + if(NOT "${_library_env_script}" STREQUAL "") + cmake_language(EVAL CODE "${_library_env_script}") + endif() + endforeach() + unset(_library_env_script) + unset(_library_env_item) + unset(_library_env_order) endmacro() - # INTERNAL: __library_target_folder_root( ) # 作用: 计算当前 library 业务对象生成的 CMake target 在 IDE 中使用的 Folder 根路径。 # 参数: self 是业务对象名称;out 是接收 Folder 根路径的变量名。 @@ -683,42 +861,31 @@ function(library_add_item_operation_targets self prefix dir) endfunction() -# API: library_is_installed_with_rely( [items...]) -# 作用: 判断一组库对象及其递归依赖库是否全部 install 成功。 -# 参数: self 是业务对象名称;out 是接收 TRUE/FALSE 的变量名;ARGN 是库 id 列表,空列表表示全部库。 +# API: library_is_installed_with_rely( ) +# 作用: 判断一组完整库名及其递归依赖库是否全部 install 成功。 +# 参数: out 是接收 TRUE/FALSE 的变量名;ARGN 是完整库名列表。 # 返回: 通过 PARENT_SCOPE 设置 out。 -# 注意: 判断依据是 Bash 端写出的 INSTALL_CACHE_ROOT//install.success。 -function(library_is_installed_with_rely self out) - __library_registry_id("${self}" _registry) - __library_data_export_dir("${self}" _data_dir) - - set(_requested "${ARGN}") - if ("${_requested}" STREQUAL "") - registry_items("${_registry}" _requested) - endif () - - set(_items "") - foreach (_item IN LISTS _requested) - registry_collect_deps("${_registry}" "${_item}" _deps) - - foreach (_dep IN LISTS _deps) - list(APPEND _items "${_dep}") - endforeach () - - list(APPEND _items "${_item}") - endforeach () - - list(REMOVE_DUPLICATES _items) - +# 注意: 每个库名必须包含命名空间,例如 global::zlib。 +function(library_is_installed_with_rely out) + set(_queue "${ARGN}") + set(_visited "") set(_installed TRUE) - library_get_global("${self}" INSTALL_CACHE_ROOT _install_cache_root) - - foreach (_item IN LISTS _items) - if (NOT EXISTS "${_install_cache_root}/${_item}/install.success") + while(_queue) + list(POP_FRONT _queue _item) + list(FIND _visited "${_item}" _visited_index) + if(NOT _visited_index EQUAL -1) + continue() + endif() + list(APPEND _visited "${_item}") + __library_split_full_name("${_item}" _namespace _id) + library_resolve("${_namespace}" "${_item}" _full_name) + library_get("${_namespace}" "${_full_name}" RESOLVED_DEPENDENCIES _dependencies) + list(APPEND _queue ${_dependencies}) + library_get_effective_install_dir("${_namespace}" "${_full_name}" _install_dir) + if(NOT EXISTS "${_install_dir}/install.success") set(_installed FALSE) break() - endif () - endforeach () - + endif() + endwhile() set(${out} "${_installed}" PARENT_SCOPE) endfunction() \ No newline at end of file diff --git a/0_cmake_library/cmake_library/scripts/library/library.sh b/0_cmake_library/cmake_library/scripts/library/library.sh index 4f43217..1f8bedc 100644 --- a/0_cmake_library/cmake_library/scripts/library/library.sh +++ b/0_cmake_library/cmake_library/scripts/library/library.sh @@ -147,30 +147,14 @@ library_registry_graph() { printf '%s/registry/graph.txt' "$LIBRARY_DATA_DIR" } -library_registry_map_id() { +library_target_storage_path() { local target="$1" - local line rest node data - - while IFS= read -r line || [[ -n "$line" ]]; do - line="$(library_strip_line_cr "$line")" - [[ "$line" == N\|* ]] || continue - rest="${line#N|}" - node="${rest%%|*}" - data="${rest#*|}" - if [[ "$node" == "$target" ]]; then - printf '%s' "$data" - return 0 - fi - done <"$(library_registry_graph)" - - printf '' + printf '%s' "${target//:://}" } library_target_node_dir() { local target="$1" - local map_id - map_id="$(library_registry_map_id "$target")" - printf '%s/registry/nodes/%s' "$LIBRARY_DATA_DIR" "$map_id" + printf '%s/registry/nodes/%s' "$LIBRARY_DATA_DIR" "$(library_target_storage_path "$target")" } library_target_map_file() { @@ -178,6 +162,11 @@ library_target_map_file() { printf '%s/map.txt' "$(library_target_node_dir "$target")" } +library_target_dependencies_file() { + local target="$1" + printf '%s/dependencies.txt' "$(library_target_node_dir "$target")" +} + library_registry_get() { local target="$1" local key="$2" @@ -233,11 +222,11 @@ library_resolve_targets() { requested=("$@") for target in "${requested[@]}"; do want["$target"]=1 - if [[ -f "$LIBRARY_DATA_DIR/dependencies/$target.txt" ]]; then + if [[ -f "$(library_target_dependencies_file "$target")" ]]; then while IFS= read -r dep || [[ -n "$dep" ]]; do dep="$(library_strip_line_cr "$dep")" [[ -n "$dep" ]] && want["$dep"]=1 - done <"$LIBRARY_DATA_DIR/dependencies/$target.txt" + done <"$(library_target_dependencies_file "$target")" fi done @@ -273,11 +262,11 @@ library_resolve_dependencies() { declare -A want=() for target in "$@"; do - if [[ -f "$LIBRARY_DATA_DIR/dependencies/$target.txt" ]]; then + if [[ -f "$(library_target_dependencies_file "$target")" ]]; then while IFS= read -r dep || [[ -n "$dep" ]]; do dep="$(library_strip_line_cr "$dep")" [[ -n "$dep" ]] && want["$dep"]=1 - done <"$LIBRARY_DATA_DIR/dependencies/$target.txt" + done <"$(library_target_dependencies_file "$target")" fi done @@ -297,16 +286,40 @@ library_cache_root() { printf '%s' "$value" } +library_target_id() { + local target="$1" + library_registry_get "$target" ID +} + +library_target_cache_root() { + local target="$1" + local key="$2" + library_target_get_or_global "$target" "$key" +} + +library_target_effective_dir() { + local target="$1" + local dir_key="$2" + local root_key="$3" + local dir + dir="$(library_registry_get "$target" "$dir_key")" + if [[ -n "$dir" ]]; then + printf '%s' "$dir" + return + fi + printf '%s/%s' "$(library_target_cache_root "$target" "$root_key")" "$(library_target_id "$target")" +} + library_source_dir() { - printf '%s/%s' "$(library_cache_root SOURCE_CACHE_ROOT)" "$1" + library_target_effective_dir "$1" SOURCE_DIR SOURCE_CACHE_ROOT } library_build_dir() { - printf '%s/%s' "$(library_cache_root BUILD_CACHE_ROOT)" "$1" + library_target_effective_dir "$1" BUILD_DIR BUILD_CACHE_ROOT } library_install_dir() { - printf '%s/%s' "$(library_cache_root INSTALL_CACHE_ROOT)" "$1" + library_target_effective_dir "$1" INSTALL_DIR INSTALL_CACHE_ROOT } library_lock_file() { @@ -322,10 +335,26 @@ library_lock_file() { printf '%s/%s.success' "$dir" "$step" } +library_log_dir() { + local target="$1" + local dir root + dir="$(library_registry_get "$target" LOG_DIR)" + if [[ -n "$dir" ]]; then + printf '%s' "$dir" + return + fi + root="$(library_target_get_or_global "$target" LOG_CACHE_ROOT)" + if [[ -n "$root" ]]; then + printf '%s/%s' "$root" "$(library_target_storage_path "$target")" + return + fi + library_target_node_dir "$target" +} + library_log_file() { local step="$1" local target="$2" - printf '%s/%s.log' "$(library_target_node_dir "$target")" "$step" + printf '%s/%s.log' "$(library_log_dir "$target")" "$step" } library_log() { @@ -406,9 +435,19 @@ library_parent_dir() { library_patch_cache_root() { local target="$1" - local source_cache_root - source_cache_root="$(library_cache_root SOURCE_CACHE_ROOT)" - printf '%s/%s_patch' "$source_cache_root" "$target" + local dir root source_cache_root + dir="$(library_registry_get "$target" PATCH_CACHE_DIR)" + if [[ -n "$dir" ]]; then + printf '%s' "$dir" + return + fi + root="$(library_target_get_or_global "$target" PATCH_CACHE_ROOT)" + if [[ -n "$root" ]]; then + printf '%s/%s' "$root" "$(library_target_id "$target")" + return + fi + source_cache_root="$(library_target_cache_root "$target" SOURCE_CACHE_ROOT)" + printf '%s/%s_patch' "$source_cache_root" "$(library_target_id "$target")" } library_sha256_file() { @@ -652,6 +691,44 @@ library_build_config() { printf '%s' "$value" } +library_normalize_existing_dir() { + local dir="$1" + if [[ -d "$dir" ]]; then + (cd "$dir" && (pwd -W 2>/dev/null || pwd)) + return + fi + printf '%s' "$dir" +} + +library_cmake_cache_home_directory() { + local cache="$1" + if [[ -f "$cache" ]]; then + sed -n 's/^CMAKE_HOME_DIRECTORY:INTERNAL=//p' "$cache" | tail -n 1 + fi +} + +library_prepare_build_dir_for_source() { + local target="$1" + local source="$2" + local build="$3" + local cache old_source new_source + cache="$build/CMakeCache.txt" + if [[ ! -f "$cache" ]]; then + return + fi + old_source="$(library_cmake_cache_home_directory "$cache")" + if [[ -z "$old_source" ]]; then + return + fi + new_source="$(library_normalize_existing_dir "$source")" + if [[ "${old_source,,}" == "${new_source,,}" ]]; then + return + fi + library_log build "$target" "build cache source changed, remove build dir: old_source=$old_source new_source=$new_source build=$build" + rm -rf "$build" + rm -f "$(library_lock_file build "$target")" +} + library_build_one() { local target="$1" local source source_root source_subdir build install cmake_cmd generator platform toolset toolchain build_type options configure_preset build_preset config dep dep_options @@ -665,12 +742,14 @@ library_build_one() { install="$(library_install_dir "$target")" cmake_cmd="$(library_cmake_command)" + library_prepare_build_dir_for_source "$target" "$source" "$build" if library_is_success build "$target"; then library_log build "$target" 'build cache already successful, skip' return 0 fi library_prepare_patched_source_one "$target" "$source_root" + library_prepare_build_dir_for_source "$target" "$source" "$build" mkdir -p "$build" "$install" generator="$(library_target_get_or_global "$target" CMAKE_GENERATOR)" platform="$(library_target_get_or_global "$target" CMAKE_GENERATOR_PLATFORM)" diff --git a/0_cmake_library/cmake_library/test/composite/registry/registry_test.cmake b/0_cmake_library/cmake_library/test/composite/registry/registry_test.cmake index cd673b2..e617c4e 100644 --- a/0_cmake_library/cmake_library/test/composite/registry/registry_test.cmake +++ b/0_cmake_library/cmake_library/test/composite/registry/registry_test.cmake @@ -98,7 +98,7 @@ test_assert_contains("${_mermaid}" " app --> util") test_assert_contains("${_mermaid}" " plugin --> app") test_write_file_strequal("libs/mermaid.mmd" "${_mermaid}" _registry_mermaid_file) -# 分层目录序列化:graph.txt 存外层 graph,nodes//map.txt 存每个节点的属性 map。 +# 分层目录序列化:graph.txt 存外层 graph,nodes//map.txt 存每个节点的属性 map。 test_output_path("libs/registry_dir" _registry_dir) file(REMOVE_RECURSE "${_registry_dir}") registry_serialize_dir(registry_test_libs "${_registry_dir}") @@ -152,7 +152,7 @@ test_assert_list_before(_loaded_order core util) test_assert_list_before(_loaded_order util app) test_assert_list_before(_loaded_order app plugin) -# 节点目录脚本投影:map.txt、init.cmake、clear.cmake 必须在同一个 nodes// 目录。 +# 节点目录脚本投影:map.txt、init.cmake、clear.cmake 必须在同一个 nodes// 目录。 set(_registry_init_script "set(REGISTRY_TEST_VALUE \"a;b|c%\")\n") set(_registry_clear_script "unset(REGISTRY_TEST_VALUE)\n") registry_create(registry_test_scripts) diff --git a/0_cmake_library/cmake_library/test/domain/library/library_namespace_test.cmake b/0_cmake_library/cmake_library/test/domain/library/library_namespace_test.cmake new file mode 100644 index 0000000..5dadf55 --- /dev/null +++ b/0_cmake_library/cmake_library/test/domain/library/library_namespace_test.cmake @@ -0,0 +1,105 @@ +include("${CMAKE_CURRENT_LIST_DIR}/../../test_common.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/../../../domain/library/library.cmake") +test_set_output_dir("domain/library_namespace") +test_section("library namespace api") +set(_root "${TEST_OUTPUT_DIR}/cache") +library_create(ns_case "${_root}") +library_create(ns_case::image "${_root}") +library_create(ns_case::network "${_root}") +library_create(ns_case::graphics "${_root}") +library_create(ns_case::graphics::osgearth "${_root}") +library_register(ns_case base) +library_register(ns_case::image png) +library_register(ns_case::network curl) +library_register(ns_case::graphics renderer) +library_register(ns_case::graphics::osgearth engine) +library_namespace_depends(ns_case::graphics image network) +library_namespace_dependencies(ns_case::graphics _namespace_dependencies) +test_assert_strequal("${_namespace_dependencies}" "ns_case::image;ns_case::network") +library_resolve(ns_case::graphics png _resolved_png) +test_assert_strequal("${_resolved_png}" "ns_case::image::png") +library_resolve(ns_case::graphics ns_case::network::curl _resolved_curl) +test_assert_strequal("${_resolved_curl}" "ns_case::network::curl") +library_resolve(ns_case::graphics base _resolved_base) +test_assert_strequal("${_resolved_base}" "ns_case::base") +library_depends(ns_case::graphics renderer png ns_case::network::curl base) +library_dependencies(ns_case::graphics renderer _renderer_dependencies) +test_assert_strequal("${_renderer_dependencies}" "ns_case::image::png;ns_case::network::curl;ns_case::base") +library_depends(ns_case::graphics::osgearth engine ns_case::graphics::renderer) +library_build_order(ns_case::graphics::osgearth _order) +test_assert_list_before(_order ns_case::image::png ns_case::graphics::renderer) +test_assert_list_before(_order ns_case::network::curl ns_case::graphics::renderer) +test_assert_list_before(_order ns_case::base ns_case::graphics::renderer) +test_assert_list_before(_order ns_case::graphics::renderer ns_case::graphics::osgearth::engine) +test_output_path("export" _export_dir) +library_export_dir(ns_case::graphics::osgearth "${_export_dir}") +file(READ "${_export_dir}/registry/graph.txt" _graph_text) +test_assert_contains("${_graph_text}" "N|ns_case::graphics::osgearth::engine|") +test_assert_contains("${_graph_text}" "E|ns_case::graphics::renderer|ns_case::image::png|") +test_assert_contains("${_graph_text}" "E|ns_case::graphics::osgearth::engine|ns_case::graphics::renderer|") +set(_runtime_fixture_root "${TEST_OUTPUT_DIR}/runtime_fixture") +file(REMOVE_RECURSE "${_runtime_fixture_root}") +foreach(_runtime_name IN ITEMS image_png graphics_png engine) + file(MAKE_DIRECTORY "${_runtime_fixture_root}/${_runtime_name}") + file(WRITE "${_runtime_fixture_root}/${_runtime_name}/payload.txt" "${_runtime_name}\n") + file(WRITE "${_runtime_fixture_root}/${_runtime_name}/CMakeLists.txt" "cmake_minimum_required(VERSION 3.19)\nproject(${_runtime_name} NONE)\ninstall(FILES \"\${CMAKE_CURRENT_LIST_DIR}/payload.txt\" DESTINATION \".\")\n") +endforeach() +library_create(ns_runtime "${TEST_OUTPUT_DIR}/runtime_cache") +library_create(ns_runtime::image "${TEST_OUTPUT_DIR}/runtime_cache") +library_create(ns_runtime::graphics "${TEST_OUTPUT_DIR}/runtime_cache") +library_create(ns_runtime::graphics::osgearth "${TEST_OUTPUT_DIR}/runtime_cache") +library_register(ns_runtime::image png) +library_set(ns_runtime::image png LOCAL_SOURCE_DIR "${_runtime_fixture_root}/image_png") +library_register(ns_runtime::graphics png) +library_set(ns_runtime::graphics png LOCAL_SOURCE_DIR "${_runtime_fixture_root}/graphics_png") +library_register(ns_runtime::graphics::osgearth engine) +library_set(ns_runtime::graphics::osgearth engine LOCAL_SOURCE_DIR "${_runtime_fixture_root}/engine") +library_namespace_depends(ns_runtime::graphics ns_runtime::image) +library_depends(ns_runtime::graphics::osgearth engine ns_runtime::image::png ns_runtime::graphics::png) +library_set_source_dir(ns_runtime::image png "${TEST_OUTPUT_DIR}/custom/image_source") +library_set_build_dir(ns_runtime::image png "${TEST_OUTPUT_DIR}/custom/image_build") +library_set_install_dir(ns_runtime::image png "${TEST_OUTPUT_DIR}/custom/image_install") +library_get_effective_source_dir(ns_runtime::graphics::osgearth ns_runtime::image::png _runtime_image_source) +library_get_effective_build_dir(ns_runtime::graphics::osgearth ns_runtime::image::png _runtime_image_build) +library_get_effective_install_dir(ns_runtime::graphics::osgearth ns_runtime::image::png _runtime_image_install) +test_assert_strequal("${_runtime_image_source}" "${TEST_OUTPUT_DIR}/custom/image_source") +test_assert_strequal("${_runtime_image_build}" "${TEST_OUTPUT_DIR}/custom/image_build") +test_assert_strequal("${_runtime_image_install}" "${TEST_OUTPUT_DIR}/custom/image_install") +library_get_effective_install_dir(ns_runtime::graphics::osgearth ns_runtime::graphics::png _runtime_graphics_install) +if("${_runtime_image_install}" STREQUAL "${_runtime_graphics_install}") + message(FATAL_ERROR "different namespaces resolved to the same install directory: ${_runtime_image_install}") +endif() +test_output_path("runtime_export" _runtime_export_dir) +library_export_dir(ns_runtime::graphics::osgearth "${_runtime_export_dir}") +library_get_global(ns_runtime::graphics::osgearth BASH_EXECUTABLE _runtime_bash) +execute_process( + COMMAND "${_runtime_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" with_rely_auto --data-dir "${_runtime_export_dir}" ns_runtime::graphics::osgearth::engine + RESULT_VARIABLE _runtime_result + OUTPUT_VARIABLE _runtime_stdout + ERROR_VARIABLE _runtime_stderr +) +test_assert_process_ok("[BASH][NAMESPACE][WITH_RELY_AUTO]" "${_runtime_result}" "${_runtime_bash} library.sh with_rely_auto ns_runtime::graphics::osgearth::engine" "${_runtime_stdout}" "${_runtime_stderr}" "${_runtime_export_dir}") +test_assert_contains("${_runtime_stdout}" "[ns_runtime::image::png][source]") +test_assert_contains("${_runtime_stdout}" "[ns_runtime::graphics::png][source]") +test_assert_contains("${_runtime_stdout}" "[ns_runtime::graphics::osgearth::engine][source]") +test_report_file("${_runtime_image_install}/payload.txt") +test_report_file("${_runtime_graphics_install}/payload.txt") +library_get_effective_install_dir(ns_runtime::graphics::osgearth engine _runtime_engine_install) +test_report_file("${_runtime_engine_install}/payload.txt") +set(_library_file "${CMAKE_CURRENT_LIST_DIR}/../../../domain/library/library.cmake") +set(_fail_root "${TEST_OUTPUT_DIR}/failure_cache") +set(_sibling_code "include(\"${_library_file}\")\nlibrary_create(fail_sibling \"${_fail_root}\")\nlibrary_create(fail_sibling::image \"${_fail_root}\")\nlibrary_create(fail_sibling::graphics \"${_fail_root}\")\nlibrary_register(fail_sibling::image png)\nlibrary_register(fail_sibling::graphics renderer)\nlibrary_depends(fail_sibling::graphics renderer png)") +test_cmake_configure_should_fail("sibling_not_visible" "${_sibling_code}" _sibling_error) +test_assert_contains("${_sibling_error}" "library not found from namespace 'fail_sibling::graphics': png") +set(_child_code "include(\"${_library_file}\")\nlibrary_create(fail_child \"${_fail_root}\")\nlibrary_create(fail_child::graphics \"${_fail_root}\")\nlibrary_register(fail_child parent_lib)\nlibrary_register(fail_child::graphics child_lib)\nlibrary_depends(fail_child parent_lib child_lib)") +test_cmake_configure_should_fail("child_not_visible" "${_child_code}" _child_error) +test_assert_contains("${_child_error}" "library not found from namespace 'fail_child': child_lib") +set(_ambiguous_code "include(\"${_library_file}\")\nlibrary_create(fail_ambiguous \"${_fail_root}\")\nlibrary_create(fail_ambiguous::image \"${_fail_root}\")\nlibrary_create(fail_ambiguous::network \"${_fail_root}\")\nlibrary_create(fail_ambiguous::graphics \"${_fail_root}\")\nlibrary_register(fail_ambiguous::image png)\nlibrary_register(fail_ambiguous::network png)\nlibrary_register(fail_ambiguous::graphics renderer)\nlibrary_namespace_depends(fail_ambiguous::graphics fail_ambiguous::image fail_ambiguous::network)\nlibrary_depends(fail_ambiguous::graphics renderer png)") +test_cmake_configure_should_fail("ambiguous_short_id" "${_ambiguous_code}" _ambiguous_error) +test_assert_contains("${_ambiguous_error}" "ambiguous library 'png'") +test_assert_contains("${_ambiguous_error}" "fail_ambiguous::image::png") +test_assert_contains("${_ambiguous_error}" "fail_ambiguous::network::png") +set(_duplicate_code "include(\"${_library_file}\")\nlibrary_create(fail_duplicate \"${_fail_root}\")\nlibrary_register(fail_duplicate png)\nlibrary_register(fail_duplicate png)") +test_cmake_configure_should_fail("duplicate_local_id" "${_duplicate_code}" _duplicate_error) +test_assert_contains("${_duplicate_error}" "duplicate library id 'png'") +test_pass("library_namespace_test") diff --git a/0_cmake_library/cmake_library/test/domain/library/library_test.cmake b/0_cmake_library/cmake_library/test/domain/library/library_test.cmake index 95d53fa..75017e5 100644 --- a/0_cmake_library/cmake_library/test/domain/library/library_test.cmake +++ b/0_cmake_library/cmake_library/test/domain/library/library_test.cmake @@ -106,7 +106,7 @@ library_set(library_test_libs presetlib CMAKE_CONFIGURE_PRESET preset-test) library_items(library_test_libs _items) -test_assert_strequal("${_items}" "core;util;app;presetlib") +test_assert_strequal("${_items}" "library_test_libs::core;library_test_libs::util;library_test_libs::app;library_test_libs::presetlib") library_get(library_test_libs core CMAKE_OPTIONS _core_options) test_assert_strequal("${_core_options}" "-DCORE_SPACE_PATH=${_fixture_root}/path with space;-DCORE_FLAG=ON;-DCORE_TEXT=abc") @@ -123,8 +123,8 @@ test_assert_strequal("${_app_subdir}" "cmake") library_assert_acyclic(library_test_libs) library_build_order(library_test_libs _order) -test_assert_list_before(_order core util) -test_assert_list_before(_order util app) +test_assert_list_before(_order library_test_libs::core library_test_libs::util) +test_assert_list_before(_order library_test_libs::util library_test_libs::app) library_cache_operations(library_test_libs _ops) test_assert_contains("${_ops}" "auto") @@ -139,11 +139,17 @@ unset(LIBRARY_TEST_INIT_ORDER) unset(LIBRARY_TEST_CLEAR_ORDER) unset(CORE_FIND_ROOT) unset(CORE_FIND_LIST) -library_init_environment(library_test_libs app) +library_init_environment(library_test_libs _init_files app) +foreach(_init_file IN LISTS _init_files) + include("${_init_file}") +endforeach() test_assert_strequal("${LIBRARY_TEST_INIT_ORDER}" "core;util;app") test_assert_strequal("${CORE_FIND_ROOT}" "C:/sdk/core|x") test_assert_strequal("${CORE_FIND_LIST}" "a;b;c") -library_clear_environment(library_test_libs app) +library_clear_environment(library_test_libs _clear_files app) +foreach(_clear_file IN LISTS _clear_files) + include("${_clear_file}") +endforeach() test_assert_strequal("${LIBRARY_TEST_CLEAR_ORDER}" "app;util;core") test_assert_strequal("${CORE_FIND_ROOT}" "") test_assert_strequal("${CORE_FIND_LIST}" "") @@ -155,11 +161,12 @@ test_report_file("${_export_dir}/registry/graph.txt") test_report_file("${_export_dir}/registry/graph.mmd") test_report_file("${_export_dir}/build_order.txt") test_report_file("${_export_dir}/operations.txt") -test_report_file("${_export_dir}/dependencies/app.txt") -set(_core_node_dir "${_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_core") -set(_util_node_dir "${_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_util") -set(_app_node_dir "${_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_app") -set(_preset_node_dir "${_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_presetlib") +__library_export_registry_id(library_test_libs _export_registry) +registry_node_dir("${_export_registry}" library_test_libs::core "${_export_dir}/registry" _core_node_dir) +registry_node_dir("${_export_registry}" library_test_libs::util "${_export_dir}/registry" _util_node_dir) +registry_node_dir("${_export_registry}" library_test_libs::app "${_export_dir}/registry" _app_node_dir) +registry_node_dir("${_export_registry}" library_test_libs::presetlib "${_export_dir}/registry" _preset_node_dir) +test_report_file("${_app_node_dir}/dependencies.txt") test_report_file("${_core_node_dir}/map.txt") test_report_file("${_core_node_dir}/init.cmake") test_report_file("${_core_node_dir}/clear.cmake") @@ -188,9 +195,10 @@ test_assert_contains("${_globals_text}" "K|BASH_SCRIPT|") test_assert_contains("${_globals_text}" "K|BASH_EXECUTABLE|") file(READ "${_export_dir}/registry/graph.txt" _graph_text) -test_assert_contains("${_graph_text}" "N|core|__registry___library_library_test_libs_registry_map_core") -test_assert_contains("${_graph_text}" "E|app|util|") -test_assert_contains("${_graph_text}" "E|app|core|") +registry_get_map_id("${_export_registry}" library_test_libs::core _core_export_map_id) +test_assert_contains("${_graph_text}" "N|library_test_libs::core|${_core_export_map_id}") +test_assert_contains("${_graph_text}" "E|library_test_libs::app|library_test_libs::util|") +test_assert_contains("${_graph_text}" "E|library_test_libs::app|library_test_libs::core|") file(READ "${_app_node_dir}/map.txt" _app_map_text) test_assert_contains("${_app_map_text}" "K|CMAKE_SOURCE_SUBDIR|cmake") file(READ "${_core_node_dir}/map.txt" _core_map_text) @@ -255,17 +263,17 @@ test_assert_contains("${_list_targets_stdout}" "app") test_assert_contains("${_list_targets_stdout}" "presetlib") test_write_file_strequal("list_targets_stdout.txt" "${_list_targets_stdout}" _list_targets_stdout_file) -set(_deps_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh deps --data-dir ${_export_dir} app") +set(_deps_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh deps --data-dir ${_export_dir} library_test_libs::app") execute_process( - COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" deps --data-dir "${_export_dir}" app + COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" deps --data-dir "${_export_dir}" library_test_libs::app RESULT_VARIABLE _deps_result OUTPUT_VARIABLE _deps_stdout ERROR_VARIABLE _deps_stderr ) test_assert_process_ok("[BASH][DEPS]" "${_deps_result}" "${_deps_command}" "${_deps_stdout}" "${_deps_stderr}" "${_export_dir}") # deps 查询只输出依赖闭包,不包含请求对象自身;真正执行 source/build/install/auto 时才会包含请求对象。 -test_assert_strequal("${_deps_stdout}" "core -util +test_assert_strequal("${_deps_stdout}" "library_test_libs::core +library_test_libs::util ") test_assert_contains("${_deps_stdout}" "core") test_assert_contains("${_deps_stdout}" "util") @@ -287,21 +295,23 @@ library_set_global(library_test_libs BUILD_CACHE_ROOT "${TEST_OUTPUT_DIR}/runtim library_set_global(library_test_libs INSTALL_CACHE_ROOT "${TEST_OUTPUT_DIR}/runtime_self/install") library_export_dir(library_test_libs "${_runtime_self_export_dir}") -set(_self_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh auto --data-dir ${_runtime_self_export_dir} app") +set(_self_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh auto --data-dir ${_runtime_self_export_dir} library_test_libs::app") execute_process( - COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" auto --data-dir "${_runtime_self_export_dir}" app + COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" auto --data-dir "${_runtime_self_export_dir}" library_test_libs::app RESULT_VARIABLE _self_auto_result OUTPUT_VARIABLE _self_auto_stdout ERROR_VARIABLE _self_auto_stderr ) test_assert_process_ok("[BASH][AUTO][APP][SELF]" "${_self_auto_result}" "${_self_auto_command}" "${_self_auto_stdout}" "${_self_auto_stderr}" "${_runtime_self_export_dir}") -test_assert_contains("${_self_auto_stdout}" "[app][source]") -test_assert_not_contains("${_self_auto_stdout}" "[core][source]") -test_assert_not_contains("${_self_auto_stdout}" "[util][source]") +test_assert_contains("${_self_auto_stdout}" "[library_test_libs::app][source]") +test_assert_not_contains("${_self_auto_stdout}" "[library_test_libs::core][source]") +test_assert_not_contains("${_self_auto_stdout}" "[library_test_libs::util][source]") test_report_file("${TEST_OUTPUT_DIR}/runtime_self/source/app/source.success") test_report_file("${TEST_OUTPUT_DIR}/runtime_self/install/app/payload.txt") # self-only auto 也要在 app configure 阶段追加依赖库 OTHER_USE_OPT;不需要先执行依赖库自身 action。 -file(READ "${_runtime_self_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_app/build.log" _runtime_self_app_build_log) +__library_export_registry_id(library_test_libs _runtime_self_registry) +registry_node_dir("${_runtime_self_registry}" library_test_libs::app "${_runtime_self_export_dir}/registry" _runtime_self_app_node_dir) +file(READ "${_runtime_self_app_node_dir}/build.log" _runtime_self_app_build_log) test_assert_contains("${_runtime_self_app_build_log}" "-DCORE_USE_OPT=core-visible") test_assert_contains("${_runtime_self_app_build_log}" "-DCORE_USE_PATH=C:/sdk/core\\ with\\ space") test_assert_contains("${_runtime_self_app_build_log}" "-DUTIL_USE_OPT=util-visible") @@ -325,31 +335,33 @@ test_log("[LINE_ENDING][LF][OK]" "runtime export txt files use LF by default") # 显式切换 CRLF 时,写出文件应按配置输出 CRLF;测试后恢复 LF,避免影响后续业务执行。 codec_set_line_ending(CRLF) -map_serialize_file("__library_library_test_libs_globals" "${TEST_OUTPUT_DIR}/line_ending_crlf_globals.txt") +__library_globals_id(library_test_libs _library_test_globals) +map_serialize_file("${_library_test_globals}" "${TEST_OUTPUT_DIR}/line_ending_crlf_globals.txt") file(READ "${TEST_OUTPUT_DIR}/line_ending_crlf_globals.txt" _library_test_crlf_file_hex HEX) test_assert_contains("${_library_test_crlf_file_hex}" "0d0a") codec_set_line_ending(LF) -set(_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh with_rely_auto --data-dir ${_runtime_export_dir} app") +set(_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh with_rely_auto --data-dir ${_runtime_export_dir} library_test_libs::app") execute_process( - COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" with_rely_auto --data-dir "${_runtime_export_dir}" app + COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" with_rely_auto --data-dir "${_runtime_export_dir}" library_test_libs::app RESULT_VARIABLE _auto_result OUTPUT_VARIABLE _auto_stdout ERROR_VARIABLE _auto_stderr ) test_assert_process_ok("[BASH][WITH_RELY_AUTO][APP]" "${_auto_result}" "${_auto_command}" "${_auto_stdout}" "${_auto_stderr}" "${_runtime_export_dir}") # with_rely_auto 执行集合必须包含依赖和请求对象自身,并且日志按 build_order 输出。 -test_assert_contains("${_auto_stdout}" "[core][source]") -test_assert_contains("${_auto_stdout}" "[util][source]") -test_assert_contains("${_auto_stdout}" "[app][source]") -set(_runtime_core_node_dir "${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_core") +test_assert_contains("${_auto_stdout}" "[library_test_libs::core][source]") +test_assert_contains("${_auto_stdout}" "[library_test_libs::util][source]") +test_assert_contains("${_auto_stdout}" "[library_test_libs::app][source]") +__library_export_registry_id(library_test_libs _runtime_registry) +registry_node_dir("${_runtime_registry}" library_test_libs::core "${_runtime_export_dir}/registry" _runtime_core_node_dir) file(READ "${_runtime_core_node_dir}/build.log" _runtime_core_build_log) test_assert_not_contains("${_runtime_core_build_log}" "%00") test_assert_not_contains("${_runtime_core_build_log}" "--preset %00") -set(_preset_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh auto --data-dir ${_runtime_export_dir} presetlib") +set(_preset_auto_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh auto --data-dir ${_runtime_export_dir} library_test_libs::presetlib") execute_process( - COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" auto --data-dir "${_runtime_export_dir}" presetlib + COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" auto --data-dir "${_runtime_export_dir}" library_test_libs::presetlib RESULT_VARIABLE _preset_auto_result OUTPUT_VARIABLE _preset_auto_stdout ERROR_VARIABLE _preset_auto_stderr @@ -357,21 +369,21 @@ execute_process( test_assert_process_ok("[BASH][AUTO][PRESETLIB]" "${_preset_auto_result}" "${_preset_auto_command}" "${_preset_auto_stdout}" "${_preset_auto_stderr}" "${_runtime_export_dir}") if(_library_test_git_result EQUAL 0) - set(_git_current_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh git-current-branch --data-dir ${_runtime_export_dir} core") + set(_git_current_command "${_test_bash} ${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh git-current-branch --data-dir ${_runtime_export_dir} library_test_libs::core") execute_process( - COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" git-current-branch --data-dir "${_runtime_export_dir}" core + COMMAND "${_test_bash}" "${CMAKE_CURRENT_LIST_DIR}/../../../scripts/library/library.sh" git-current-branch --data-dir "${_runtime_export_dir}" library_test_libs::core RESULT_VARIABLE _git_current_result OUTPUT_VARIABLE _git_current_stdout ERROR_VARIABLE _git_current_stderr ) test_assert_process_ok("[BASH][GIT_CURRENT_BRANCH]" "${_git_current_result}" "${_git_current_command}" "${_git_current_stdout}" "${_git_current_stderr}" "${_runtime_export_dir}") test_assert_contains("${_git_current_stdout}" "main") - test_report_file("${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_core/git-current-branch.success") - test_report_file("${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_core/git-current-branch.log") + test_report_file("${_runtime_core_node_dir}/git-current-branch.success") + test_report_file("${_runtime_core_node_dir}/git-current-branch.log") endif() foreach(_name IN ITEMS core util app presetlib) - set(_runtime_node_dir "${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_${_name}") + registry_node_dir("${_runtime_registry}" "library_test_libs::${_name}" "${_runtime_export_dir}/registry" _runtime_node_dir) test_report_file("${TEST_OUTPUT_DIR}/runtime/source/${_name}/source.success") test_report_file("${_runtime_node_dir}/source.log") test_report_file("${TEST_OUTPUT_DIR}/runtime/build/${_name}/build.success") @@ -381,10 +393,12 @@ foreach(_name IN ITEMS core util app presetlib) test_report_file("${TEST_OUTPUT_DIR}/runtime/install/${_name}/payload.txt") endforeach() -file(READ "${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_app/build.log" _app_build_log) +registry_node_dir("${_runtime_registry}" library_test_libs::app "${_runtime_export_dir}/registry" _runtime_app_node_dir) +file(READ "${_runtime_app_node_dir}/build.log" _app_build_log) test_assert_contains("${_app_build_log}" "source_subdir=cmake") test_assert_contains("${_app_build_log}" "source=${TEST_OUTPUT_DIR}/runtime/source/app/cmake") -file(READ "${_runtime_export_dir}/registry/nodes/__registry___library_library_test_libs_registry_map_presetlib/build.log" _preset_build_log) +registry_node_dir("${_runtime_registry}" library_test_libs::presetlib "${_runtime_export_dir}/registry" _runtime_preset_node_dir) +file(READ "${_runtime_preset_node_dir}/build.log" _preset_build_log) test_assert_contains("${_preset_build_log}" "--preset") test_assert_contains("${_preset_build_log}" "preset-test") @@ -398,10 +412,10 @@ get_property(_folder_all_auto TARGET library_test_all_auto PROPERTY FOLDER) test_assert_strequal("${_folder_all_auto}" "library/library_test_libs/all") get_property(_folder_all_with_rely_auto TARGET library_test_all_with_rely_auto PROPERTY FOLDER) test_assert_strequal("${_folder_all_with_rely_auto}" "library/library_test_libs/all") -get_property(_folder_item_app_auto TARGET library_test_item_app_auto PROPERTY FOLDER) -test_assert_strequal("${_folder_item_app_auto}" "library/library_test_libs/items/app") -get_property(_folder_item_app_with_rely_auto TARGET library_test_item_app_with_rely_auto PROPERTY FOLDER) -test_assert_strequal("${_folder_item_app_with_rely_auto}" "library/library_test_libs/items/app") +get_property(_folder_item_app_auto TARGET library_test_item_library_test_libs_app_auto PROPERTY FOLDER) +test_assert_strequal("${_folder_item_app_auto}" "library/library_test_libs/items/library_test_libs::app") +get_property(_folder_item_app_with_rely_auto TARGET library_test_item_library_test_libs_app_with_rely_auto PROPERTY FOLDER) +test_assert_strequal("${_folder_item_app_with_rely_auto}" "library/library_test_libs/items/library_test_libs::app") library_create(library_test_other) library_register(library_test_other other_core) diff --git a/0_cmake_library/cmake_library/test/test_all.cmake b/0_cmake_library/cmake_library/test/test_all.cmake index 7fe7ebb..abeac91 100644 --- a/0_cmake_library/cmake_library/test/test_all.cmake +++ b/0_cmake_library/cmake_library/test/test_all.cmake @@ -6,6 +6,7 @@ include("${CMAKE_CURRENT_LIST_DIR}/base/set/set_test.cmake") include("${CMAKE_CURRENT_LIST_DIR}/base/list/list_test.cmake") include("${CMAKE_CURRENT_LIST_DIR}/composite/registry/registry_test.cmake") include("${CMAKE_CURRENT_LIST_DIR}/domain/action/action_test.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/domain/library/library_namespace_test.cmake") include("${CMAKE_CURRENT_LIST_DIR}/domain/library/library_test.cmake") string(TIMESTAMP _test_all_finished_at "%Y-%m-%d %H:%M:%S") diff --git a/0_cmake_library/cmake_library/test/test_common.cmake b/0_cmake_library/cmake_library/test/test_common.cmake index 59daf26..d629623 100644 --- a/0_cmake_library/cmake_library/test/test_common.cmake +++ b/0_cmake_library/cmake_library/test/test_common.cmake @@ -228,7 +228,7 @@ function(test_assert_process_ok title result command_text stdout_text stderr_tex endfunction() macro(test_cmake_configure_should_fail name cmake_code out) - string(REPLACE "/" "_" _test_fail_project_name "${name}") + string(REPLACE "." "_" _test_fail_project_name "${name}") set(_test_fail_dir "${TEST_OUTPUT_DIR}/${name}_project") file(REMOVE_RECURSE "${_test_fail_dir}") file(MAKE_DIRECTORY "${_test_fail_dir}") diff --git a/0_cmake_library/create_linux_driver_proj.cmake b/0_cmake_library/create_linux_driver_proj.cmake index d0395d7..3b5e252 100644 --- a/0_cmake_library/create_linux_driver_proj.cmake +++ b/0_cmake_library/create_linux_driver_proj.cmake @@ -63,7 +63,7 @@ function(get_common_path list_var out_var) # 取第一个路径作为初始公共路径 list(GET ${list_var} 0 _first_path) - string(REPLACE "\\" "/" _first_path "${_first_path}") + string(REPLACE "\\" "." _first_path "${_first_path}") # 检查路径是否以 / 开头 set(_has_leading_slash 0) @@ -72,12 +72,12 @@ function(get_common_path list_var out_var) endif() # 将路径拆分为部分 - string(REPLACE "/" ";" _common_parts "${_first_path}") + string(REPLACE "." ";" _common_parts "${_first_path}") # 遍历所有路径 foreach(_path IN LISTS ${list_var}) - string(REPLACE "\\" "/" _path_norm "${_path}") - string(REPLACE "/" ";" _cur_parts "${_path_norm}") + string(REPLACE "\\" "." _path_norm "${_path}") + string(REPLACE "." ";" _cur_parts "${_path_norm}") # 取两个列表的较小长度,避免越界 list(LENGTH _common_parts _len1) @@ -120,7 +120,7 @@ function(get_common_path list_var out_var) # 拼回路径 if(_common_parts) - list(JOIN _common_parts "/" _common_path) + list(JOIN _common_parts "." _common_path) else() set(_common_path "") endif() diff --git a/0_cmake_library/main.cmake b/0_cmake_library/main.cmake index a5f84dd..e2fea37 100644 --- a/0_cmake_library/main.cmake +++ b/0_cmake_library/main.cmake @@ -86,7 +86,7 @@ macro(_load_cmake_library) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread") endif () - _find_upwards_directory(${CMAKE_CURRENT_LIST_DIR} 0_cmake_library G_Root_Cmake_Library_Dir) + _find_upwards_directory(${CMAKE_CURRENT_LIST_DIR}/../ 0_cmake_library G_Root_Cmake_Library_Dir) # 外部库构建目录 # if(WIN32) # set(_root_dir "D:/ae") diff --git a/0_cmake_library/ninja_build_analyze/build_analyze.sh b/0_cmake_library/ninja_build_analyze/build_analyze.sh index 782c61c..8cadecc 100644 --- a/0_cmake_library/ninja_build_analyze/build_analyze.sh +++ b/0_cmake_library/ninja_build_analyze/build_analyze.sh @@ -5,7 +5,7 @@ set -euo pipefail SCRIPT_NAME="$(basename "$0")" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [[ -f "$SCRIPT_DIR/../cmake_bash_library/cmake_bash_args.bash" ]]; then - # shellcheck source=../cmake_bash_library/cmake_bash_args.bash + # shellcheck source=../cmake_bash_library/cmake_bash_args.bash source "$SCRIPT_DIR/../cmake_bash_library/cmake_bash_args.bash" fi diff --git a/0_cmake_library/ninja_build_analyze/export.cmake b/0_cmake_library/ninja_build_analyze/export.cmake index a6f540a..71a60fb 100644 --- a/0_cmake_library/ninja_build_analyze/export.cmake +++ b/0_cmake_library/ninja_build_analyze/export.cmake @@ -2,7 +2,7 @@ # 执行顺序不再由 CMake target 依赖表达,全部由 build_analyze.sh 参数控制。 -include("${CMAKE_CURRENT_LIST_DIR}/../cmake_bash_library/export.cmake") +include("../cmake_bash_library/export.cmake") diff --git a/register/base.cmake b/0_cmake_library/register/base.cmake similarity index 79% rename from register/base.cmake rename to 0_cmake_library/register/base.cmake index 2331c0b..d85e764 100644 --- a/register/base.cmake +++ b/0_cmake_library/register/base.cmake @@ -2,7 +2,7 @@ include_guard(GLOBAL) block() if (CMAKE_SYSTEM_NAME STREQUAL "Linux") if (NOT CMAKE_SYSROOT) - set(CMAKE_SYSROOT /) + set(CMAKE_SYSROOT .) endif () endif () if (CMAKE_SYSROOT) @@ -10,13 +10,12 @@ block() endif () set(zlib_opts) list(APPEND zlib_opts "-DZLIB_BUILD_EXAMPLES=OFF") - _register_git_cmake_library( + _register_git_cmake_library(global zlib - ZLIB https://github.com/madler/zlib.git v1.3.1 ) - rcl_get_effective_install_dir(zlib ZLIB_ROOT) + rcl_get_effective_install_dir(global zlib ZLIB_ROOT) set(ZLIB_INCLUDE_DIR ${ZLIB_ROOT}/include) if (MSVC) if (CMAKE_BUILD_TYPE STREQUAL "Debug") @@ -27,20 +26,20 @@ block() else () set(ZLIB_LIBRARY ${ZLIB_ROOT}/lib/libz.a) endif () - rcl_cmake_library_set_cmake_options(zlib ${zlib_opts}) - rcl_cmake_library_set_other_use_opt(zlib + rcl_cmake_library_set_cmake_options(global zlib ${zlib_opts}) + rcl_cmake_library_set_other_use_opt(global zlib "-DZLIB_ROOT=\"${ZLIB_ROOT}\"" "-DZLIB_LIBRARY=\"${ZLIB_LIBRARY}\"" "-DZLIB_INCLUDE_DIR=\"${ZLIB_ROOT}/include\"" ) - rcl_cmake_library_set_init_script(zlib + rcl_cmake_library_set_init_script(global zlib "set(ZLIB_ROOT \"${ZLIB_ROOT}\")" "set(ZLIB_INCLUDE_DIR \"${ZLIB_INCLUDE_DIR}\")" "set(ZLIB_INCLUDE_DIRS \"${ZLIB_INCLUDE_DIR}\")" "set(ZLIB_LIBRARY \"${ZLIB_LIBRARY}\")" "set(ZLIB_LIBRARIES \"${ZLIB_LIBRARY}\")" ) - rcl_cmake_library_set_clear_script(zlib + rcl_cmake_library_set_clear_script(global zlib "unset(ZLIB_ROOT)" "unset(ZLIB_INCLUDE_DIR)" "unset(ZLIB_INCLUDE_DIRS)" @@ -75,28 +74,26 @@ block() list(APPEND libpng_opts "-DZLIB_ROOT=\"${ZLIB_ROOT}\"") list(APPEND libpng_opts "-DZLIB_LIBRARY=\"${ZLIB_LIBRARY}\"") list(APPEND libpng_opts "-DZLIB_INCLUDE_DIR=\"${ZLIB_INCLUDE_DIR}\"") - _register_git_cmake_library( - libpng + _register_git_cmake_library(global libpng https://github.com/glennrp/libpng.git v1.6.58 ) - rcl_cmake_library_set_cmake_options(libpng ${libpng_opts}) - rcl_cmake_library_set_other_use_opt(libpng + rcl_cmake_library_set_cmake_options(global libpng ${libpng_opts}) + rcl_cmake_library_set_other_use_opt(global libpng "-DPNG_LIBRARY=\"${PNG_LIBRARY}\"" "-DPNG_PNG_INCLUDE_DIR=\"${PNG_PNG_INCLUDE_DIR}\"" ) set(GTest_opts) list(APPEND GTest_opts "-Dgtest_force_shared_crt=ON") - _register_git_cmake_library( + _register_git_cmake_library(global googletest - GTest https://github.com/google/googletest.git v1.17.0 ) - rcl_cmake_library_set_cmake_options(googletest ${GTest_opts}) + rcl_cmake_library_set_cmake_options(global googletest ${GTest_opts}) set(GTest_DIR ${EXTERNAL_INSTALL_DIR}/googletest/lib/cmake) - #_register_git_cmake_library( + #_register_git_cmake_library(global # libarchive # libarchive # "https://github.com/libarchive/libarchive.git" @@ -111,14 +108,13 @@ block() list(APPEND libzip_opts "-DBUILD_REGRESS=OFF") list(APPEND libzip_opts "-DBUILD_TOOLS=OFF") list(APPEND libzip_opts "-DBUILD_SHARED_LIBS=OFF") - _register_git_cmake_library( - libzip + _register_git_cmake_library(global libzip "https://github.com/nih-at/libzip" "v1.11.4" ) - rcl_cmake_library_set_cmake_options(libzip ${libzip_opts}) - rcl_cmake_library_set_deps(libzip zlib) + rcl_cmake_library_set_cmake_options(global libzip ${libzip_opts}) + rcl_cmake_library_set_deps(global libzip zlib) #set(ucoro_opts) #_register_git_cmake_library_opt( # "ucoro" @@ -135,25 +131,22 @@ block() "-DSPDLOG_INSTALL=ON" "-DSPDLOG_FMT_EXTERNAL=OFF" ) - _register_git_cmake_library( - spdlog + _register_git_cmake_library(global spdlog "https://github.com/gabime/spdlog.git" "v1.17.0" ) - rcl_cmake_library_set_cmake_options(spdlog ${spdlog_opts}) - _register_git_cmake_library( - pfr + rcl_cmake_library_set_cmake_options(global spdlog ${spdlog_opts}) + _register_git_cmake_library(global pfr "https://github.com/boostorg/pfr.git" "2.2.0" ) - _register_git_cmake_library( - llvm + _register_git_cmake_library(global llvm "https://github.com/llvm/llvm-project.git" "llvmorg-22.1.8" ) - rcl_cmake_library_set_cmake_source_relative_dir(llvm "llvm") + rcl_cmake_library_set_cmake_source_relative_dir(global llvm "llvm") message("base.cmake load complete!") endblock() \ No newline at end of file diff --git a/register/computer_graphics.cmake b/0_cmake_library/register/computer_graphics.cmake similarity index 68% rename from register/computer_graphics.cmake rename to 0_cmake_library/register/computer_graphics.cmake index e93aa8e..5f5837d 100644 --- a/register/computer_graphics.cmake +++ b/0_cmake_library/register/computer_graphics.cmake @@ -1,6 +1,6 @@ include_guard(GLOBAL) -include(${CMAKE_CURRENT_LIST_DIR}/../0_cmake_library/register_libaray/export.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/base.cmake) +include("${CMAKE_CURRENT_LIST_DIR}/export.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/base.cmake") block() set(freetype_opts) set(freetype_root ${EXTERNAL_INSTALL_DIR}/freetype_VER-2-13-3) @@ -12,14 +12,13 @@ block() else () set(FREETYPE_LIBRARY "${freetype_root}/lib/freetype.lib") endif () - _register_git_cmake_library( - freetype + _register_git_cmake_library(global freetype https://github.com/freetype/freetype.git VER-2-13-3 ) - rcl_cmake_library_set_cmake_options(freetype ${freetype_opts}) - rcl_cmake_library_set_other_use_opt(freetype + rcl_cmake_library_set_cmake_options(global freetype ${freetype_opts}) + rcl_cmake_library_set_other_use_opt(global freetype "-DFREETYPE_INCLUDE_DIRS=\"${FREETYPE_INCLUDE_DIRS}\"" "-DFREETYPE_INCLUDE_DIR_ft2build=\"${FREETYPE_INCLUDE_DIR_ft2build}\"" "-DFREETYPE_INCLUDE_DIR_freetype2=\"${FREETYPE_INCLUDE_DIR_freetype2}\"" @@ -30,14 +29,13 @@ block() list(APPEND msdfgen_cmake_option "-DMSDFGEN_USE_SKIA=OFF -DMSDFGEN_USE_VCPKG=OFF") list(APPEND msdfgen_cmake_option "-DBUILD_SHARED_LIBS=ON -DMSDFGEN_DYNAMIC_RUNTIME=ON") list(APPEND msdfgen_cmake_option "-DMSDFGEN_INSTALL=ON") - _register_git_cmake_library( - msdfgen + _register_git_cmake_library(global msdfgen https://github.com/Chlumsky/msdfgen.git v1.12 ) - rcl_cmake_library_set_cmake_options(msdfgen ${msdfgen_cmake_option}) - rcl_cmake_library_set_deps(msdfgen zlib libpng freetype tinyxml2) + rcl_cmake_library_set_cmake_options(global msdfgen ${msdfgen_cmake_option}) + rcl_cmake_library_set_deps(global msdfgen zlib libpng freetype tinyxml2) #https://github.com/nyyManni/msdfgl.git set(msdfgl_cmake_option "") set(PThreads4W_option @@ -45,13 +43,12 @@ block() ) list(APPEND PThreads4W_option "-DBUILD_TESTING=OFF") list(APPEND PThreads4W_option "-DDIST_ROOT=${EXTERNAL_INSTALL_DIR}/PThreads4W") - _register_git_cmake_library( - PThreads4W + _register_git_cmake_library(global PThreads4W https://github.com/jwinarske/pthreads4w.git "cmake" ) - rcl_cmake_library_set_cmake_options(PThreads4W ${PThreads4W_option}) + rcl_cmake_library_set_cmake_options(global PThreads4W ${PThreads4W_option}) # C:\VulkanSDK\1.4.350.0 # SDK涓嬭浇 https://vulkan.lunarg.com/sdk/home # https://docs.vulkan.org/tutorial/latest/00_Introduction.html @@ -59,13 +56,12 @@ block() # https://github.com/KhronosGroup/Vulkan-Samples.git # https://github.com/SaschaWillems/Vulkan.git set(glfw3_option ${base_options}) - _register_git_cmake_library( - glfw3 + _register_git_cmake_library(global glfw3 https://github.com/glfw/glfw.git "3.4" ) - rcl_cmake_library_set_cmake_options(glfw3 ${glfw3_option}) + rcl_cmake_library_set_cmake_options(global glfw3 ${glfw3_option}) set(glfw3_option ${base_options}) set(msdf-atlas-gen_option ${base_options}) list(APPEND msdf-atlas-gen_option @@ -81,98 +77,87 @@ block() "-DBUILD_SHARED_LIBS=OFF" ) set(msdf-atlas-gen_rely ZLIB freetype png) - _register_git_cmake_library( - msdf-atlas-gen + _register_git_cmake_library(global msdf-atlas-gen https://github.com/Chlumsky/msdf-atlas-gen.git v1.4 ) - rcl_cmake_library_set_cmake_options(msdf-atlas-gen ${msdf-atlas-gen_option}) + rcl_cmake_library_set_cmake_options(global msdf-atlas-gen ${msdf-atlas-gen_option}) set(cglm_option ${base_options}) - _register_git_cmake_library( - cglm + _register_git_cmake_library(global cglm "https://github.com/recp/cglm.git" v0.9.6 ) - rcl_cmake_library_set_cmake_options(cglm ${cglm_option}) + rcl_cmake_library_set_cmake_options(global cglm ${cglm_option}) set(glm_option ${base_options}) - _register_git_cmake_library( - glm + _register_git_cmake_library(global glm "https://github.com/g-truc/glm.git" "1.0.3" ) - rcl_cmake_library_set_cmake_options(glm ${glm_option}) + rcl_cmake_library_set_cmake_options(global glm ${glm_option}) set(tinyobjloader_option ${base_options}) list(APPEND tinyobjloader_option "-DCMAKE_POLICY_VERSION_MINIMUM=3.20") - _register_git_cmake_library( - tinyobjloader + _register_git_cmake_library(global tinyobjloader "https://github.com/tinyobjloader/tinyobjloader.git" "v1.0.7" ) - rcl_cmake_library_set_cmake_options(tinyobjloader ${tinyobjloader_option}) + rcl_cmake_library_set_cmake_options(global tinyobjloader ${tinyobjloader_option}) set(vk-bootstrap_option ${base_options}) - _register_git_cmake_library( - vk-bootstrap + _register_git_cmake_library(global vk-bootstrap "https://github.com/charles-lunarg/vk-bootstrap.git" "v1.4.350" ) - rcl_cmake_library_set_cmake_options(vk-bootstrap ${vk-bootstrap_option}) + rcl_cmake_library_set_cmake_options(global vk-bootstrap ${vk-bootstrap_option}) set(Vulkan-Hpp_option ${base_options}) - _register_git_cmake_library( - Vulkan-Hpp + _register_git_cmake_library(global Vulkan-Hpp "https://github.com/KhronosGroup/Vulkan-Hpp.git" "v1.4.350" ) - rcl_cmake_library_set_cmake_options(Vulkan-Hpp ${Vulkan-Hpp_option}) + rcl_cmake_library_set_cmake_options(global Vulkan-Hpp ${Vulkan-Hpp_option}) set(volk_option ${base_options}) list(APPEND volk_option "-DVOLK_INSTALL=ON") list(APPEND volk_option "-DVOLK_PULL_IN_VULKAN=ON") list(APPEND volk_option "-DVOLK_HEADERS_ONLY=OFF") list(APPEND volk_option "-DVOLK_NAMESPACE=ON") #list(APPEND volk_option "-DVOLK_STATIC_DEFINES=VK_USE_PLATFORM_WIN32_KHR") - _register_git_cmake_library( - volk + _register_git_cmake_library(global volk "https://github.com/zeux/volk.git" "vulkan-sdk-1.4.350.0" ) - rcl_cmake_library_set_cmake_options(volk ${volk_option}) + rcl_cmake_library_set_cmake_options(global volk ${volk_option}) # vma set(VulkanMemoryAllocator_option ${base_options}) - _register_git_cmake_library( - VulkanMemoryAllocator + _register_git_cmake_library(global VulkanMemoryAllocator "https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git" "v3.3.0" ) - rcl_cmake_library_set_cmake_options(VulkanMemoryAllocator ${VulkanMemoryAllocator_option}) + rcl_cmake_library_set_cmake_options(global VulkanMemoryAllocator ${VulkanMemoryAllocator_option}) set(tinygltf_option ${base_options}) - _register_git_cmake_library( - tinygltf + _register_git_cmake_library(global tinygltf "https://github.com/syoyo/tinygltf.git" "v3.0.0" ) - rcl_cmake_library_set_cmake_options(tinygltf ${tinygltf_option}) + rcl_cmake_library_set_cmake_options(global tinygltf ${tinygltf_option}) set(fastgltf_option ${base_options}) - _register_git_cmake_library( - fastgltf + _register_git_cmake_library(global fastgltf "https://github.com/spnda/fastgltf.git" "v0.9.0" ) - rcl_cmake_library_set_cmake_options(fastgltf ${fastgltf_option}) + rcl_cmake_library_set_cmake_options(global fastgltf ${fastgltf_option}) set(VulkanSceneGraph_option ${base_options}) - _register_git_cmake_library( - VulkanSceneGraph + _register_git_cmake_library(global VulkanSceneGraph "https://github.com/vsg-dev/VulkanSceneGraph.git" "v1.1.15" ) - rcl_cmake_library_set_cmake_options(VulkanSceneGraph ${VulkanSceneGraph_option}) + rcl_cmake_library_set_cmake_options(global VulkanSceneGraph ${VulkanSceneGraph_option}) endblock() diff --git a/0_cmake_library/register/export.cmake b/0_cmake_library/register/export.cmake new file mode 100644 index 0000000..a9dd5ed --- /dev/null +++ b/0_cmake_library/register/export.cmake @@ -0,0 +1,8 @@ +include_guard(GLOBAL) +include("${CMAKE_CURRENT_LIST_DIR}/base.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/register_library.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/computer_graphics.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/libarchive.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/with_qt.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/osg_earth.cmake") + diff --git a/register/libarchive.cmake b/0_cmake_library/register/libarchive.cmake similarity index 85% rename from register/libarchive.cmake rename to 0_cmake_library/register/libarchive.cmake index c9b4710..ce0cbde 100644 --- a/register/libarchive.cmake +++ b/0_cmake_library/register/libarchive.cmake @@ -1,22 +1,23 @@ +include_guard(GLOBAL) + block() set(bzip2_opts) list(APPEND bzip2_opts -DENABLE_SHARED_LIB=OFF) list(APPEND bzip2_opts -DENABLE_STATIC_LIB=ON) list(APPEND bzip2_opts -DENABLE_APP=OFF) - _register_git_cmake_library( - bzip2 + _register_git_cmake_library(global bzip2 "https://github.com/libarchive/bzip2" "master" ) - rcl_cmake_library_set_cmake_options(bzip2 ${bzip2_opts}) - rcl_get_effective_install_dir(bzip2 BZIP2_ROOT) + rcl_cmake_library_set_cmake_options(global bzip2 ${bzip2_opts}) + rcl_get_effective_install_dir(global bzip2 BZIP2_ROOT) if (MSVC) set(BZIP2_LIBRARY "${BZIP2_ROOT}/lib/bz2_static.lib") else () set(BZIP2_LIBRARY "${BZIP2_ROOT}/lib/libbz2_static.a") endif () - rcl_cmake_library_set_other_use_opt(bzip2 + rcl_cmake_library_set_other_use_opt(global bzip2 "-DBZIP2_INCLUDE_DIR=\"${BZIP2_ROOT}/include\"" "-DBZIP2_INCLUDE_DIRS=\"${BZIP2_ROOT}/include\"" "-DBZIP2_LIBRARY=\"${BZIP2_LIBRARY}\"" @@ -24,7 +25,7 @@ block() "-DBZIP2_LIBRARY_DEBUG=\"${BZIP2_LIBRARY}\"" "-DBZIP2_LIBRARIES=\"${BZIP2_LIBRARY}\"" ) - rcl_cmake_library_set_init_script(bzip2 + rcl_cmake_library_set_init_script(global bzip2 "set(LIBARCHIVE_BZIP2_ROOT \"${BZIP2_ROOT}\")" "set(LIBARCHIVE_BZIP2_LIBRARY \"${BZIP2_LIBRARY}\")" "set(BZIP2_ROOT \"${BZIP2_ROOT}\")" @@ -33,7 +34,7 @@ block() "set(BZIP2_LIBRARY \"${BZIP2_LIBRARY}\")" "set(BZIP2_LIBRARIES \"${BZIP2_LIBRARY}\")" ) - rcl_cmake_library_set_clear_script(bzip2 + rcl_cmake_library_set_clear_script(global bzip2 "unset(LIBARCHIVE_BZIP2_ROOT)" "unset(LIBARCHIVE_BZIP2_LIBRARY)" "unset(BZIP2_ROOT)" @@ -61,14 +62,13 @@ block() elseif (WIN32) list(APPEND lzma_opts -DXZ_THREADS=vista) endif () - _register_git_cmake_library( + _register_git_cmake_library(global lzma - liblzma "https://github.com/tukaani-project/xz.git" "v5.8.3" ) - rcl_cmake_library_set_cmake_options(lzma ${lzma_opts}) - rcl_get_effective_install_dir(lzma LIBLZMA_ROOT) + rcl_cmake_library_set_cmake_options(global lzma ${lzma_opts}) + rcl_get_effective_install_dir(global lzma LIBLZMA_ROOT) set(LIBLZMA_INCLUDE_DIR "${LIBLZMA_ROOT}/include") set(LIBARCHIVE_STATIC_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") string(STRIP "${LIBARCHIVE_STATIC_EXE_LINKER_FLAGS}" LIBARCHIVE_STATIC_EXE_LINKER_FLAGS) @@ -90,7 +90,7 @@ block() list(APPEND LIBLZMA_THREAD_LINK_LIBS "-pthread") endif () endif () - rcl_cmake_library_set_other_use_opt(lzma + rcl_cmake_library_set_other_use_opt(global lzma "-DLIBLZMA_INCLUDE_DIR=\"${LIBLZMA_INCLUDE_DIR}\"" "-DLIBLZMA_INCLUDE_DIRS=\"${LIBLZMA_INCLUDE_DIR}\"" "-DLIBLZMA_LIBRARY=\"${LIBLZMA_LIBRARY}\"" @@ -103,7 +103,7 @@ block() "-DCMAKE_REQUIRED_FLAGS:STRING=\"${LIBARCHIVE_STATIC_EXE_LINKER_FLAGS}\"" "${LIBARCHIVE_LZMA_FORCE_MT_OPT}" ) - rcl_cmake_library_set_init_script(lzma + rcl_cmake_library_set_init_script(global lzma "set(LIBARCHIVE_LZMA_ROOT \"${LIBLZMA_ROOT}\")" "set(LIBARCHIVE_LZMA_LIBRARY \"${LIBLZMA_LIBRARY}\" ${LIBLZMA_THREAD_LINK_LIBS})" "set(LIBARCHIVE_LZMA_LIBRARIES \"${LIBLZMA_LIBRARY}\" ${LIBLZMA_THREAD_LINK_LIBS})" @@ -113,7 +113,7 @@ block() "set(LIBLZMA_LIBRARY \"${LIBLZMA_LIBRARY}\")" "set(LIBLZMA_LIBRARIES \"${LIBLZMA_LIBRARY}\" ${LIBLZMA_THREAD_LINK_LIBS})" ) - rcl_cmake_library_set_clear_script(lzma + rcl_cmake_library_set_clear_script(global lzma "unset(LIBARCHIVE_LZMA_ROOT)" "unset(LIBARCHIVE_LZMA_LIBRARY)" "unset(LIBARCHIVE_LZMA_LIBRARIES)" @@ -127,21 +127,20 @@ block() list(APPEND lz4_opts "-DBUILD_SHARED_LIBS=OFF") list(APPEND lz4_opts "-DLZ4_BUILD_CLI=OFF") # LZ4 - _register_git_cmake_library( - lz4 + _register_git_cmake_library(global lz4 "https://github.com/lz4/lz4.git" "v1.10.0" ) - rcl_cmake_library_set_cmake_options(lz4 ${lz4_opts}) - rcl_cmake_library_set_cmake_source_relative_dir(lz4 "build/cmake") - rcl_get_effective_install_dir(lz4 LZ4_ROOT) + rcl_cmake_library_set_cmake_options(global lz4 ${lz4_opts}) + rcl_cmake_library_set_cmake_source_relative_dir(global lz4 "build/cmake") + rcl_get_effective_install_dir(global lz4 LZ4_ROOT) if (MSVC) set(LZ4_LIBRARY "${LZ4_ROOT}/lib/lz4.lib") else () set(LZ4_LIBRARY "${LZ4_ROOT}/lib/liblz4.a") endif () - rcl_cmake_library_set_other_use_opt(lz4 + rcl_cmake_library_set_other_use_opt(global lz4 "-DLZ4_ROOT=\"${LZ4_ROOT}\"" "-DLZ4_INCLUDE_DIR=\"${LZ4_ROOT}/include\"" "-DLZ4_INCLUDE_DIRS=\"${LZ4_ROOT}/include\"" @@ -150,7 +149,7 @@ block() "-DLZ4_LIBRARY_DEBUG=\"${LZ4_LIBRARY}\"" "-DLZ4_LIBRARIES=\"${LZ4_LIBRARY}\"" ) - rcl_cmake_library_set_init_script(lz4 + rcl_cmake_library_set_init_script(global lz4 "set(LIBARCHIVE_LZ4_ROOT \"${LZ4_ROOT}\")" "set(LIBARCHIVE_LZ4_LIBRARY \"${LZ4_LIBRARY}\")" "set(LZ4_ROOT \"${LZ4_ROOT}\")" @@ -159,7 +158,7 @@ block() "set(LZ4_LIBRARY \"${LZ4_LIBRARY}\")" "set(LZ4_LIBRARIES \"${LZ4_LIBRARY}\")" ) - rcl_cmake_library_set_clear_script(lz4 + rcl_cmake_library_set_clear_script(global lz4 "unset(LIBARCHIVE_LZ4_ROOT)" "unset(LIBARCHIVE_LZ4_LIBRARY)" "unset(LZ4_ROOT)" @@ -177,15 +176,14 @@ block() -DZSTD_ZLIB_SUPPORT=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON ) - _register_git_cmake_library( - zstd + _register_git_cmake_library(global zstd "https://github.com/facebook/zstd.git" "v1.5.7" ) - rcl_cmake_library_set_cmake_options(zstd ${zstd_opts}) - rcl_cmake_library_set_cmake_source_relative_dir(zstd "build/cmake") - rcl_get_effective_install_dir(zstd ZSTD_ROOT) + rcl_cmake_library_set_cmake_options(global zstd ${zstd_opts}) + rcl_cmake_library_set_cmake_source_relative_dir(global zstd "build/cmake") + rcl_get_effective_install_dir(global zstd ZSTD_ROOT) set(ZSTD_INCLUDE_DIR "${ZSTD_ROOT}/include") set(ZSTD_CMAKE_DIR "${ZSTD_ROOT}/lib/cmake/zstd") set(ZSTD_THREAD_LINK_LIBS) @@ -195,7 +193,7 @@ block() set(ZSTD_LIBRARY "${ZSTD_ROOT}/lib/libzstd.a") list(APPEND ZSTD_THREAD_LINK_LIBS "-pthread") endif () - rcl_cmake_library_set_other_use_opt(zstd + rcl_cmake_library_set_other_use_opt(global zstd "-DZSTD_ROOT=\"${ZSTD_ROOT}\"" "-Dzstd_ROOT=\"${ZSTD_ROOT}\"" "-Dzstd_DIR=\"${ZSTD_CMAKE_DIR}\"" @@ -207,7 +205,7 @@ block() "-DZSTD_LIBRARIES=\"${ZSTD_LIBRARY}\"" "-DCMAKE_EXE_LINKER_FLAGS:STRING=\"${LIBARCHIVE_STATIC_EXE_LINKER_FLAGS}\"" ) - rcl_cmake_library_set_init_script(zstd + rcl_cmake_library_set_init_script(global zstd "set(LIBARCHIVE_ZSTD_ROOT \"${ZSTD_ROOT}\")" "set(LIBARCHIVE_ZSTD_LIBRARY \"${ZSTD_LIBRARY}\" ${ZSTD_THREAD_LINK_LIBS})" "set(LIBARCHIVE_ZSTD_LIBRARIES \"${ZSTD_LIBRARY}\" ${ZSTD_THREAD_LINK_LIBS})" @@ -219,7 +217,7 @@ block() "set(ZSTD_LIBRARY \"${ZSTD_LIBRARY}\")" "set(ZSTD_LIBRARIES \"${ZSTD_LIBRARY}\" ${ZSTD_THREAD_LINK_LIBS})" ) - rcl_cmake_library_set_clear_script(zstd + rcl_cmake_library_set_clear_script(global zstd "unset(LIBARCHIVE_ZSTD_ROOT)" "unset(LIBARCHIVE_ZSTD_LIBRARY)" "unset(LIBARCHIVE_ZSTD_LIBRARIES)" @@ -244,15 +242,14 @@ block() -DBUILD_SHARED_LIBS=OFF -DEXPAT_ENABLE_INSTALL=ON ) - _register_git_cmake_library( - expat + _register_git_cmake_library(global expat "https://github.com/libexpat/libexpat.git" "R_2_8_1" ) - rcl_cmake_library_set_cmake_options(expat ${expat_opts}) - rcl_cmake_library_set_cmake_source_relative_dir(expat "expat") - rcl_get_effective_install_dir(expat EXPAT_ROOT) + rcl_cmake_library_set_cmake_options(global expat ${expat_opts}) + rcl_cmake_library_set_cmake_source_relative_dir(global expat "expat") + rcl_get_effective_install_dir(global expat EXPAT_ROOT) if (MSVC) set(EXPAT_STATIC_C_FLAG "/DXML_STATIC") else () @@ -267,7 +264,7 @@ block() else () set(EXPAT_LIBRARY "${EXPAT_ROOT}/lib/libexpat.a") endif () - rcl_cmake_library_set_other_use_opt(expat + rcl_cmake_library_set_other_use_opt(global expat "-DEXPAT_USE_STATIC_LIBS=ON" "-DEXPAT_INCLUDE_DIR=\"${EXPAT_ROOT}/include\"" "-DEXPAT_INCLUDE_DIRS=\"${EXPAT_ROOT}/include\"" @@ -280,7 +277,7 @@ block() "-DCMAKE_C_FLAGS:STRING=\"${CMAKE_C_FLAGS} ${EXPAT_STATIC_C_FLAG}\"" "-DCMAKE_CXX_FLAGS:STRING=\"${CMAKE_CXX_FLAGS} ${EXPAT_STATIC_C_FLAG}\"" ) - rcl_cmake_library_set_init_script(expat + rcl_cmake_library_set_init_script(global expat "set(LIBARCHIVE_EXPAT_ROOT \"${EXPAT_ROOT}\")" "set(LIBARCHIVE_EXPAT_LIBRARY \"${EXPAT_LIBRARY}\")" "set(EXPAT_ROOT \"${EXPAT_ROOT}\")" @@ -290,7 +287,7 @@ block() "set(EXPAT_LIBRARIES \"${EXPAT_LIBRARY}\")" "set(EXPAT_USE_STATIC_LIBS ON)" ) - rcl_cmake_library_set_clear_script(expat + rcl_cmake_library_set_clear_script(global expat "unset(LIBARCHIVE_EXPAT_ROOT)" "unset(LIBARCHIVE_EXPAT_LIBRARY)" "unset(EXPAT_ROOT)" @@ -331,15 +328,14 @@ block() -DENABLE_INSTALL=ON -DBUILD_SHARED_LIBS=OFF ) - _register_git_cmake_library( - libarchive + _register_git_cmake_library(global libarchive "https://github.com/libarchive/libarchive.git" "v3.8.7" ) - rcl_cmake_library_set_cmake_options(libarchive ${libarchive_opts}) - rcl_cmake_library_set_deps(libarchive zlib zstd lzma bzip2 lz4 expat) - rcl_get_effective_install_dir(libarchive LibArchive_Root) + rcl_cmake_library_set_cmake_options(global libarchive ${libarchive_opts}) + rcl_cmake_library_set_deps(global libarchive zlib zstd lzma bzip2 lz4 expat) + rcl_get_effective_install_dir(global libarchive LibArchive_Root) set(LibArchive_INCLUDE_DIR "${LibArchive_Root}/include") if (MSVC) set(LibArchive_LIBRARY "${LibArchive_Root}/lib/archive.lib") @@ -357,7 +353,7 @@ block() ) list(JOIN LibArchive_SUB_LIBRARIES "\" \"" LibArchive_SUB_LIBRARIES_SCRIPT) - rcl_cmake_library_set_init_script(libarchive + rcl_cmake_library_set_init_script(global libarchive "set(LibArchive_Root \"${LibArchive_Root}\")" "set(LibArchive_INCLUDE_DIR \"${LibArchive_INCLUDE_DIR}\")" "set(LibArchive_LIBRARY \"${LibArchive_LIBRARY}\")" @@ -365,7 +361,7 @@ block() "find_package(LibArchive REQUIRED)" ) - rcl_cmake_library_set_clear_script(libarchive + rcl_cmake_library_set_clear_script(global libarchive "unset(LibArchive_Root)" "unset(LibArchive_INCLUDE_DIR)" "unset(LibArchive_LIBRARY)" diff --git a/0_cmake_library/register/osg_earth.cmake b/0_cmake_library/register/osg_earth.cmake new file mode 100644 index 0000000..7d199e1 --- /dev/null +++ b/0_cmake_library/register/osg_earth.cmake @@ -0,0 +1,959 @@ +include_guard(GLOBAL) +block() + set(suffix) + if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") + set(suffix "d") + endif() + rcl_init(osg_earth) + rcl_set_root_dir(osg_earth "${EXTERNAL_DIR}/${G_Architecture_Name}_osg_earth") + rcl_set_build_cache_root(osg_earth "C:/b/osg_earth") + if(WIN32) + rcl_set_build_cache_root(osg_earth "C:/b/osg_earth") + endif() + set(zlib_opts) + list(APPEND zlib_opts + -DBUILD_SHARED_LIBS=ON + -DCMAKE_DEBUG_POSTFIX=d + -DZLIB_BUILD_EXAMPLES=OFF + ) + _register_git_cmake_library(osg_earth + zlib + "https://github.com/madler/zlib.git" + "v1.3.1" + ) + rcl_cmake_library_set_cmake_options(osg_earth zlib ${zlib_opts}) + rcl_get_effective_install_dir(osg_earth zlib ZLIB_ROOT) + set(ZLIB_DEBUG_SUFFIX) + if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug") + set(ZLIB_DEBUG_SUFFIX "d") + endif () + set(ZLIB_INCLUDE_DIR "${ZLIB_ROOT}/include") + if (MSVC) + set(ZLIB_LIBRARY_DEBUG "${ZLIB_ROOT}/lib/zlibd.lib") + set(ZLIB_LIBRARY_RELEASE "${ZLIB_ROOT}/lib/zlib.lib") + set(ZLIB_LIBRARY "${ZLIB_ROOT}/lib/zlib${ZLIB_DEBUG_SUFFIX}.lib") + else () + set(ZLIB_LIBRARY_DEBUG "${ZLIB_ROOT}/lib/libz.so") + set(ZLIB_LIBRARY_RELEASE "${ZLIB_ROOT}/lib/libz.so") + set(ZLIB_LIBRARY "${ZLIB_ROOT}/lib/libz.so") + endif () + set(ZLIB_LIBRARIES "${ZLIB_LIBRARY}") + rcl_cmake_library_set_other_use_opt(osg_earth zlib + "-DCMAKE_PREFIX_PATH=\"${ZLIB_ROOT}\"" + "-DZLIB_ROOT=\"${ZLIB_ROOT}\"" + "-DZLIB_INCLUDE_DIR=\"${ZLIB_INCLUDE_DIR}\"" + "-DZLIB_LIBRARY=\"${ZLIB_LIBRARY}\"" + "-DZLIB_LIBRARIES=\"${ZLIB_LIBRARIES}\"" + "-DZLIB_LIBRARY_DEBUG=\"${ZLIB_LIBRARY_DEBUG}\"" + "-DZLIB_LIBRARY_RELEASE=\"${ZLIB_LIBRARY_RELEASE}\"" + ) + rcl_cmake_library_set_init_script(osg_earth zlib + "list(APPEND CMAKE_PREFIX_PATH \"${ZLIB_ROOT}\")" + "set(ZLIB_ROOT \"${ZLIB_ROOT}\")" + "set(ZLIB_INCLUDE_DIR \"${ZLIB_INCLUDE_DIR}\")" + "set(ZLIB_LIBRARY \"${ZLIB_LIBRARY}\")" + "set(ZLIB_LIBRARIES \"${ZLIB_LIBRARIES}\")" + "set(ZLIB_LIBRARY_DEBUG \"${ZLIB_LIBRARY_DEBUG}\")" + "set(ZLIB_LIBRARY_RELEASE \"${ZLIB_LIBRARY_RELEASE}\")" + ) + rcl_cmake_library_set_clear_script(osg_earth zlib + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${ZLIB_ROOT}\")" + "unset(ZLIB_ROOT)" + "unset(ZLIB_INCLUDE_DIR)" + "unset(ZLIB_LIBRARY)" + "unset(ZLIB_LIBRARIES)" + "unset(ZLIB_LIBRARY_DEBUG)" + "unset(ZLIB_LIBRARY_RELEASE)" + ) + set(png_opts) + list(APPEND png_opts + -DPNG_SHARED=ON + -DPNG_STATIC=OFF + -DPNG_TESTS=OFF + -DPNG_TOOLS=OFF + -DPNG_EXECUTABLES=OFF + -DPNG_DEBUG_POSTFIX= + "-DCMAKE_PREFIX_PATH=${ZLIB_ROOT}" + "-DZLIB_ROOT=${ZLIB_ROOT}" + "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}" + "-DZLIB_LIBRARY=${ZLIB_LIBRARY}" + ) + _register_git_cmake_library(osg_earth + png + "https://github.com/pnggroup/libpng.git" + "v1.6.50" + ) + rcl_cmake_library_set_cmake_options(osg_earth png ${png_opts}) + rcl_cmake_library_set_deps(osg_earth png zlib) + rcl_get_effective_install_dir(osg_earth png PNG_ROOT) + set(PNG_INCLUDE_DIR "${PNG_ROOT}/include") + set(PNG_PNG_INCLUDE_DIR "${PNG_ROOT}/include") + if (MSVC) + set(PNG_LIBRARY "${PNG_ROOT}/lib/libpng16.lib") + else () + set(PNG_LIBRARY "${PNG_ROOT}/lib/libpng16.so") + endif () + set(PNG_LIBRARIES "${PNG_LIBRARY}") + set(PNG_LIBRARY_DEBUG "${PNG_LIBRARY}") + set(PNG_LIBRARY_RELEASE "${PNG_LIBRARY}") + rcl_cmake_library_set_other_use_opt(osg_earth png + "-DCMAKE_PREFIX_PATH=\"${PNG_ROOT}\"" + "-DPNG_ROOT=\"${PNG_ROOT}\"" + "-DPNG_INCLUDE_DIR=\"${PNG_INCLUDE_DIR}\"" + "-DPNG_PNG_INCLUDE_DIR=\"${PNG_PNG_INCLUDE_DIR}\"" + "-DPNG_LIBRARY=\"${PNG_LIBRARY}\"" + "-DPNG_LIBRARIES=\"${PNG_LIBRARIES}\"" + "-DPNG_LIBRARY_DEBUG=\"${PNG_LIBRARY_DEBUG}\"" + "-DPNG_LIBRARY_RELEASE=\"${PNG_LIBRARY_RELEASE}\"" + ) + rcl_cmake_library_set_init_script(osg_earth png + "list(APPEND CMAKE_PREFIX_PATH \"${PNG_ROOT}\")" + "set(PNG_ROOT \"${PNG_ROOT}\")" + "set(PNG_INCLUDE_DIR \"${PNG_INCLUDE_DIR}\")" + "set(PNG_PNG_INCLUDE_DIR \"${PNG_PNG_INCLUDE_DIR}\")" + "set(PNG_LIBRARY \"${PNG_LIBRARY}\")" + "set(PNG_LIBRARIES \"${PNG_LIBRARIES}\")" + "set(PNG_LIBRARY_DEBUG \"${PNG_LIBRARY_DEBUG}\")" + "set(PNG_LIBRARY_RELEASE \"${PNG_LIBRARY_RELEASE}\")" + ) + rcl_cmake_library_set_clear_script(osg_earth png + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${PNG_ROOT}\")" + "unset(PNG_ROOT)" + "unset(PNG_INCLUDE_DIR)" + "unset(PNG_PNG_INCLUDE_DIR)" + "unset(PNG_LIBRARY)" + "unset(PNG_LIBRARIES)" + "unset(PNG_LIBRARY_DEBUG)" + "unset(PNG_LIBRARY_RELEASE)" + ) + set(jpeg_opts) + list(APPEND jpeg_opts + -DENABLE_SHARED=ON + -DENABLE_STATIC=OFF + -DWITH_CRT_DLL=ON + -DWITH_TURBOJPEG=ON + -DWITH_TOOLS=OFF + -DWITH_TESTS=OFF + -DWITH_JAVA=OFF + ) + _register_git_cmake_library(osg_earth + jpeg + "https://github.com/libjpeg-turbo/libjpeg-turbo.git" + "3.1.2" + ) + rcl_cmake_library_set_cmake_options(osg_earth jpeg ${jpeg_opts}) + rcl_get_effective_install_dir(osg_earth jpeg JPEG_ROOT) + set(JPEG_INCLUDE_DIR "${JPEG_ROOT}/include") + if (MSVC) + set(JPEG_LIBRARY "${JPEG_ROOT}/lib/jpeg.lib") + else () + set(JPEG_LIBRARY "${JPEG_ROOT}/lib/libjpeg.so") + endif () + set(JPEG_LIBRARIES "${JPEG_LIBRARY}") + set(JPEG_LIBRARY_DEBUG "${JPEG_LIBRARY}") + set(JPEG_LIBRARY_RELEASE "${JPEG_LIBRARY}") + rcl_cmake_library_set_other_use_opt(osg_earth jpeg + "-DCMAKE_PREFIX_PATH=\"${JPEG_ROOT}\"" + "-DJPEG_ROOT=\"${JPEG_ROOT}\"" + "-DJPEG_INCLUDE_DIR=\"${JPEG_INCLUDE_DIR}\"" + "-DJPEG_LIBRARY=\"${JPEG_LIBRARY}\"" + "-DJPEG_LIBRARIES=\"${JPEG_LIBRARIES}\"" + "-DJPEG_LIBRARY_DEBUG=\"${JPEG_LIBRARY_DEBUG}\"" + "-DJPEG_LIBRARY_RELEASE=\"${JPEG_LIBRARY_RELEASE}\"" + ) + rcl_cmake_library_set_init_script(osg_earth jpeg + "list(APPEND CMAKE_PREFIX_PATH \"${JPEG_ROOT}\")" + "set(JPEG_ROOT \"${JPEG_ROOT}\")" + "set(JPEG_INCLUDE_DIR \"${JPEG_INCLUDE_DIR}\")" + "set(JPEG_LIBRARY \"${JPEG_LIBRARY}\")" + "set(JPEG_LIBRARIES \"${JPEG_LIBRARIES}\")" + "set(JPEG_LIBRARY_DEBUG \"${JPEG_LIBRARY_DEBUG}\")" + "set(JPEG_LIBRARY_RELEASE \"${JPEG_LIBRARY_RELEASE}\")" + ) + rcl_cmake_library_set_clear_script(osg_earth jpeg + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${JPEG_ROOT}\")" + "unset(JPEG_ROOT)" + "unset(JPEG_INCLUDE_DIR)" + "unset(JPEG_LIBRARY)" + "unset(JPEG_LIBRARIES)" + "unset(JPEG_LIBRARY_DEBUG)" + "unset(JPEG_LIBRARY_RELEASE)" + ) + set(TIFF_PREFIX_PATH "${ZLIB_ROOT}" "${JPEG_ROOT}") + list(JOIN TIFF_PREFIX_PATH "\\;" TIFF_PREFIX_PATH_ARG) + set(tiff_opts) + list(APPEND tiff_opts + -DBUILD_SHARED_LIBS=ON + -DCMAKE_DEBUG_POSTFIX=d + -Dtiff-tools=OFF + -Dtiff-tests=OFF + -Dtiff-contrib=OFF + -Dtiff-docs=OFF + -Dtiff-install=ON + -Dzlib=ON + -Djpeg=ON + -Dlibdeflate=OFF + -Djbig=OFF + -Dlerc=OFF + -Dlzma=OFF + -Dzstd=OFF + -Dwebp=OFF + -Dcxx=ON + "-DCMAKE_PREFIX_PATH=${TIFF_PREFIX_PATH_ARG}" + "-DZLIB_ROOT=${ZLIB_ROOT}" + "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}" + "-DZLIB_LIBRARY=${ZLIB_LIBRARY}" + "-DJPEG_ROOT=${JPEG_ROOT}" + "-DJPEG_INCLUDE_DIR=${JPEG_INCLUDE_DIR}" + "-DJPEG_LIBRARY=${JPEG_LIBRARY}" + ) + _register_git_cmake_library(osg_earth + tiff + "https://github.com/libsdl-org/libtiff.git" + "v4.7.0" + ) + rcl_cmake_library_set_cmake_options(osg_earth tiff ${tiff_opts}) + rcl_cmake_library_set_deps(osg_earth tiff zlib jpeg) + rcl_get_effective_install_dir(osg_earth tiff TIFF_ROOT) + set(TIFF_INCLUDE_DIR "${TIFF_ROOT}/include") + if (MSVC) + set(TIFF_LIBRARY_DEBUG "${TIFF_ROOT}/lib/tiffd.lib") + set(TIFF_LIBRARY_RELEASE "${TIFF_ROOT}/lib/tiff.lib") + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(TIFF_LIBRARY "${TIFF_LIBRARY_DEBUG}") + else () + set(TIFF_LIBRARY "${TIFF_LIBRARY_RELEASE}") + endif () + else () + set(TIFF_LIBRARY_DEBUG "${TIFF_ROOT}/lib/libtiff.so") + set(TIFF_LIBRARY_RELEASE "${TIFF_ROOT}/lib/libtiff.so") + set(TIFF_LIBRARY "${TIFF_ROOT}/lib/libtiff.so") + endif () + set(TIFF_LIBRARIES "${TIFF_LIBRARY}") + rcl_cmake_library_set_other_use_opt(osg_earth tiff + "-DCMAKE_PREFIX_PATH=\"${TIFF_ROOT}\"" + "-DTIFF_ROOT=\"${TIFF_ROOT}\"" + "-DTIFF_INCLUDE_DIR=\"${TIFF_INCLUDE_DIR}\"" + "-DTIFF_LIBRARY=\"${TIFF_LIBRARY}\"" + "-DTIFF_LIBRARIES=\"${TIFF_LIBRARIES}\"" + "-DTIFF_LIBRARY_DEBUG=\"${TIFF_LIBRARY_DEBUG}\"" + "-DTIFF_LIBRARY_RELEASE=\"${TIFF_LIBRARY_RELEASE}\"" + ) + rcl_cmake_library_set_init_script(osg_earth tiff + "list(APPEND CMAKE_PREFIX_PATH \"${TIFF_ROOT}\")" + "set(TIFF_ROOT \"${TIFF_ROOT}\")" + "set(TIFF_INCLUDE_DIR \"${TIFF_INCLUDE_DIR}\")" + "set(TIFF_LIBRARY \"${TIFF_LIBRARY}\")" + "set(TIFF_LIBRARIES \"${TIFF_LIBRARIES}\")" + "set(TIFF_LIBRARY_DEBUG \"${TIFF_LIBRARY_DEBUG}\")" + "set(TIFF_LIBRARY_RELEASE \"${TIFF_LIBRARY_RELEASE}\")" + ) + rcl_cmake_library_set_clear_script(osg_earth tiff + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${TIFF_ROOT}\")" + "unset(TIFF_ROOT)" + "unset(TIFF_INCLUDE_DIR)" + "unset(TIFF_LIBRARY)" + "unset(TIFF_LIBRARIES)" + "unset(TIFF_LIBRARY_DEBUG)" + "unset(TIFF_LIBRARY_RELEASE)" + ) + set(FREETYPE_PREFIX_PATH "${ZLIB_ROOT}" "${PNG_ROOT}") + list(JOIN FREETYPE_PREFIX_PATH "\\;" FREETYPE_PREFIX_PATH_ARG) + set(freetype_opts) + list(APPEND freetype_opts + -DBUILD_SHARED_LIBS=ON + -DCMAKE_DEBUG_POSTFIX= + -DFT_REQUIRE_ZLIB=ON + -DFT_REQUIRE_PNG=ON + -DFT_DISABLE_BZIP2=ON + -DFT_DISABLE_HARFBUZZ=ON + -DFT_DISABLE_BROTLI=ON + -DFT_ENABLE_ERROR_STRINGS=ON + "-DCMAKE_PREFIX_PATH=${FREETYPE_PREFIX_PATH_ARG}" + "-DZLIB_ROOT=${ZLIB_ROOT}" + "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}" + "-DZLIB_LIBRARY=${ZLIB_LIBRARY}" + "-DPNG_ROOT=${PNG_ROOT}" + "-DPNG_PNG_INCLUDE_DIR=${PNG_PNG_INCLUDE_DIR}" + "-DPNG_LIBRARY=${PNG_LIBRARY}" + ) + _register_git_cmake_library(osg_earth + freetype + "https://github.com/freetype/freetype.git" + "VER-2-14-3" + ) + rcl_cmake_library_set_cmake_options(osg_earth freetype ${freetype_opts}) + rcl_cmake_library_set_deps(osg_earth freetype zlib png) + rcl_get_effective_install_dir(osg_earth freetype FREETYPE_ROOT) + set(FREETYPE_INCLUDE_DIRS "${FREETYPE_ROOT}/include/freetype2") + set(FREETYPE_INCLUDE_DIR_freetype2 "${FREETYPE_ROOT}/include/freetype2") + set(FREETYPE_INCLUDE_DIR_ft2build "${FREETYPE_ROOT}/include/freetype2") + if (MSVC) + set(FREETYPE_LIBRARY "${FREETYPE_ROOT}/lib/freetype${suffix}.lib") + else () + set(FREETYPE_LIBRARY "${FREETYPE_ROOT}/lib/libfreetype.so") + endif () + set(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}") + set(FREETYPE_LIBRARY_DEBUG "${FREETYPE_LIBRARY}") + set(FREETYPE_LIBRARY_RELEASE "${FREETYPE_LIBRARY}") + rcl_cmake_library_set_other_use_opt(osg_earth freetype + "-DCMAKE_PREFIX_PATH=\"${FREETYPE_ROOT}\"" + "-DFREETYPE_ROOT=\"${FREETYPE_ROOT}\"" + "-DFREETYPE_INCLUDE_DIRS=\"${FREETYPE_INCLUDE_DIRS}\"" + "-DFREETYPE_INCLUDE_DIR_freetype2=\"${FREETYPE_INCLUDE_DIR_freetype2}\"" + "-DFREETYPE_INCLUDE_DIR_ft2build=\"${FREETYPE_INCLUDE_DIR_ft2build}\"" + "-DFREETYPE_LIBRARY=\"${FREETYPE_LIBRARY}\"" + "-DFREETYPE_LIBRARIES=\"${FREETYPE_LIBRARIES}\"" + "-DFREETYPE_LIBRARY_DEBUG=\"${FREETYPE_LIBRARY_DEBUG}\"" + "-DFREETYPE_LIBRARY_RELEASE=\"${FREETYPE_LIBRARY_RELEASE}\"" + ) + rcl_cmake_library_set_init_script(osg_earth freetype + "list(APPEND CMAKE_PREFIX_PATH \"${FREETYPE_ROOT}\")" + "set(FREETYPE_ROOT \"${FREETYPE_ROOT}\")" + "set(FREETYPE_INCLUDE_DIRS \"${FREETYPE_INCLUDE_DIRS}\")" + "set(FREETYPE_INCLUDE_DIR_freetype2 \"${FREETYPE_INCLUDE_DIR_freetype2}\")" + "set(FREETYPE_INCLUDE_DIR_ft2build \"${FREETYPE_INCLUDE_DIR_ft2build}\")" + "set(FREETYPE_LIBRARY \"${FREETYPE_LIBRARY}\")" + "set(FREETYPE_LIBRARIES \"${FREETYPE_LIBRARIES}\")" + "set(FREETYPE_LIBRARY_DEBUG \"${FREETYPE_LIBRARY_DEBUG}\")" + "set(FREETYPE_LIBRARY_RELEASE \"${FREETYPE_LIBRARY_RELEASE}\")" + ) + rcl_cmake_library_set_clear_script(osg_earth freetype + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${FREETYPE_ROOT}\")" + "unset(FREETYPE_ROOT)" + "unset(FREETYPE_INCLUDE_DIRS)" + "unset(FREETYPE_INCLUDE_DIR_freetype2)" + "unset(FREETYPE_INCLUDE_DIR_ft2build)" + "unset(FREETYPE_LIBRARY)" + "unset(FREETYPE_LIBRARIES)" + "unset(FREETYPE_LIBRARY_DEBUG)" + "unset(FREETYPE_LIBRARY_RELEASE)" + ) + set(sqlite3_opts) + list(APPEND sqlite3_opts + -DCMAKE_DEBUG_POSTFIX= + -DBUILD_SHELL=ON + -DBUILD_SHELL_STATIC=OFF + -DSQLITE_ENABLE_COLUMN_METADATA=ON + -DSQLITE_OMIT_DECLTYPE=OFF + -DSQLITE_ENABLE_RTREE=ON + -DSQLITE_ENABLE_FTS5=ON + -DSQLITE_OMIT_JSON=OFF + ) + _register_git_cmake_library(osg_earth + sqlite3 + "https://github.com/azadkuh/sqlite-amalgamation.git" + "master" + ) + rcl_cmake_library_set_cmake_options(osg_earth sqlite3 ${sqlite3_opts}) + rcl_get_effective_install_dir(osg_earth sqlite3 SQLITE3_ROOT) + set(SQLITE3_INCLUDE_DIR "${SQLITE3_ROOT}/include") + if (MSVC) + set(SQLITE3_LIBRARY "${SQLITE3_ROOT}/lib/sqlite3${suffix}.lib") + set(SQLITE3_EXECUTABLE "${SQLITE3_ROOT}/bin/sqlite3.exe") + else () + set(SQLITE3_LIBRARY "${SQLITE3_ROOT}/lib/libsqlite3.a") + set(SQLITE3_EXECUTABLE "${SQLITE3_ROOT}/bin/sqlite3") + endif () + rcl_cmake_library_set_other_use_opt(osg_earth sqlite3 + "-DCMAKE_PREFIX_PATH=\"${SQLITE3_ROOT}\"" + "-DSQLite3_ROOT=\"${SQLITE3_ROOT}\"" + "-DSQLite3_INCLUDE_DIR=\"${SQLITE3_INCLUDE_DIR}\"" + "-DSQLite3_INCLUDE_DIRS=\"${SQLITE3_INCLUDE_DIR}\"" + "-DSQLite3_LIBRARY=\"${SQLITE3_LIBRARY}\"" + "-DSQLite3_LIBRARIES=\"${SQLITE3_LIBRARY}\"" + "-DSQLite3_EXECUTABLE=\"${SQLITE3_EXECUTABLE}\"" + "-DEXE_SQLITE3=\"${SQLITE3_EXECUTABLE}\"" + ) + rcl_cmake_library_set_init_script(osg_earth sqlite3 + "list(APPEND CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")" + "set(SQLite3_ROOT \"${SQLITE3_ROOT}\")" + "set(SQLite3_INCLUDE_DIR \"${SQLITE3_INCLUDE_DIR}\")" + "set(SQLite3_INCLUDE_DIRS \"${SQLITE3_INCLUDE_DIR}\")" + "set(SQLite3_LIBRARY \"${SQLITE3_LIBRARY}\")" + "set(SQLite3_LIBRARIES \"${SQLITE3_LIBRARY}\")" + "set(SQLite3_EXECUTABLE \"${SQLITE3_EXECUTABLE}\")" + "set(EXE_SQLITE3 \"${SQLITE3_EXECUTABLE}\")" + ) + rcl_cmake_library_set_clear_script(osg_earth sqlite3 + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")" + "unset(SQLite3_ROOT)" + "unset(SQLite3_INCLUDE_DIR)" + "unset(SQLite3_INCLUDE_DIRS)" + "unset(SQLite3_LIBRARY)" + "unset(SQLite3_LIBRARIES)" + "unset(SQLite3_EXECUTABLE)" + "unset(EXE_SQLITE3)" + ) + set(LIBZIP_PREFIX_PATH "${ZLIB_ROOT}") + list(JOIN LIBZIP_PREFIX_PATH "\\;" LIBZIP_PREFIX_PATH_ARG) + set(libzip_opts) + list(APPEND libzip_opts + -DBUILD_SHARED_LIBS=ON + -DBUILD_TOOLS=OFF + -DBUILD_REGRESS=OFF + -DBUILD_OSSFUZZ=OFF + -DBUILD_EXAMPLES=OFF + -DBUILD_DOC=OFF + -DLIBZIP_DO_INSTALL=ON + -DENABLE_COMMONCRYPTO=OFF + -DENABLE_GNUTLS=OFF + -DENABLE_MBEDTLS=OFF + -DENABLE_OPENSSL=OFF + -DENABLE_WINDOWS_CRYPTO=ON + -DENABLE_BZIP2=OFF + -DENABLE_LZMA=OFF + -DENABLE_ZSTD=OFF + "-DCMAKE_PREFIX_PATH=${LIBZIP_PREFIX_PATH_ARG}" + "-DZLIB_ROOT=${ZLIB_ROOT}" + "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}" + "-DZLIB_LIBRARY=${ZLIB_LIBRARY}" + ) + _register_git_cmake_library(osg_earth + libzip + "https://github.com/nih-at/libzip.git" + "v1.11.4" + ) + rcl_cmake_library_set_cmake_options(osg_earth libzip ${libzip_opts}) + rcl_cmake_library_set_deps(osg_earth libzip zlib) + rcl_get_effective_install_dir(osg_earth libzip LIBZIP_ROOT) + rcl_cmake_library_set_other_use_opt(osg_earth libzip + "-DCMAKE_PREFIX_PATH=\"${LIBZIP_ROOT}\"" + "-DLibZip_ROOT=\"${LIBZIP_ROOT}\"" + "-DLIBZIP_ROOT=\"${LIBZIP_ROOT}\"" + ) + rcl_cmake_library_set_init_script(osg_earth libzip + "list(APPEND CMAKE_PREFIX_PATH \"${LIBZIP_ROOT}\")" + "set(LibZip_ROOT \"${LIBZIP_ROOT}\")" + "set(LIBZIP_ROOT \"${LIBZIP_ROOT}\")" + ) + rcl_cmake_library_set_clear_script(osg_earth libzip + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${LIBZIP_ROOT}\")" + "unset(LibZip_ROOT)" + "unset(LIBZIP_ROOT)" + ) + set(PROTOBUF_PREFIX_PATH "${ZLIB_ROOT}") + list(JOIN PROTOBUF_PREFIX_PATH "\\;" PROTOBUF_PREFIX_PATH_ARG) + set(protobuf_opts) + list(APPEND protobuf_opts + -Dprotobuf_BUILD_TESTS=OFF + -Dprotobuf_BUILD_SHARED_LIBS=OFF + -Dprotobuf_BUILD_PROTOC_BINARIES=ON + -Dprotobuf_BUILD_LIBPROTOC=ON + -Dprotobuf_BUILD_EXAMPLES=OFF + -Dprotobuf_MSVC_STATIC_RUNTIME=OFF + -Dprotobuf_WITH_ZLIB=ON + "-DCMAKE_PREFIX_PATH=${PROTOBUF_PREFIX_PATH_ARG}" + "-DZLIB_ROOT=${ZLIB_ROOT}" + "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}" + "-DZLIB_LIBRARY=${ZLIB_LIBRARY}" + ) + _register_git_cmake_library(osg_earth + protobuf + "https://github.com/protocolbuffers/protobuf.git" + "v21.12" + ) + rcl_cmake_library_set_cmake_options(osg_earth protobuf ${protobuf_opts}) + rcl_cmake_library_set_deps(osg_earth protobuf zlib) + rcl_get_effective_install_dir(osg_earth protobuf PROTOBUF_ROOT) + rcl_cmake_library_set_other_use_opt(osg_earth protobuf + "-DCMAKE_PREFIX_PATH=\"${PROTOBUF_ROOT}\"" + "-DProtobuf_ROOT=\"${PROTOBUF_ROOT}\"" + "-DProtobuf_DIR=\"${PROTOBUF_ROOT}/lib/cmake/protobuf\"" + ) + rcl_cmake_library_set_init_script(osg_earth protobuf + "list(APPEND CMAKE_PREFIX_PATH \"${PROTOBUF_ROOT}\")" + "set(Protobuf_ROOT \"${PROTOBUF_ROOT}\")" + "set(Protobuf_DIR \"${PROTOBUF_ROOT}/lib/cmake/protobuf\")" + ) + rcl_cmake_library_set_clear_script(osg_earth protobuf + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${PROTOBUF_ROOT}\")" + "unset(Protobuf_ROOT)" + "unset(Protobuf_DIR)" + ) + set(geos_opts) + list(APPEND geos_opts + -DBUILD_SHARED_LIBS=ON + -DCMAKE_DEBUG_POSTFIX= + -DBUILD_TESTING=OFF + -DBUILD_DOCUMENTATION=OFF + -DBUILD_GEOSOP=OFF + ) + _register_git_cmake_library(osg_earth + geos + "https://github.com/libgeos/geos.git" + "3.13.1" + ) + rcl_cmake_library_set_cmake_options(osg_earth geos ${geos_opts}) + rcl_get_effective_install_dir(osg_earth geos GEOS_ROOT) + rcl_cmake_library_set_other_use_opt(osg_earth geos + "-DCMAKE_PREFIX_PATH=\"${GEOS_ROOT}\"" + "-DGEOS_ROOT=\"${GEOS_ROOT}\"" + "-Dgeos_DIR=\"${GEOS_ROOT}/lib/cmake/GEOS\"" + ) + rcl_cmake_library_set_init_script(osg_earth geos + "list(APPEND CMAKE_PREFIX_PATH \"${GEOS_ROOT}\")" + "set(GEOS_ROOT \"${GEOS_ROOT}\")" + "set(geos_DIR \"${GEOS_ROOT}/lib/cmake/GEOS\")" + ) + rcl_cmake_library_set_clear_script(osg_earth geos + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${GEOS_ROOT}\")" + "unset(GEOS_ROOT)" + "unset(geos_DIR)" + ) + set(CURL_PREFIX_PATH "${ZLIB_ROOT}") + list(JOIN CURL_PREFIX_PATH "\\;" CURL_PREFIX_PATH_ARG) + set(curl_opts) + list(APPEND curl_opts + -DBUILD_SHARED_LIBS=ON + -DBUILD_STATIC_LIBS=OFF + -DBUILD_CURL_EXE=OFF + -DBUILD_EXAMPLES=OFF + -DBUILD_TESTING=OFF + -DBUILD_LIBCURL_DOCS=OFF + -DBUILD_MISC_DOCS=OFF + -DENABLE_CURL_MANUAL=OFF + -DCURL_USE_LIBPSL=OFF + -DCURL_USE_LIBSSH2=OFF + -DCURL_BROTLI=OFF + -DCURL_ZSTD=OFF + -DCURL_ZLIB=ON + "-DCMAKE_PREFIX_PATH=${CURL_PREFIX_PATH_ARG}" + "-DZLIB_ROOT=${ZLIB_ROOT}" + "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}" + "-DZLIB_LIBRARY=${ZLIB_LIBRARY}" + ) + if (WIN32) + list(APPEND curl_opts + -DCURL_USE_SCHANNEL=ON + -DCURL_USE_OPENSSL=OFF + -DCURL_WINDOWS_SSPI=ON + -DUSE_WIN32_IDN=ON + ) + endif () + _register_git_cmake_library(osg_earth + curl + "https://github.com/curl/curl.git" + "curl-8_21_0" + ) + rcl_cmake_library_set_cmake_options(osg_earth curl ${curl_opts}) + rcl_cmake_library_set_deps(osg_earth curl zlib) + rcl_get_effective_install_dir(osg_earth curl CURL_ROOT) + if (MSVC) + set(CURL_LIBRARY_DEBUG "${CURL_ROOT}/lib/libcurl-d_imp.lib") + set(CURL_LIBRARY_RELEASE "${CURL_ROOT}/lib/libcurl_imp.lib") + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CURL_LIBRARY "${CURL_LIBRARY_DEBUG}") + else () + set(CURL_LIBRARY "${CURL_LIBRARY_RELEASE}") + endif () + else () + set(CURL_LIBRARY_DEBUG "${CURL_ROOT}/lib/libcurl.so") + set(CURL_LIBRARY_RELEASE "${CURL_ROOT}/lib/libcurl.so") + set(CURL_LIBRARY "${CURL_ROOT}/lib/libcurl.so") + endif () + set(CURL_LIBRARIES "${CURL_LIBRARY}") + rcl_cmake_library_set_other_use_opt(osg_earth curl + "-DCMAKE_PREFIX_PATH=\"${CURL_ROOT}\"" + "-DCURL_ROOT=\"${CURL_ROOT}\"" + "-DCURL_LIBRARY=\"${CURL_LIBRARY}\"" + "-DCURL_LIBRARIES=\"${CURL_LIBRARIES}\"" + "-DCURL_LIBRARY_DEBUG=\"${CURL_LIBRARY_DEBUG}\"" + "-DCURL_LIBRARY_RELEASE=\"${CURL_LIBRARY_RELEASE}\"" + ) + rcl_cmake_library_set_init_script(osg_earth curl + "list(APPEND CMAKE_PREFIX_PATH \"${CURL_ROOT}\")" + "set(CURL_ROOT \"${CURL_ROOT}\")" + "set(CURL_LIBRARY \"${CURL_LIBRARY}\")" + "set(CURL_LIBRARIES \"${CURL_LIBRARIES}\")" + "set(CURL_LIBRARY_DEBUG \"${CURL_LIBRARY_DEBUG}\")" + "set(CURL_LIBRARY_RELEASE \"${CURL_LIBRARY_RELEASE}\")" + ) + rcl_cmake_library_set_clear_script(osg_earth curl + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${CURL_ROOT}\")" + "unset(CURL_ROOT)" + "unset(CURL_LIBRARY)" + "unset(CURL_LIBRARIES)" + "unset(CURL_LIBRARY_DEBUG)" + "unset(CURL_LIBRARY_RELEASE)" + ) + set(PROJ_PREFIX_PATH "${SQLITE3_ROOT}" "${CURL_ROOT}" "${TIFF_ROOT}") + list(JOIN PROJ_PREFIX_PATH "\\;" PROJ_PREFIX_PATH_ARG) + set(proj_opts) + list(APPEND proj_opts + -DBUILD_SHARED_LIBS=ON + -DBUILD_APPS=OFF + -DBUILD_TESTING=OFF + -DENABLE_CURL=ON + -DENABLE_TIFF=ON + "-DCMAKE_PREFIX_PATH=${PROJ_PREFIX_PATH_ARG}" + "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}" + "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}" + "-DSQLite3_EXECUTABLE=${SQLITE3_EXECUTABLE}" + "-DEXE_SQLITE3=${SQLITE3_EXECUTABLE}" + "-DCURL_ROOT=${CURL_ROOT}" + "-DTIFF_ROOT=${TIFF_ROOT}" + "-DTIFF_INCLUDE_DIR=${TIFF_INCLUDE_DIR}" + "-DTIFF_LIBRARY=${TIFF_LIBRARY}" + ) + _register_git_cmake_library(osg_earth + proj + "https://github.com/OSGeo/PROJ.git" + "9.4.1" + ) + rcl_cmake_library_set_cmake_options(osg_earth proj ${proj_opts}) + rcl_cmake_library_set_deps(osg_earth proj sqlite3 curl tiff) + rcl_get_effective_install_dir(osg_earth proj PROJ_ROOT) + rcl_cmake_library_set_other_use_opt(osg_earth proj + "-DCMAKE_PREFIX_PATH=\"${PROJ_ROOT}\"" + "-DPROJ_ROOT=\"${PROJ_ROOT}\"" + ) + rcl_cmake_library_set_init_script(osg_earth proj + "list(APPEND CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")" + "set(PROJ_ROOT \"${PROJ_ROOT}\")" + ) + rcl_cmake_library_set_clear_script(osg_earth proj + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")" + "unset(PROJ_ROOT)" + ) + set(GDAL_PREFIX_PATH "${ZLIB_ROOT}" "${PNG_ROOT}" "${JPEG_ROOT}" "${TIFF_ROOT}" "${CURL_ROOT}" "${SQLITE3_ROOT}" "${PROJ_ROOT}" "${GEOS_ROOT}") + list(JOIN GDAL_PREFIX_PATH "\\;" GDAL_PREFIX_PATH_ARG) + set(gdal_opts) + list(APPEND gdal_opts + -DCMAKE_DEBUG_POSTFIX=d + -DBUILD_SHARED_LIBS=ON + -DBUILD_APPS=OFF + -DBUILD_TESTING=OFF + -DBUILD_PYTHON_BINDINGS=OFF + -DGDAL_BUILD_OPTIONAL_DRIVERS=ON + -DOGR_BUILD_OPTIONAL_DRIVERS=ON + -DGDAL_USE_EXTERNAL_LIBS=ON + -DGDAL_USE_INTERNAL_LIBS=WHEN_NO_EXTERNAL + -DGDAL_USE_CURL=ON + -DGDAL_USE_SQLITE3=ON + -DGDAL_USE_PROJ=ON + -DGDAL_USE_GEOS=ON + -DGDAL_USE_ZLIB=ON + -DGDAL_USE_PNG=ON + -DGDAL_USE_JPEG=ON + -DGDAL_USE_TIFF=ON + -DGDAL_USE_EXPAT=OFF + "-DCMAKE_PREFIX_PATH=${GDAL_PREFIX_PATH_ARG}" + "-DZLIB_ROOT=${ZLIB_ROOT}" + "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}" + "-DZLIB_LIBRARY=${ZLIB_LIBRARY}" + "-DPNG_ROOT=${PNG_ROOT}" + "-DPNG_PNG_INCLUDE_DIR=${PNG_PNG_INCLUDE_DIR}" + "-DPNG_LIBRARY=${PNG_LIBRARY}" + "-DJPEG_ROOT=${JPEG_ROOT}" + "-DJPEG_INCLUDE_DIR=${JPEG_INCLUDE_DIR}" + "-DJPEG_LIBRARY=${JPEG_LIBRARY}" + "-DTIFF_ROOT=${TIFF_ROOT}" + "-DTIFF_INCLUDE_DIR=${TIFF_INCLUDE_DIR}" + "-DTIFF_LIBRARY=${TIFF_LIBRARY}" + "-DCURL_ROOT=${CURL_ROOT}" + "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}" + "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}" + "-DPROJ_ROOT=${PROJ_ROOT}" + "-DGEOS_ROOT=${GEOS_ROOT}" + ) + _register_git_cmake_library(osg_earth + gdal + "https://github.com/OSGeo/gdal.git" + "v3.9.3" + ) + rcl_cmake_library_set_cmake_options(osg_earth gdal ${gdal_opts}) + rcl_cmake_library_set_deps(osg_earth gdal zlib png jpeg tiff curl sqlite3 proj geos) + rcl_get_effective_install_dir(osg_earth gdal GDAL_ROOT) + set(GDAL_INCLUDE_DIR "${GDAL_ROOT}/include") + if (MSVC) + set(GDAL_LIBRARY_DEBUG "${GDAL_ROOT}/lib/gdald.lib") + set(GDAL_LIBRARY_RELEASE "${GDAL_ROOT}/lib/gdal.lib") + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(GDAL_LIBRARY "${GDAL_LIBRARY_DEBUG}") + else () + set(GDAL_LIBRARY "${GDAL_LIBRARY_RELEASE}") + endif () + else () + set(GDAL_LIBRARY_DEBUG "${GDAL_ROOT}/lib/libgdal.so") + set(GDAL_LIBRARY_RELEASE "${GDAL_ROOT}/lib/libgdal.so") + set(GDAL_LIBRARY "${GDAL_ROOT}/lib/libgdal.so") + endif () + set(GDAL_LIBRARIES "${GDAL_LIBRARY}") + rcl_cmake_library_set_other_use_opt(osg_earth gdal + "-DCMAKE_PREFIX_PATH=\"${GDAL_ROOT}\"" + "-DGDAL_ROOT=\"${GDAL_ROOT}\"" + "-DGDAL_INCLUDE_DIR=\"${GDAL_INCLUDE_DIR}\"" + "-DGDAL_LIBRARY=\"${GDAL_LIBRARY}\"" + "-DGDAL_LIBRARIES=\"${GDAL_LIBRARIES}\"" + "-DGDAL_LIBRARY_DEBUG=\"${GDAL_LIBRARY_DEBUG}\"" + "-DGDAL_LIBRARY_RELEASE=\"${GDAL_LIBRARY_RELEASE}\"" + ) + rcl_cmake_library_set_init_script(osg_earth gdal + "list(APPEND CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")" + "set(GDAL_ROOT \"${GDAL_ROOT}\")" + "set(GDAL_INCLUDE_DIR \"${GDAL_INCLUDE_DIR}\")" + "set(GDAL_LIBRARY \"${GDAL_LIBRARY}\")" + "set(GDAL_LIBRARIES \"${GDAL_LIBRARIES}\")" + "set(GDAL_LIBRARY_DEBUG \"${GDAL_LIBRARY_DEBUG}\")" + "set(GDAL_LIBRARY_RELEASE \"${GDAL_LIBRARY_RELEASE}\")" + ) + rcl_cmake_library_set_clear_script(osg_earth gdal + "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")" + "unset(GDAL_ROOT)" + "unset(GDAL_INCLUDE_DIR)" + "unset(GDAL_LIBRARY)" + "unset(GDAL_LIBRARIES)" + "unset(GDAL_LIBRARY_DEBUG)" + "unset(GDAL_LIBRARY_RELEASE)" + ) + set(OSG_PREFIX_PATH "${ZLIB_ROOT}" "${PNG_ROOT}" "${JPEG_ROOT}" "${TIFF_ROOT}" "${FREETYPE_ROOT}" "${CURL_ROOT}" "${GDAL_ROOT}") + list(JOIN OSG_PREFIX_PATH "\\;" OSG_PREFIX_PATH_ARG) + set(osg_opts) + list(APPEND osg_opts + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 + -DBUILD_SHARED_LIBS=ON + -DDYNAMIC_OPENSCENEGRAPH=ON + -DDYNAMIC_OPENTHREADS=ON + -DBUILD_OSG_APPLICATIONS=OFF + -DBUILD_OSG_EXAMPLES=OFF + -DBUILD_DOCUMENTATION=OFF + -DBUILD_OSG_DEPRECATED_SERIALIZERS=ON + -DBUILD_OSG_PLUGINS_BY_DEFAULT=ON + -DBUILD_OSG_PLUGIN_PNG=ON + -DBUILD_OSG_PLUGIN_JPEG=ON + -DBUILD_OSG_PLUGIN_TIFF=ON + -DBUILD_OSG_PLUGIN_FREETYPE=ON + -DBUILD_OSG_PLUGIN_CURL=ON + -DBUILD_OSG_PLUGIN_GZ=ON + -DBUILD_OSG_PLUGIN_ZIP=ON + -DBUILD_OSG_PLUGIN_GDAL=ON + -DBUILD_OSG_PLUGIN_OGR=ON + -DBUILD_OSG_PLUGIN_LUA=ON + -DOSG_USE_LOCAL_LUA_SOURCE=ON + -DOSG_USE_UTF8_FILENAME=ON + "-DCMAKE_PREFIX_PATH=${OSG_PREFIX_PATH_ARG}" + "-DZLIB_ROOT=${ZLIB_ROOT}" + "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}" + "-DZLIB_LIBRARY=${ZLIB_LIBRARY}" + "-DPNG_ROOT=${PNG_ROOT}" + "-DPNG_INCLUDE_DIR=${PNG_INCLUDE_DIR}" + "-DPNG_PNG_INCLUDE_DIR=${PNG_PNG_INCLUDE_DIR}" + "-DPNG_LIBRARY=${PNG_LIBRARY}" + "-DJPEG_ROOT=${JPEG_ROOT}" + "-DJPEG_INCLUDE_DIR=${JPEG_INCLUDE_DIR}" + "-DJPEG_LIBRARY=${JPEG_LIBRARY}" + "-DTIFF_ROOT=${TIFF_ROOT}" + "-DTIFF_INCLUDE_DIR=${TIFF_INCLUDE_DIR}" + "-DTIFF_LIBRARY=${TIFF_LIBRARY}" + "-DFREETYPE_ROOT=${FREETYPE_ROOT}" + "-DFREETYPE_INCLUDE_DIRS=${FREETYPE_INCLUDE_DIRS}" + "-DFREETYPE_INCLUDE_DIR_freetype2=${FREETYPE_INCLUDE_DIR_freetype2}" + "-DFREETYPE_INCLUDE_DIR_ft2build=${FREETYPE_INCLUDE_DIR_ft2build}" + "-DFREETYPE_LIBRARY=${FREETYPE_LIBRARY}" + "-DCURL_ROOT=${CURL_ROOT}" + "-DCURL_LIBRARY=${CURL_LIBRARY}" + "-DGDAL_ROOT=${GDAL_ROOT}" + "-DGDAL_INCLUDE_DIR=${GDAL_INCLUDE_DIR}" + "-DGDAL_LIBRARY=${GDAL_LIBRARY}" + ) + if (MSVC) + list(APPEND osg_opts -DWIN32_USE_MP=ON) + endif () + _register_git_cmake_library(osg_earth + openscenegraph + "https://github.com/openscenegraph/OpenSceneGraph.git" + "OpenSceneGraph-3.6.5" + ) + rcl_cmake_library_add_patch_url(osg_earth openscenegraph + "https://github.com/openscenegraph/OpenSceneGraph/pull/973.patch" + "001-pr-973-msvc-ninja-pdb.patch" + "" + ) + rcl_cmake_library_set_cmake_options(osg_earth openscenegraph ${osg_opts}) + rcl_cmake_library_set_deps(osg_earth openscenegraph zlib png jpeg tiff freetype curl gdal) + rcl_get_effective_install_dir(osg_earth openscenegraph OSG_ROOT) + set(OSG_DEBUG_SUFFIX) + if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug") + set(OSG_DEBUG_SUFFIX "d") + endif () + set(OSG_LIB_DIR "${OSG_ROOT}/lib") + set(OSG_COMPONENTS + osg + osgAnimation + osgDB + osgFX + osgGA + osgManipulator + osgParticle + osgPresentation + osgShadow + osgSim + osgTerrain + osgText + osgUtil + osgViewer + osgVolume + osgWidget + OpenThreads + ) + set(osg_other_use_opt + "-DOpenSceneGraph_ROOT=\"${OSG_ROOT}\"" + "-DOSG_ROOT=\"${OSG_ROOT}\"" + "-DOPENSCENEGRAPH_INCLUDE_DIR=\"${OSG_ROOT}/include\"" + ) + set(osg_init_script + "set(OpenSceneGraph_ROOT \"${OSG_ROOT}\")" + "set(OSG_ROOT \"${OSG_ROOT}\")" + "set(OPENSCENEGRAPH_INCLUDE_DIR \"${OSG_ROOT}/include\")" + ) + set(osg_clear_script + "unset(OpenSceneGraph_ROOT)" + "unset(OSG_ROOT)" + "unset(OPENSCENEGRAPH_INCLUDE_DIR)" + ) + foreach (OSG_COMPONENT IN LISTS OSG_COMPONENTS) + string(TOUPPER "${OSG_COMPONENT}" OSG_COMPONENT_UPPER) + set(OSG_COMPONENT_INCLUDE_VAR "${OSG_COMPONENT_UPPER}_INCLUDE_DIR") + set(OSG_COMPONENT_LIBRARY_VAR "${OSG_COMPONENT_UPPER}_LIBRARY") + set(${OSG_COMPONENT_INCLUDE_VAR} "${OSG_ROOT}/include") + if (MSVC) + set(${OSG_COMPONENT_LIBRARY_VAR} "${OSG_LIB_DIR}/${OSG_COMPONENT}${OSG_DEBUG_SUFFIX}.lib") + else () + set(${OSG_COMPONENT_LIBRARY_VAR} "${OSG_LIB_DIR}/lib${OSG_COMPONENT}.so") + endif () + list(APPEND osg_other_use_opt + "-D${OSG_COMPONENT_INCLUDE_VAR}=\"${${OSG_COMPONENT_INCLUDE_VAR}}\"" + "-D${OSG_COMPONENT_LIBRARY_VAR}=\"${${OSG_COMPONENT_LIBRARY_VAR}}\"" + ) + list(APPEND osg_init_script + "set(${OSG_COMPONENT_INCLUDE_VAR} \"${${OSG_COMPONENT_INCLUDE_VAR}}\")" + "set(${OSG_COMPONENT_LIBRARY_VAR} \"${${OSG_COMPONENT_LIBRARY_VAR}}\")" + ) + list(APPEND osg_clear_script + "unset(${OSG_COMPONENT_INCLUDE_VAR})" + "unset(${OSG_COMPONENT_LIBRARY_VAR})" + ) + endforeach () + rcl_cmake_library_set_other_use_opt(osg_earth openscenegraph ${osg_other_use_opt}) + rcl_cmake_library_set_init_script(osg_earth openscenegraph ${osg_init_script}) + rcl_cmake_library_set_clear_script(osg_earth openscenegraph ${osg_clear_script}) + set(OSGEARTH_PREFIX_PATH + "${OSG_ROOT}" + "${SQLITE3_ROOT}" + "${CURL_ROOT}" + "${PROJ_ROOT}" + "${GDAL_ROOT}" + "${LIBZIP_ROOT}" + "${PROTOBUF_ROOT}" + "${GEOS_ROOT}" + "${ZLIB_ROOT}" + "${PNG_ROOT}" + "${JPEG_ROOT}" + "${TIFF_ROOT}" + "${FREETYPE_ROOT}" + ) + list(JOIN OSGEARTH_PREFIX_PATH "\\;" OSGEARTH_PREFIX_PATH_ARG) + set(osgearth_opts) + list(APPEND osgearth_opts + "-DCMAKE_PREFIX_PATH=${OSGEARTH_PREFIX_PATH_ARG}" + "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}" + "-DSQLite3_INCLUDE_DIRS=${SQLITE3_INCLUDE_DIR}" + "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}" + "-DSQLite3_LIBRARIES=${SQLITE3_LIBRARY}" + "-DOpenSceneGraph_ROOT=${OSG_ROOT}" + "-DOSG_ROOT=${OSG_ROOT}" + "-DCURL_ROOT=${CURL_ROOT}" + "-DGDAL_ROOT=${GDAL_ROOT}" + "-DLibZip_ROOT=${LIBZIP_ROOT}" + "-DProtobuf_ROOT=${PROTOBUF_ROOT}" + "-DProtobuf_DIR=${PROTOBUF_ROOT}/lib/cmake/protobuf" + "-DGEOS_ROOT=${GEOS_ROOT}" + -DOSGEARTH_BUILD_SHARED_LIBS=ON + -DOSGEARTH_BUILD_TOOLS=ON + -DOSGEARTH_BUILD_EXAMPLES=OFF + -DOSGEARTH_BUILD_IMGUI_NODEKIT=ON + -DOSGEARTH_BUILD_CESIUM_NODEKIT=OFF + -DOSGEARTH_BUILD_TRITON_NODEKIT=OFF + -DOSGEARTH_BUILD_SILVERLINING_NODEKIT=OFF + -DOSGEARTH_BUILD_TESTS=OFF + -DOSGEARTH_BUILD_BENCHMARKS=OFF + -DOSGEARTH_BUILD_DOCS=OFF + -DOSGEARTH_BUILD_PROCEDURAL_NODEKIT=ON + -DOSGEARTH_BUILD_LEGACY_SPLAT_NODEKIT=ON + -DOSGEARTH_BUILD_LEGACY_CONTROLS_API=ON + -DOSGEARTH_BUILD_ZIP_PLUGIN=ON + -DOSGEARTH_ENABLE_GEOCODER=ON + -DOSGEARTH_ENABLE_PROFILING=OFF + -DOSGEARTH_ENABLE_S3=OFF + -DOSGEARTH_INSTALL_SHADERS=ON + -DOSGEARTH_PROTOBUF_FORCE_CONFIG_MODE=ON + -DPROTOBUF_USE_DLLS=FALSE + ) + if (WIN32) + list(APPEND osgearth_opts -DOSGEARTH_INSTALL_PDBS=ON) + endif () + _register_git_cmake_library(osg_earth + osgearth + "https://github.com/pelicanmapping/osgearth.git" + "osgearth-3.8.1" + ) + rcl_cmake_library_set_cmake_options(osg_earth osgearth ${osgearth_opts}) + rcl_cmake_library_set_deps(osg_earth osgearth openscenegraph sqlite3 curl proj gdal libzip protobuf geos zlib png jpeg tiff freetype) + rcl_get_effective_install_dir(osg_earth osgearth OSGEARTH_ROOT) + set(osgEarth_DIR "${OSGEARTH_ROOT}/lib/cmake/osgearth") + set(OSGEARTH_DEBUG_SUFFIX) + if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug") + set(OSGEARTH_DEBUG_SUFFIX "d") + endif () + if (MSVC) + set(OSGEARTH_LIBRARY "${OSGEARTH_ROOT}/lib/osgEarth${OSGEARTH_DEBUG_SUFFIX}.lib") + else () + set(OSGEARTH_LIBRARY "${OSGEARTH_ROOT}/lib/libosgEarth.so") + endif () + set(OSGEARTH_USE_PREFIX_PATH + "${OSGEARTH_ROOT}" + "${OSG_ROOT}" + "${SQLITE3_ROOT}" + "${CURL_ROOT}" + "${PROJ_ROOT}" + "${GDAL_ROOT}" + "${LIBZIP_ROOT}" + "${PROTOBUF_ROOT}" + "${GEOS_ROOT}" + "${ZLIB_ROOT}" + "${PNG_ROOT}" + "${JPEG_ROOT}" + "${TIFF_ROOT}" + "${FREETYPE_ROOT}" + ) + list(JOIN OSGEARTH_USE_PREFIX_PATH "\\;" OSGEARTH_USE_PREFIX_PATH_ARG) + rcl_cmake_library_set_other_use_opt(osg_earth osgearth + "-DCMAKE_PREFIX_PATH=\"${OSGEARTH_USE_PREFIX_PATH_ARG}\"" + "-DosgEarth_DIR=\"${osgEarth_DIR}\"" + "-DOSGEARTH_ROOT=\"${OSGEARTH_ROOT}\"" + "-DOSGEARTH_INCLUDE_DIR=\"${OSGEARTH_ROOT}/include\"" + "-DOSGEARTH_LIBRARY=\"${OSGEARTH_LIBRARY}\"" + ) + set(osgearth_init_script) + set(osgearth_clear_script) + foreach (OSGEARTH_USE_ROOT IN LISTS OSGEARTH_USE_PREFIX_PATH) + list(APPEND osgearth_init_script "list(APPEND CMAKE_PREFIX_PATH \"${OSGEARTH_USE_ROOT}\")") + list(APPEND osgearth_clear_script "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${OSGEARTH_USE_ROOT}\")") + endforeach () + list(APPEND osgearth_init_script + "set(osgEarth_DIR \"${osgEarth_DIR}\")" + "set(OSGEARTH_ROOT \"${OSGEARTH_ROOT}\")" + "set(OSGEARTH_INCLUDE_DIR \"${OSGEARTH_ROOT}/include\")" + "set(OSGEARTH_LIBRARY \"${OSGEARTH_LIBRARY}\")" + "find_package(osgEarth CONFIG REQUIRED)" + ) + list(APPEND osgearth_clear_script + "unset(osgEarth_DIR)" + "unset(OSGEARTH_ROOT)" + "unset(OSGEARTH_INCLUDE_DIR)" + "unset(OSGEARTH_LIBRARY)" + ) + rcl_cmake_library_set_init_script(osg_earth osgearth ${osgearth_init_script}) + rcl_cmake_library_set_clear_script(osg_earth osgearth ${osgearth_clear_script}) +endblock() diff --git a/register/register_library.cmake b/0_cmake_library/register/register_library.cmake similarity index 66% rename from register/register_library.cmake rename to 0_cmake_library/register/register_library.cmake index f73b433..4ee4f6a 100644 --- a/register/register_library.cmake +++ b/0_cmake_library/register/register_library.cmake @@ -1,14 +1,13 @@ include_guard(GLOBAL) -include(${CMAKE_CURRENT_LIST_DIR}/base.cmake) +include("${CMAKE_CURRENT_LIST_DIR}/base.cmake") block() set(tinyxml2_opts) - _register_git_cmake_library( - tinyxml2 + _register_git_cmake_library(global tinyxml2 https://github.com/leethomason/tinyxml2.git 11.0.0 ) - rcl_cmake_library_set_cmake_options(tinyxml2 ${tinyxml2_opts}) + rcl_cmake_library_set_cmake_options(global tinyxml2 ${tinyxml2_opts}) set(jsoncpp_opts ${base_options}) list(APPEND jsoncpp_opts "-DJSONCPP_WITH_TESTS=OFF" @@ -16,7 +15,12 @@ block() "-DJSONCPP_WITH_EXAMPLE=OFF" "-DJSONCPP_WITH_DOC=OFF" ) - rcl_get_effective_install_dir(jsoncpp _jsoncpp_install_dir) + _register_git_cmake_library(global + jsoncpp + https://github.com/open-source-parsers/jsoncpp.git + "1.9.6" + ) + rcl_get_effective_install_dir(global jsoncpp _jsoncpp_install_dir) set(JSONCPP_ROOT ${_jsoncpp_install_dir}) set(JSONCPP_INCLUDE_DIRS ${JSONCPP_ROOT}/include) if (MSVC) @@ -24,23 +28,17 @@ block() else () set(JSONCPP_LIBRARIES ${JSONCPP_ROOT}/lib/libjsoncpp.a) endif () - _register_git_cmake_library( - jsoncpp - jsoncpp - https://github.com/open-source-parsers/jsoncpp.git - "1.9.6" - ) - rcl_cmake_library_set_cmake_options(jsoncpp ${jsoncpp_opts}) - rcl_cmake_library_set_other_use_opt(jsoncpp + rcl_cmake_library_set_cmake_options(global jsoncpp ${jsoncpp_opts}) + rcl_cmake_library_set_other_use_opt(global jsoncpp "-DJSONCPP_INCLUDE_DIRS=\"${JSONCPP_INCLUDE_DIRS}\"" "-DJSONCPP_LIBRARIES=\"${JSONCPP_LIBRARIES}\"" ) - rcl_cmake_library_set_init_script(jsoncpp + rcl_cmake_library_set_init_script(global jsoncpp "set(JSONCPP_ROOT \"${JSONCPP_ROOT}\")" "set(JSONCPP_INCLUDE_DIRS \"${JSONCPP_INCLUDE_DIRS}\")" "set(JSONCPP_LIBRARIES \"${JSONCPP_LIBRARIES}\")" ) - rcl_cmake_library_set_clear_script(jsoncpp + rcl_cmake_library_set_clear_script(global jsoncpp "unset(JSONCPP_ROOT)" "unset(JSONCPP_INCLUDE_DIRS)" "unset(JSONCPP_LIBRARIES)" @@ -54,13 +52,12 @@ block() # asio_opts #) set(fmt_option ${base_options}) - _register_git_cmake_library( - fmt + _register_git_cmake_library(global fmt "https://github.com/fmtlib/fmt.git" "12.1.0" ) - rcl_cmake_library_set_cmake_options(fmt ${fmt_option}) + rcl_cmake_library_set_cmake_options(global fmt ${fmt_option}) #set(imgui_option ${base_options}) #_register_git_cmake_library_opt( # imgui @@ -72,47 +69,42 @@ block() #BENCHMARK_USE_BUNDLED_GTEST set(benchmark_opt ${base_options}) list(APPEND benchmark_opt "-DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON") - _register_git_cmake_library( - benchmark + _register_git_cmake_library(global benchmark "https://github.com/google/benchmark.git" "v1.9.5" ) - rcl_cmake_library_set_cmake_options(benchmark ${benchmark_opt}) + rcl_cmake_library_set_cmake_options(global benchmark ${benchmark_opt}) set(mbedtls_opts ${base_options}) - _register_git_cmake_library( - mbedtls + _register_git_cmake_library(global mbedtls "https://github.com/Mbed-TLS/mbedtls.git" "v3.6.4" ) - rcl_cmake_library_set_cmake_options(mbedtls ${mbedtls_opts}) + rcl_cmake_library_set_cmake_options(global mbedtls ${mbedtls_opts}) set(libxml2_opts ${base_options}) - _register_git_cmake_library( - libxml2 + _register_git_cmake_library(global libxml2 "https://github.com/GNOME/libxml2.git" "v2.15.1" ) - rcl_cmake_library_set_cmake_options(libxml2 ${libxml2_opts}) + rcl_cmake_library_set_cmake_options(global libxml2 ${libxml2_opts}) set(websocketpp_opts ${base_options}) - _register_git_cmake_library( - websocketpp + _register_git_cmake_library(global websocketpp "https://github.com/zaphoyd/websocketpp.git" "0.8.2" ) - rcl_cmake_library_set_cmake_options(websocketpp ${websocketpp_opts}) + rcl_cmake_library_set_cmake_options(global websocketpp ${websocketpp_opts}) set(trantor_opts ${base_options}) - _register_git_cmake_library( + _register_git_cmake_library(global trantor - Trantor "https://github.com/an-tao/trantor.git" "v1.5.28" ) - rcl_cmake_library_set_cmake_options(trantor ${trantor_opts}) - rcl_get_effective_install_dir(trantor _trantor_install_dir) - rcl_cmake_library_set_other_use_opt(trantor + rcl_cmake_library_set_cmake_options(global trantor ${trantor_opts}) + rcl_get_effective_install_dir(global trantor _trantor_install_dir) + rcl_cmake_library_set_other_use_opt(global trantor "-DTrantor_DIR=${_trantor_install_dir}/lib/cmake/Trantor" ) #find_path() @@ -127,15 +119,14 @@ block() list(APPEND drogon_opts "-DBUILD_YAML_CONFIG=ON") list(APPEND drogon_opts "-DUSE_SUBMODULE=OFF") list(APPEND drogon_opts "-DUSE_STATIC_LIBS_ONLY=ON") - _register_git_cmake_library( + _register_git_cmake_library(global drogon - Drogon "https://github.com/drogonframework/drogon.git" "v1.9.13" ) - rcl_cmake_library_set_cmake_options(drogon ${drogon_opts}) - rcl_cmake_library_set_deps(drogon libzip trantor jsoncpp zlib) - rcl_cmake_library_set_init_script( + rcl_cmake_library_set_cmake_options(global drogon ${drogon_opts}) + rcl_cmake_library_set_deps(global drogon libzip trantor jsoncpp zlib) + rcl_cmake_library_set_init_script(global drogon "if (NOT TARGET std::filesystem)" " add_library(std::filesystem INTERFACE IMPORTED GLOBAL)" @@ -146,106 +137,94 @@ block() "message(drogon 加载filesystem!)" ) set(ghc_filesystem_opts ${base_options}) - _register_git_cmake_library( - ghc_filesystem + _register_git_cmake_library(global ghc_filesystem "https://github.com/gulrak/filesystem.git" "v1.5.14" ) - rcl_cmake_library_set_cmake_options(ghc_filesystem ${ghc_filesystem_opts}) + rcl_cmake_library_set_cmake_options(global ghc_filesystem ${ghc_filesystem_opts}) set(cppzmq_opts ${base_options}) - _register_git_cmake_library( - cppzmq + _register_git_cmake_library(global cppzmq "https://github.com/zeromq/cppzmq.git" "v4.11.0" ) - rcl_cmake_library_set_cmake_options(cppzmq ${cppzmq_opts}) + rcl_cmake_library_set_cmake_options(global cppzmq ${cppzmq_opts}) set(eigen_opts ${base_options}) - _register_git_cmake_library( - eigen + _register_git_cmake_library(global eigen "https://github.com/eigenteam/eigen-git-mirror.git" "3.3.7" ) - rcl_cmake_library_set_cmake_options(eigen ${eigen_opts}) + rcl_cmake_library_set_cmake_options(global eigen ${eigen_opts}) set(libzmq_opts ${base_options}) - _register_git_cmake_library( - libzmq + _register_git_cmake_library(global libzmq "https://github.com/zeromq/libzmq.git" "v4.3.5" ) - rcl_cmake_library_set_cmake_options(libzmq ${libzmq_opts}) + rcl_cmake_library_set_cmake_options(global libzmq ${libzmq_opts}) set(protobuf_opts ${base_options}) list(APPEND protobuf_opts "-Dprotobuf_BUILD_TESTS=OFF") list(APPEND protobuf_opts "-Dprotobuf_BUILD_SHARED_LIBS=OFF") - _register_git_cmake_library( - protobuf + _register_git_cmake_library(global protobuf "https://github.com/protocolbuffers/protobuf.git" "v33.2" ) - rcl_cmake_library_set_cmake_options(protobuf ${protobuf_opts}) + rcl_cmake_library_set_cmake_options(global protobuf ${protobuf_opts}) set(gflags_opts ${base_options}) - _register_git_cmake_library( - gflags + _register_git_cmake_library(global gflags "https://github.com/gflags/gflags.git" "v2.3.0" ) - rcl_cmake_library_set_cmake_options(gflags ${gflags_opts}) + rcl_cmake_library_set_cmake_options(global gflags ${gflags_opts}) set(brpc_opts ${base_options}) - _register_git_cmake_library( - brpc + _register_git_cmake_library(global brpc "https://github.com/apache/brpc.git" "1.15.0" ) - rcl_cmake_library_set_cmake_options(brpc ${brpc_opts}) + rcl_cmake_library_set_cmake_options(global brpc ${brpc_opts}) - _register_git_cmake_library( - cmocka + _register_git_cmake_library(global cmocka "https://github.com/clibs/cmocka.git" "cmocka-1.1.5" ) - rcl_cmake_library_set_cmake_options(cmocka ${cmocka_opts}) + rcl_cmake_library_set_cmake_options(global cmocka ${cmocka_opts}) - _register_git_cmake_library( - expected + _register_git_cmake_library(global expected "https://github.com/palacaze/sigslot.git" "v1.3.1" ) - rcl_cmake_library_set_cmake_options(expected ${expected_opts}) + rcl_cmake_library_set_cmake_options(global expected ${expected_opts}) set(sigslot_opts ${base_options}) - _register_git_cmake_library( - sigslot + _register_git_cmake_library(global sigslot "https://github.com/palacaze/sigslot.git" "v1.2.3" ) - rcl_cmake_library_set_cmake_options(sigslot ${sigslot_opts}) + rcl_cmake_library_set_cmake_options(global sigslot ${sigslot_opts}) #add_compile_options("$<$:/utf-8>") #add_compile_options("$<$:/utf-8>") set(SQLiteCpp_opts ${base_options}) list(APPEND SQLiteCpp_opts "-DSQLITECPP_RUN_CPPCHECK=OFF") - _register_git_cmake_library( - SQLiteCpp + _register_git_cmake_library(global SQLiteCpp "https://github.com/SRombauts/SQLiteCpp.git" "3.3.3" ) - rcl_cmake_library_set_cmake_options(SQLiteCpp ${SQLiteCpp_opts}) - _register_git_cmake_library( - pybind11 + rcl_cmake_library_set_cmake_options(global SQLiteCpp ${SQLiteCpp_opts}) + _register_git_cmake_library(global pybind11 "https://github.com/pybind/pybind11.git" "v3.0.4" ) - rcl_cmake_library_set_cmake_options(pybind11 ${SQLiteCpp_opts}) + rcl_cmake_library_set_cmake_options(global pybind11 ${SQLiteCpp_opts}) #set(boost_locale_opts ${base_options}) #_register_git_cmake_library_opt( # "boost_locale" diff --git a/register/with_qt.cmake b/0_cmake_library/register/with_qt.cmake similarity index 65% rename from register/with_qt.cmake rename to 0_cmake_library/register/with_qt.cmake index 63cd616..09cd72d 100644 --- a/register/with_qt.cmake +++ b/0_cmake_library/register/with_qt.cmake @@ -1,25 +1,25 @@ +include_guard(GLOBAL) + block() set(base_qt_opts "-DCMAKE_PREFIX_PATH:PATH=D:/Qt/Qt5.15.2/5.15.2/msvc2019_64") set(maplibre-native-qt-opts ${base_qt_opts}) list(APPEND maplibre-native-qt-opts "-DMLN_WITH_OPENGL=ON") - _register_git_cmake_library( - QMapLibre_qt_5_15_2 + _register_git_cmake_library(global QMapLibre_qt_5_15_2 "https://github.com/maplibre/maplibre-native-qt.git" "v3.0.0" ) - rcl_cmake_library_set_cmake_options(maplibre-native-qt ${maplibre-native-qt-opts}) + rcl_cmake_library_set_cmake_options(global QMapLibre_qt_5_15_2 ${maplibre-native-qt-opts}) set(ElaWidgetTools_opts ${base_options}) list(APPEND ElaWidgetTools_opts ${base_qt_opts}) - _register_git_cmake_library( - ElaWidgetTools + _register_git_cmake_library(global ElaWidgetTools "https://github.com/Liniyous/ElaWidgetTools.git" "main" ) - rcl_cmake_library_set_cmake_options(ElaWidgetTools ${ElaWidgetTools_opts}) + rcl_cmake_library_set_cmake_options(global ElaWidgetTools ${ElaWidgetTools_opts}) diff --git a/0_cmake_library/register_libaray/rcl_register_ex.cmake b/0_cmake_library/register_libaray/rcl_register_ex.cmake index ffbacbb..5d10291 100644 --- a/0_cmake_library/register_libaray/rcl_register_ex.cmake +++ b/0_cmake_library/register_libaray/rcl_register_ex.cmake @@ -1,136 +1,283 @@ -include(${CMAKE_CURRENT_LIST_DIR}/../cmake_library/domain/library/library.cmake) +include("${CMAKE_CURRENT_LIST_DIR}/../cmake_library/domain/library/library.cmake") +set(__rcl_register_module_dir "${CMAKE_CURRENT_LIST_DIR}") +get_filename_component(__rcl_register_package_root "${__rcl_register_module_dir}/.." ABSOLUTE) -function(rcl_init) - library_create(global "${EXTERNAL_DIR}/${G_Architecture_Name}") - library_get_global(global INSTALL_CACHE_ROOT _install_cache_root) +function(__rcl_namespace_storage_id namespace out) + string(REGEX REPLACE "[^A-Za-z0-9_]" "_" _namespace_storage "${namespace}") + set(${out} "${_namespace_storage}" PARENT_SCOPE) +endfunction() - # if(NOT EXISTS "${_install_cache_root}") - # message(FATAL_ERROR "INSTALL_CACHE_ROOT 不存在: ${_install_cache_root}") - # endif() +function(__rcl_default_root_dir namespace out) + __rcl_namespace_storage_id("${namespace}" _namespace_storage) + if(DEFINED EXTERNAL_DIR AND NOT "${EXTERNAL_DIR}" STREQUAL "" AND DEFINED G_Architecture_Name AND NOT "${G_Architecture_Name}" STREQUAL "") + set(_root "${EXTERNAL_DIR}/${G_Architecture_Name}_${_namespace_storage}") + elseif(DEFINED EXTERNAL_DIR AND NOT "${EXTERNAL_DIR}" STREQUAL "") + set(_root "${EXTERNAL_DIR}/_rcl_external_${_namespace_storage}") + else() + set(_root "${CMAKE_BINARY_DIR}/_rcl_external_${_namespace_storage}") + endif() + set(${out} "${_root}" PARENT_SCOPE) +endfunction() - # 给普通 find_package CONFIG 搜索用 +function(rcl_init namespace) + set(_root_dir "${ARGV1}") + if("${_root_dir}" STREQUAL "") + __rcl_default_root_dir("${namespace}" _root_dir) + endif() + library_create("${namespace}" "${_root_dir}") + library_get_global("${namespace}" INSTALL_CACHE_ROOT _install_cache_root) list(APPEND CMAKE_PREFIX_PATH "${_install_cache_root}") - - # 给交叉编译 CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY 时使用 list(APPEND CMAKE_FIND_ROOT_PATH "${_install_cache_root}") - - # 去重 list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH) list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH) - - # 传回调用者作用域 set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" PARENT_SCOPE) set(CMAKE_FIND_ROOT_PATH "${CMAKE_FIND_ROOT_PATH}" PARENT_SCOPE) - message(STATUS "rcl_init CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}") message(STATUS "rcl_init CMAKE_FIND_ROOT_PATH: ${CMAKE_FIND_ROOT_PATH}") endfunction() - -function(_register_git_cmake_library id rcl_find_package_name git_url ver) - library_register(global "${id}") - library_set(global "${id}" "GIT_URL" "${git_url}") - library_set(global "${id}" "GIT_BRANCH" "${ver}") +function(rcl_set_root_dir namespace dir) + library_set_root_dir("${namespace}" "${dir}") endfunction() - -function(rcl_get_effective_install_dir id rcl_install_dir) - library_get_global(global INSTALL_CACHE_ROOT _install_cache_root) - set("${rcl_install_dir}" "${_install_cache_root}/${id}" PARENT_SCOPE) +function(rcl_get_root_dir namespace out) + library_get_global("${namespace}" ROOT_DIR _dir) + set(${out} "${_dir}" PARENT_SCOPE) endfunction() -function(rcl_cmake_library_set_cmake_options id) +function(rcl_set_cache_root namespace dir) + library_set_global("${namespace}" CACHE_ROOT "${dir}") +endfunction() + +function(rcl_get_cache_root namespace out) + library_get_global("${namespace}" CACHE_ROOT _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_set_source_cache_root namespace dir) + library_set_global("${namespace}" SOURCE_CACHE_ROOT "${dir}") +endfunction() + +function(rcl_get_source_cache_root namespace out) + library_get_global("${namespace}" SOURCE_CACHE_ROOT _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_set_build_cache_root namespace dir) + library_set_global("${namespace}" BUILD_CACHE_ROOT "${dir}") +endfunction() + +function(rcl_get_build_cache_root namespace out) + library_get_global("${namespace}" BUILD_CACHE_ROOT _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_set_install_cache_root namespace dir) + library_set_global("${namespace}" INSTALL_CACHE_ROOT "${dir}") + library_get_global("${namespace}" DATA_EXPORT_DIR_EXPLICIT _data_export_explicit) + if(NOT _data_export_explicit) + get_filename_component(_ctx_root "${dir}" DIRECTORY) + library_set_global("${namespace}" DATA_EXPORT_DIR "${_ctx_root}/library_data") + endif() +endfunction() + +function(rcl_get_install_cache_root namespace out) + library_get_global("${namespace}" INSTALL_CACHE_ROOT _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_set_patch_cache_root namespace dir) + library_set_global("${namespace}" PATCH_CACHE_ROOT "${dir}") +endfunction() + +function(rcl_get_patch_cache_root namespace out) + library_get_global("${namespace}" PATCH_CACHE_ROOT _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_set_log_cache_root namespace dir) + library_set_global("${namespace}" LOG_CACHE_ROOT "${dir}") +endfunction() + +function(rcl_get_log_cache_root namespace out) + library_get_global("${namespace}" LOG_CACHE_ROOT _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_set_data_export_dir namespace dir) + library_set_global("${namespace}" DATA_EXPORT_DIR "${dir}") + library_set_global("${namespace}" DATA_EXPORT_DIR_EXPLICIT TRUE) +endfunction() + +function(rcl_get_data_export_dir namespace out) + library_get_effective_data_export_dir("${namespace}" _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_set_script_root namespace dir) + library_set_global("${namespace}" SCRIPT_ROOT "${dir}") +endfunction() + +function(rcl_get_script_root namespace out) + library_get_global("${namespace}" SCRIPT_ROOT _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_set_bash_script namespace file) + library_set_global("${namespace}" BASH_SCRIPT "${file}") +endfunction() + +function(rcl_get_bash_script namespace out) + library_get_global("${namespace}" BASH_SCRIPT _file) + set(${out} "${_file}" PARENT_SCOPE) +endfunction() + +function(rcl_set_bash_executable namespace file) + library_set_global("${namespace}" BASH_EXECUTABLE "${file}") +endfunction() + +function(rcl_get_bash_executable namespace out) + library_get_global("${namespace}" BASH_EXECUTABLE _file) + set(${out} "${_file}" PARENT_SCOPE) +endfunction() + +function(rcl_set_target_folder_root namespace dir) + library_set_global("${namespace}" TARGET_FOLDER_ROOT "${dir}") +endfunction() + +function(rcl_get_target_folder_root namespace out) + library_get_global("${namespace}" TARGET_FOLDER_ROOT _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_set_source_dir namespace id dir) + library_set_source_dir("${namespace}" "${id}" "${dir}") +endfunction() + +function(rcl_set_build_dir namespace id dir) + library_set_build_dir("${namespace}" "${id}" "${dir}") +endfunction() + +function(rcl_set_install_dir namespace id dir) + library_set_install_dir("${namespace}" "${id}" "${dir}") +endfunction() + +function(rcl_set_patch_cache_dir namespace id dir) + library_set_patch_cache_dir("${namespace}" "${id}" "${dir}") +endfunction() + +function(rcl_set_log_dir namespace id dir) + library_set_log_dir("${namespace}" "${id}" "${dir}") +endfunction() + +function(rcl_set_local_source_dir namespace id dir) + library_set_local_source_dir("${namespace}" "${id}" "${dir}") +endfunction() + +function(rcl_get_effective_source_dir namespace id out) + library_get_effective_source_dir("${namespace}" "${id}" _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_get_effective_build_dir namespace id out) + library_get_effective_build_dir("${namespace}" "${id}" _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_get_effective_install_dir namespace id out) + library_get_effective_install_dir("${namespace}" "${id}" _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_get_effective_patch_cache_dir namespace id out) + library_get_effective_patch_cache_dir("${namespace}" "${id}" _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_get_effective_log_dir namespace id out) + library_get_effective_log_dir("${namespace}" "${id}" _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(rcl_get_effective_cmake_cache_dir namespace id out) + library_get_effective_cmake_cache_dir("${namespace}" "${id}" _dir) + set(${out} "${_dir}" PARENT_SCOPE) +endfunction() + +function(_register_git_cmake_library namespace id git_url ver) + library_register("${namespace}" "${id}") + library_set("${namespace}" "${id}" "GIT_URL" "${git_url}") + library_set("${namespace}" "${id}" "GIT_BRANCH" "${ver}") +endfunction() + +function(rcl_cmake_library_set_cmake_options namespace id) string(REPLACE ";" " " content "${ARGN}") - library_set(global "${id}" "CMAKE_OPTIONS" "${content}") + library_set("${namespace}" "${id}" "CMAKE_OPTIONS" "${content}") endfunction() -function(rcl_cmake_library_set_other_use_opt id) +function(rcl_cmake_library_set_other_use_opt namespace id) string(REPLACE ";" " " content "${ARGN}") - library_set(global "${id}" "OTHER_USE_OPT" "${content}") + library_set("${namespace}" "${id}" "OTHER_USE_OPT" "${content}") endfunction() -function(rcl_cmake_library_set_init_script id) +function(rcl_cmake_library_set_init_script namespace id) string(REPLACE ";" "\n" content "${ARGN}") - library_set_init_scripts(global "${id}" "${content}") + library_set_init_scripts("${namespace}" "${id}" "${content}") endfunction() -function(rcl_cmake_library_set_clear_script id) +function(rcl_cmake_library_set_clear_script namespace id) string(REPLACE ";" "\n" content "${ARGN}") - library_set_clear_scripts(global "${id}" "${content}") + library_set_clear_scripts("${namespace}" "${id}" "${content}") endfunction() -function(rcl_cmake_library_set_cmake_source_relative_dir id rcl_cmakelists_relative_dir) - library_set_cmake_source_subdir(global "${id}" "${rcl_cmakelists_relative_dir}") +function(rcl_cmake_library_set_cmake_source_relative_dir namespace id rcl_cmakelists_relative_dir) + library_set_cmake_source_subdir("${namespace}" "${id}" "${rcl_cmakelists_relative_dir}") endfunction() -function(rcl_cmake_library_set_patches id) - library_set_patch_files(global "${id}" ${ARGN}) +function(rcl_cmake_library_set_patches namespace id) + library_set_patch_files("${namespace}" "${id}" ${ARGN}) endfunction() -function(rcl_cmake_library_add_patch_file id) - library_add_patch_file(global "${id}" ${ARGN}) +function(rcl_cmake_library_add_patch_file namespace id) + library_add_patch_file("${namespace}" "${id}" ${ARGN}) endfunction() -function(rcl_cmake_library_add_patch_url id url filename) - library_add_patch_url(global "${id}" "${url}" "${filename}" ${ARGN}) +function(rcl_cmake_library_add_patch_url namespace id url filename) + library_add_patch_url("${namespace}" "${id}" "${url}" "${filename}" ${ARGN}) endfunction() -function(rcl_cmake_library_set_deps id) - library_depends(global "${id}" ${ARGN}) +function(rcl_cmake_library_set_deps namespace id) + library_depends("${namespace}" "${id}" ${ARGN}) endfunction() - -function(rcl_generate_registered_cmake_libraries) - set(export_dir "") - library_get_global(global DATA_EXPORT_DIR export_dir) - library_add_item_operation_targets(global "pfx" "${export_dir}") +function(rcl_namespace_depends namespace) + library_namespace_depends("${namespace}" ${ARGN}) endfunction() +function(rcl_generate_registered_cmake_libraries namespace) + rcl_get_data_export_dir("${namespace}" export_dir) + library_add_item_operation_targets("${namespace}" "pfx" "${export_dir}") +endfunction() -macro(rcl_load_dependency_environment) - set(include_init_cmake_list "") - library_init_environment(global include_init_cmake_list ${ARGN}) - foreach (init_cmake ${include_init_cmake_list}) - message("macro(rcl_load_dependency_environment) 加载 init.cmake: ${init_cmake}") - file(READ "${init_cmake}" init_cmake_content) - message("========== ${init_cmake} ==========\n${init_cmake_content}\n========== end ==========") - include(${init_cmake}) - endforeach () - set(include_init_cmake_list "") +macro(rcl_load_dependency_environment namespace) + library_init_environment("${namespace}" ${ARGN}) +endmacro() +macro(rcl_unload_dependency_environment namespace) + library_clear_environment("${namespace}" ${ARGN}) endmacro() - -function(rcl_unload_dependency_environment) - set(include_init_cmake_list "") - library_clear_environment(global include_init_cmake_list ${ARGN}) - foreach (init_cmake ${include_init_cmake_list}) - message("macro(rcl_load_dependency_environment) 加载 init.cmake: ${init_cmake}") - file(READ "${init_cmake}" init_cmake_content) - message("========== ${init_cmake} ==========\n${init_cmake_content}\n========== end ==========") - include(${init_cmake}) - endforeach () - set(include_init_cmake_list "") -endfunction() - function(rcl_add_dependency_action_targets target_name) set(_deps) - foreach (lib IN LISTS ARGN) - set(name "pfx_${lib}_with_rely_auto") - list(APPEND _deps "${name}") - endforeach () - # 创建一个聚合 target - if (NOT TARGET "${target_name}") + foreach(lib IN LISTS ARGN) + action_target_name("${lib}" _lib_target) + list(APPEND _deps "pfx_${_lib_target}_with_rely_auto") + endforeach() + if(NOT TARGET "${target_name}") add_custom_target("${target_name}") - endif () - + endif() message("${target_name} ===> ${_deps}") - # 构建 target_name 时,先构建这些依赖 target - if (_deps) + if(_deps) add_dependencies("${target_name}" ${_deps}) - endif () + endif() endfunction() - - - - diff --git a/0_cmake_library/调试选项.md b/0_cmake_library/调试选项.md deleted file mode 100644 index 2e858dc..0000000 --- a/0_cmake_library/调试选项.md +++ /dev/null @@ -1,121 +0,0 @@ -# CMake 调试 / try_compile / 查找库 相关选项整理 - -## 1️⃣ try_compile / 编译测试相关 - -| 选项 / 变量 | 类型 | 示例 | 作用 | -|---|---|---|---| -| `--debug-trycompile` | 命令行 | `cmake --debug-trycompile -S . -B build` | 不删除 `try_compile()` / `try_run()` 生成的测试工程 | -| `CMAKE_TRY_COMPILE_CONFIGURATION` | 变量 | `-DCMAKE_TRY_COMPILE_CONFIGURATION=Debug` | 指定 try_compile 使用的构建类型 | -| `CMAKE_TRY_COMPILE_TARGET_TYPE` | 变量 | `-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY` | 指定 try_compile 生成的目标类型 | -| `CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES` | 变量 | `-DCMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES=ON` | try_compile 不继承平台变量 | - ---- - -## 2️⃣ CMake 脚本执行追踪 - -| 选项 | 示例 | 作用 | -|---|---|---| -| `--trace` | `cmake --trace` | 打印每个执行的 CMake 指令 | -| `--trace-expand` | `cmake --trace-expand` | trace 并展开变量 | -| `--trace-source=` | `cmake --trace-source=CMakeLists.txt` | 只 trace 指定文件 | -| `--trace-redirect=` | `cmake --trace-redirect=trace.log` | 把 trace 输出写入文件 | - ---- - -## 3️⃣ find_package / 查找库调试 - -| 选项 / 变量 | 示例 | 作用 | -|---|---|---| -| `--debug-find` | `cmake --debug-find` | 打印 `find_package` 搜索路径 | -| `CMAKE_FIND_DEBUG_MODE` | `-DCMAKE_FIND_DEBUG_MODE=ON` | 调试 find 系列命令 | - ---- - -## 4️⃣ 日志级别控制 - -| 选项 | 示例 | 作用 | -|---|---|---| -| `--log-level=` | `cmake --log-level=DEBUG` | 控制日志输出级别 | -| `--log-context` | `cmake --log-context` | 显示日志来源 | -| `--log-level=TRACE` | `cmake --log-level=TRACE` | 最详细日志 | - -可用日志级别: - -| 级别 | -|---| -| `ERROR` | -| `WARNING` | -| `NOTICE` | -| `STATUS` | -| `VERBOSE` | -| `DEBUG` | -| `TRACE` | - ---- - -## 5️⃣ 生成系统调试 - -| 选项 | 示例 | 作用 | -|---|---|---| -| `--graphviz=` | `cmake --graphviz=deps.dot` | 生成依赖图 | -| `--profiling-output=` | `cmake --profiling-output=profile.json` | 输出配置性能分析 | - ---- - -## 6️⃣ 常用调试组合 - -### 调试 try_compile - -```bash -cmake --debug-trycompile -S . -B build -``` - ---- - -### 调试 find_package - -```bash -cmake --debug-find -``` - ---- - -### 查看所有脚本执行 - -```bash -cmake --trace-expand -``` - ---- - -### 超级调试模式 - -```bash -cmake \ - --debug-trycompile \ - --trace-expand \ - --debug-find \ - --log-level=DEBUG -``` - ---- - -## 7️⃣ 交叉编译最常用三项 - -| 选项 | 作用 | -|---|---| -| `--debug-trycompile` | 查看 CMake 编译器测试 | -| `--debug-find` | 查看库搜索路径 | -| `--trace-expand` | 查看 CMake 变量和执行流程 | - ---- - -## 8️⃣ try_compile 临时目录 - -CMake 的编译测试通常生成在: - -``` -build/CMakeFiles/CMakeTmp -``` - -开启 `--debug-trycompile` 后该目录不会被删除,方便调试编译问题。 \ No newline at end of file diff --git a/3rdParty/库编译规范.txt b/3rdParty/库编译规范.txt deleted file mode 100644 index ce75548..0000000 --- a/3rdParty/库编译规范.txt +++ /dev/null @@ -1,4 +0,0 @@ - -当使用msvc编译器 编译的库要使用 MD - - diff --git a/CMakeLists.txt b/CMakeLists.txt index 94db99e..e5e40ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,49 +1,14 @@ -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) -#set(CMAKE_POSITION_INDEPENDENT_CODE ON) -set(ENABLE_BUILD_TIMER ON CACHE BOOL "" FORCE) +if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_LIST_DIR}) + cmake_minimum_required(VERSION 3.16) + cmake_policy(SET CMP0141 NEW) + set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$:Embedded>") + project(test_maplibre) + set(test_maplibre_VERSION 1.0.0) + set(CMAKE_CXX_STANDARD 20) + include(start.cmake) + include(end.cmake) +else () +endif () - -include(0_cmake_library/main.cmake) - -_add_binary_to_clion() -_load_cmake_library() - - -rcl_init() - - -option(A_enable_register_library "Enable register library" OFF) - -set(register_dir "${CMAKE_SOURCE_DIR}/register") -include(${register_dir}/export.cmake) - - -#include(${CMAKE_SOURCE_DIR}/register_project.cmake) #加载基础核心库 - - - -#codex_load_skill_dir_ex(${CMAKE_SOURCE_DIR}/skill psc_skill) - - -# https://github.com/cpm-cmake/CPM.cmake -# https://github.com/aminya/project_options -# https://github.com/andrew-hardin/cmake-git-version-tracking - - - - -# 统一生成前面注册过的所有配置对象和 action target -rcl_generate_registered_cmake_libraries() - - -attach_current_source_dir() -message("全部加载完成!") - - diff --git a/end.cmake b/end.cmake index ff06fed..1d00c20 100644 --- a/end.cmake +++ b/end.cmake @@ -1,6 +1,6 @@ option(A_enable_register_library "Enable register library" OFF) -set(register_dir "${CMAKE_CURRENT_LIST_DIR}/register") +set(register_dir "${CMAKE_CURRENT_LIST_DIR}/0_cmake_library/register") include(${register_dir}/export.cmake) @@ -13,7 +13,8 @@ include(${register_dir}/export.cmake) # 统一生成前面注册过的所有配置对象和 action target -rcl_generate_registered_cmake_libraries() +rcl_generate_registered_cmake_libraries(global) +rcl_generate_registered_cmake_libraries(osg_earth) attach_current_source_dir() diff --git a/register/export.cmake b/register/export.cmake deleted file mode 100644 index ca76cf5..0000000 --- a/register/export.cmake +++ /dev/null @@ -1,8 +0,0 @@ -include_guard(GLOBAL) -include(${CMAKE_CURRENT_LIST_DIR}/base.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/register_library.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/computer_graphics.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/libarchive.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/with_qt.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/osgearth.cmake) - diff --git a/register/osgearth.cmake b/register/osgearth.cmake deleted file mode 100644 index 0568b58..0000000 --- a/register/osgearth.cmake +++ /dev/null @@ -1,375 +0,0 @@ -block() - set(osg_opts) - list(APPEND osg_opts - -DCMAKE_POLICY_VERSION_MINIMUM=3.5 - -DBUILD_SHARED_LIBS=ON - -DDYNAMIC_OPENSCENEGRAPH=ON - -DDYNAMIC_OPENTHREADS=ON - -DBUILD_OSG_APPLICATIONS=OFF - -DBUILD_OSG_EXAMPLES=OFF - -DBUILD_DOCUMENTATION=OFF - -DBUILD_OSG_DEPRECATED_SERIALIZERS=OFF - -DOSG_USE_UTF8_FILENAME=ON - ) - _register_git_cmake_library( - openscenegraph - OpenSceneGraph - "https://github.com/openscenegraph/OpenSceneGraph.git" - "OpenSceneGraph-3.6.5" - ) - rcl_cmake_library_add_patch_url(openscenegraph - "https://github.com/openscenegraph/OpenSceneGraph/pull/973.patch" - "001-pr-973-msvc-ninja-pdb.patch" - "" - ) - rcl_cmake_library_set_cmake_options(openscenegraph ${osg_opts}) - rcl_get_effective_install_dir(openscenegraph OSG_ROOT) - set(OSG_DEBUG_SUFFIX) - if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug") - set(OSG_DEBUG_SUFFIX "d") - endif () - if (MSVC) - set(OSG_LIB_DIR "${OSG_ROOT}/lib") - set(OSG_LIBRARY "${OSG_LIB_DIR}/osg${OSG_DEBUG_SUFFIX}.lib") - set(OSGDB_LIBRARY "${OSG_LIB_DIR}/osgDB${OSG_DEBUG_SUFFIX}.lib") - set(OSGTEXT_LIBRARY "${OSG_LIB_DIR}/osgText${OSG_DEBUG_SUFFIX}.lib") - set(OSGUTIL_LIBRARY "${OSG_LIB_DIR}/osgUtil${OSG_DEBUG_SUFFIX}.lib") - set(OSGGA_LIBRARY "${OSG_LIB_DIR}/osgGA${OSG_DEBUG_SUFFIX}.lib") - set(OSGVIEWER_LIBRARY "${OSG_LIB_DIR}/osgViewer${OSG_DEBUG_SUFFIX}.lib") - set(OSGSIM_LIBRARY "${OSG_LIB_DIR}/osgSim${OSG_DEBUG_SUFFIX}.lib") - set(OSGSHADOW_LIBRARY "${OSG_LIB_DIR}/osgShadow${OSG_DEBUG_SUFFIX}.lib") - set(OSGMANIPULATOR_LIBRARY "${OSG_LIB_DIR}/osgManipulator${OSG_DEBUG_SUFFIX}.lib") - set(OPENTHREADS_LIBRARY "${OSG_LIB_DIR}/OpenThreads${OSG_DEBUG_SUFFIX}.lib") - else () - set(OSG_LIB_DIR "${OSG_ROOT}/lib") - set(OSG_LIBRARY "${OSG_LIB_DIR}/libosg.so") - set(OSGDB_LIBRARY "${OSG_LIB_DIR}/libosgDB.so") - set(OSGTEXT_LIBRARY "${OSG_LIB_DIR}/libosgText.so") - set(OSGUTIL_LIBRARY "${OSG_LIB_DIR}/libosgUtil.so") - set(OSGGA_LIBRARY "${OSG_LIB_DIR}/libosgGA.so") - set(OSGVIEWER_LIBRARY "${OSG_LIB_DIR}/libosgViewer.so") - set(OSGSIM_LIBRARY "${OSG_LIB_DIR}/libosgSim.so") - set(OSGSHADOW_LIBRARY "${OSG_LIB_DIR}/libosgShadow.so") - set(OSGMANIPULATOR_LIBRARY "${OSG_LIB_DIR}/libosgManipulator.so") - set(OPENTHREADS_LIBRARY "${OSG_LIB_DIR}/libOpenThreads.so") - endif () - rcl_cmake_library_set_other_use_opt(openscenegraph - "-DOpenSceneGraph_ROOT=\"${OSG_ROOT}\"" - "-DOSG_ROOT=\"${OSG_ROOT}\"" - "-DOPENSCENEGRAPH_INCLUDE_DIR=\"${OSG_ROOT}/include\"" - "-DOSG_INCLUDE_DIR=\"${OSG_ROOT}/include\"" - "-DOSGDB_INCLUDE_DIR=\"${OSG_ROOT}/include\"" - "-DOSGTEXT_INCLUDE_DIR=\"${OSG_ROOT}/include\"" - "-DOSGUTIL_INCLUDE_DIR=\"${OSG_ROOT}/include\"" - "-DOSGGA_INCLUDE_DIR=\"${OSG_ROOT}/include\"" - "-DOSGVIEWER_INCLUDE_DIR=\"${OSG_ROOT}/include\"" - "-DOSGSIM_INCLUDE_DIR=\"${OSG_ROOT}/include\"" - "-DOSGSHADOW_INCLUDE_DIR=\"${OSG_ROOT}/include\"" - "-DOSGMANIPULATOR_INCLUDE_DIR=\"${OSG_ROOT}/include\"" - "-DOPENTHREADS_INCLUDE_DIR=\"${OSG_ROOT}/include\"" - "-DOSG_LIBRARY=\"${OSG_LIBRARY}\"" - "-DOSGDB_LIBRARY=\"${OSGDB_LIBRARY}\"" - "-DOSGTEXT_LIBRARY=\"${OSGTEXT_LIBRARY}\"" - "-DOSGUTIL_LIBRARY=\"${OSGUTIL_LIBRARY}\"" - "-DOSGGA_LIBRARY=\"${OSGGA_LIBRARY}\"" - "-DOSGVIEWER_LIBRARY=\"${OSGVIEWER_LIBRARY}\"" - "-DOSGSIM_LIBRARY=\"${OSGSIM_LIBRARY}\"" - "-DOSGSHADOW_LIBRARY=\"${OSGSHADOW_LIBRARY}\"" - "-DOSGMANIPULATOR_LIBRARY=\"${OSGMANIPULATOR_LIBRARY}\"" - "-DOPENTHREADS_LIBRARY=\"${OPENTHREADS_LIBRARY}\"" - ) - rcl_cmake_library_set_init_script(openscenegraph - "set(OpenSceneGraph_ROOT \"${OSG_ROOT}\")" - "set(OSG_ROOT \"${OSG_ROOT}\")" - "set(OPENSCENEGRAPH_INCLUDE_DIR \"${OSG_ROOT}/include\")" - "set(OSG_INCLUDE_DIR \"${OSG_ROOT}/include\")" - "set(OSGDB_INCLUDE_DIR \"${OSG_ROOT}/include\")" - "set(OSGTEXT_INCLUDE_DIR \"${OSG_ROOT}/include\")" - "set(OSGUTIL_INCLUDE_DIR \"${OSG_ROOT}/include\")" - "set(OSGGA_INCLUDE_DIR \"${OSG_ROOT}/include\")" - "set(OSGVIEWER_INCLUDE_DIR \"${OSG_ROOT}/include\")" - "set(OSGSIM_INCLUDE_DIR \"${OSG_ROOT}/include\")" - "set(OSGSHADOW_INCLUDE_DIR \"${OSG_ROOT}/include\")" - "set(OSGMANIPULATOR_INCLUDE_DIR \"${OSG_ROOT}/include\")" - "set(OPENTHREADS_INCLUDE_DIR \"${OSG_ROOT}/include\")" - "set(OSG_LIBRARY \"${OSG_LIBRARY}\")" - "set(OSGDB_LIBRARY \"${OSGDB_LIBRARY}\")" - "set(OSGTEXT_LIBRARY \"${OSGTEXT_LIBRARY}\")" - "set(OSGUTIL_LIBRARY \"${OSGUTIL_LIBRARY}\")" - "set(OSGGA_LIBRARY \"${OSGGA_LIBRARY}\")" - "set(OSGVIEWER_LIBRARY \"${OSGVIEWER_LIBRARY}\")" - "set(OSGSIM_LIBRARY \"${OSGSIM_LIBRARY}\")" - "set(OSGSHADOW_LIBRARY \"${OSGSHADOW_LIBRARY}\")" - "set(OSGMANIPULATOR_LIBRARY \"${OSGMANIPULATOR_LIBRARY}\")" - "set(OPENTHREADS_LIBRARY \"${OPENTHREADS_LIBRARY}\")" - ) - rcl_cmake_library_set_clear_script(openscenegraph - "unset(OpenSceneGraph_ROOT)" - "unset(OSG_ROOT)" - "unset(OPENSCENEGRAPH_INCLUDE_DIR)" - "unset(OSG_INCLUDE_DIR)" - "unset(OSGDB_INCLUDE_DIR)" - "unset(OSGTEXT_INCLUDE_DIR)" - "unset(OSGUTIL_INCLUDE_DIR)" - "unset(OSGGA_INCLUDE_DIR)" - "unset(OSGVIEWER_INCLUDE_DIR)" - "unset(OSGSIM_INCLUDE_DIR)" - "unset(OSGSHADOW_INCLUDE_DIR)" - "unset(OSGMANIPULATOR_INCLUDE_DIR)" - "unset(OPENTHREADS_INCLUDE_DIR)" - "unset(OSG_LIBRARY)" - "unset(OSGDB_LIBRARY)" - "unset(OSGTEXT_LIBRARY)" - "unset(OSGUTIL_LIBRARY)" - "unset(OSGGA_LIBRARY)" - "unset(OSGVIEWER_LIBRARY)" - "unset(OSGSIM_LIBRARY)" - "unset(OSGSHADOW_LIBRARY)" - "unset(OSGMANIPULATOR_LIBRARY)" - "unset(OPENTHREADS_LIBRARY)" - ) - set(sqlite3_opts) - list(APPEND sqlite3_opts - -DCMAKE_DEBUG_POSTFIX= - -DBUILD_SHELL=ON - -DSQLITE_ENABLE_RTREE=ON - -DSQLITE_ENABLE_FTS5=ON - -DSQLITE_ENABLE_JSON1=ON - -DSQLITE_OMIT_JSON=OFF - ) - _register_git_cmake_library( - sqlite3 - SQLite3 - "https://github.com/azadkuh/sqlite-amalgamation.git" - "master" - ) - rcl_cmake_library_set_cmake_options(sqlite3 ${sqlite3_opts}) - rcl_get_effective_install_dir(sqlite3 SQLITE3_ROOT) - set(SQLITE3_DEBUG_SUFFIX) - if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug") - set(SQLITE3_DEBUG_SUFFIX "d") - endif () - set(SQLITE3_INCLUDE_DIR "${SQLITE3_ROOT}/include") - if (MSVC) - set(SQLITE3_LIBRARY "${SQLITE3_ROOT}/lib/sqlite3${SQLITE3_DEBUG_SUFFIX}.lib") - set(SQLITE3_EXECUTABLE "${SQLITE3_ROOT}/bin/sqlite3.exe") - else () - set(SQLITE3_LIBRARY "${SQLITE3_ROOT}/lib/libsqlite3.a") - set(SQLITE3_EXECUTABLE "${SQLITE3_ROOT}/bin/sqlite3") - endif () - rcl_cmake_library_set_other_use_opt(sqlite3 - "-DCMAKE_PREFIX_PATH=\"${SQLITE3_ROOT}\"" - "-DSQLite3_ROOT=\"${SQLITE3_ROOT}\"" - "-DSQLite3_INCLUDE_DIR=\"${SQLITE3_INCLUDE_DIR}\"" - "-DSQLite3_INCLUDE_DIRS=\"${SQLITE3_INCLUDE_DIR}\"" - "-DSQLite3_LIBRARY=\"${SQLITE3_LIBRARY}\"" - "-DSQLite3_LIBRARIES=\"${SQLITE3_LIBRARY}\"" - "-DSQLite3_EXECUTABLE=\"${SQLITE3_EXECUTABLE}\"" - "-DEXE_SQLITE3=\"${SQLITE3_EXECUTABLE}\"" - ) - rcl_cmake_library_set_init_script(sqlite3 - "list(APPEND CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")" - "set(SQLite3_ROOT \"${SQLITE3_ROOT}\")" - "set(SQLite3_INCLUDE_DIR \"${SQLITE3_INCLUDE_DIR}\")" - "set(SQLite3_INCLUDE_DIRS \"${SQLITE3_INCLUDE_DIR}\")" - "set(SQLite3_LIBRARY \"${SQLITE3_LIBRARY}\")" - "set(SQLite3_LIBRARIES \"${SQLITE3_LIBRARY}\")" - "set(SQLite3_EXECUTABLE \"${SQLITE3_EXECUTABLE}\")" - "set(EXE_SQLITE3 \"${SQLITE3_EXECUTABLE}\")" - ) - rcl_cmake_library_set_clear_script(sqlite3 - "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")" - "unset(SQLite3_ROOT)" - "unset(SQLite3_INCLUDE_DIR)" - "unset(SQLite3_INCLUDE_DIRS)" - "unset(SQLite3_LIBRARY)" - "unset(SQLite3_LIBRARIES)" - "unset(SQLite3_EXECUTABLE)" - "unset(EXE_SQLITE3)" - ) - set(curl_opts) - list(APPEND curl_opts - -DBUILD_SHARED_LIBS=ON - -DBUILD_STATIC_LIBS=OFF - -DBUILD_CURL_EXE=OFF - -DBUILD_EXAMPLES=OFF - -DBUILD_TESTING=OFF - -DBUILD_LIBCURL_DOCS=OFF - -DBUILD_MISC_DOCS=OFF - -DENABLE_CURL_MANUAL=OFF - -DCURL_USE_LIBPSL=OFF - -DCURL_USE_LIBSSH2=OFF - -DCURL_BROTLI=OFF - -DCURL_ZSTD=OFF - -DCURL_ZLIB=OFF - ) - if (WIN32) - list(APPEND curl_opts - -DCURL_USE_SCHANNEL=ON - -DCURL_USE_OPENSSL=OFF - -DCURL_WINDOWS_SSPI=ON - -DUSE_WIN32_IDN=ON - ) - endif () - _register_git_cmake_library( - curl - curl - "https://github.com/curl/curl.git" - "curl-8_21_0" - ) - rcl_cmake_library_set_cmake_options(curl ${curl_opts}) - rcl_get_effective_install_dir(curl CURL_ROOT) - rcl_cmake_library_set_other_use_opt(curl - "-DCMAKE_PREFIX_PATH=\"${CURL_ROOT}\"" - "-DCURL_ROOT=\"${CURL_ROOT}\"" - ) - rcl_cmake_library_set_init_script(curl - "list(APPEND CMAKE_PREFIX_PATH \"${CURL_ROOT}\")" - "set(CURL_ROOT \"${CURL_ROOT}\")" - ) - rcl_cmake_library_set_clear_script(curl - "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${CURL_ROOT}\")" - "unset(CURL_ROOT)" - ) - set(PROJ_PREFIX_PATH "${SQLITE3_ROOT}") - list(JOIN PROJ_PREFIX_PATH "\\;" PROJ_PREFIX_PATH_ARG) - set(proj_opts) - list(APPEND proj_opts - -DBUILD_SHARED_LIBS=ON - -DBUILD_APPS=OFF - -DBUILD_TESTING=OFF - -DENABLE_CURL=OFF - -DENABLE_TIFF=OFF - "-DCMAKE_PREFIX_PATH=${PROJ_PREFIX_PATH_ARG}" - "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}" - "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}" - "-DSQLite3_EXECUTABLE=${SQLITE3_EXECUTABLE}" - "-DEXE_SQLITE3=${SQLITE3_EXECUTABLE}" - ) - _register_git_cmake_library( - proj - PROJ - "https://github.com/OSGeo/PROJ.git" - "9.4.1" - ) - rcl_cmake_library_set_cmake_options(proj ${proj_opts}) - rcl_cmake_library_set_deps(proj sqlite3) - rcl_get_effective_install_dir(proj PROJ_ROOT) - rcl_cmake_library_set_other_use_opt(proj - "-DCMAKE_PREFIX_PATH=\"${PROJ_ROOT}\"" - "-DPROJ_ROOT=\"${PROJ_ROOT}\"" - ) - rcl_cmake_library_set_init_script(proj - "list(APPEND CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")" - "set(PROJ_ROOT \"${PROJ_ROOT}\")" - ) - rcl_cmake_library_set_clear_script(proj - "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")" - "unset(PROJ_ROOT)" - ) - set(GDAL_PREFIX_PATH "${CURL_ROOT}" "${SQLITE3_ROOT}" "${PROJ_ROOT}") - list(JOIN GDAL_PREFIX_PATH "\\;" GDAL_PREFIX_PATH_ARG) - set(gdal_opts) - list(APPEND gdal_opts - -DCMAKE_DEBUG_POSTFIX= - -DBUILD_SHARED_LIBS=ON - -DBUILD_APPS=OFF - -DBUILD_TESTING=OFF - -DBUILD_PYTHON_BINDINGS=OFF - -DGDAL_BUILD_OPTIONAL_DRIVERS=OFF - -DOGR_BUILD_OPTIONAL_DRIVERS=OFF - -DGDAL_USE_EXTERNAL_LIBS=OFF - -DGDAL_USE_INTERNAL_LIBS=ON - -DGDAL_USE_CURL=ON - -DGDAL_USE_SQLITE3=ON - -DGDAL_USE_PROJ=ON - -DGDAL_USE_GEOS=OFF - -DGDAL_USE_EXPAT=OFF - "-DCMAKE_PREFIX_PATH=${GDAL_PREFIX_PATH_ARG}" - "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}" - "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}" - ) - _register_git_cmake_library( - gdal - gdal - "https://github.com/OSGeo/gdal.git" - "v3.9.3" - ) - rcl_cmake_library_set_cmake_options(gdal ${gdal_opts}) - rcl_cmake_library_set_deps(gdal curl sqlite3 proj) - rcl_get_effective_install_dir(gdal GDAL_ROOT) - rcl_cmake_library_set_other_use_opt(gdal - "-DCMAKE_PREFIX_PATH=\"${GDAL_ROOT}\"" - "-DGDAL_ROOT=\"${GDAL_ROOT}\"" - ) - rcl_cmake_library_set_init_script(gdal - "list(APPEND CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")" - "set(GDAL_ROOT \"${GDAL_ROOT}\")" - ) - rcl_cmake_library_set_clear_script(gdal - "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")" - "unset(GDAL_ROOT)" - ) - set(OSGEARTH_PREFIX_PATH "${OSG_ROOT}" "${SQLITE3_ROOT}" "${CURL_ROOT}" "${PROJ_ROOT}" "${GDAL_ROOT}") - list(JOIN OSGEARTH_PREFIX_PATH "\\;" OSGEARTH_PREFIX_PATH_ARG) - set(osgearth_opts) - list(APPEND osgearth_opts - "-DCMAKE_PREFIX_PATH=${OSGEARTH_PREFIX_PATH_ARG}" - "-DSQLite3_INCLUDE_DIR=${SQLITE3_INCLUDE_DIR}" - "-DSQLite3_INCLUDE_DIRS=${SQLITE3_INCLUDE_DIR}" - "-DSQLite3_LIBRARY=${SQLITE3_LIBRARY}" - "-DSQLite3_LIBRARIES=${SQLITE3_LIBRARY}" - -DOSGEARTH_BUILD_SHARED_LIBS=ON - -DOSGEARTH_BUILD_TOOLS=ON - -DOSGEARTH_BUILD_EXAMPLES=OFF - -DOSGEARTH_BUILD_IMGUI_NODEKIT=ON - -DOSGEARTH_BUILD_CESIUM_NODEKIT=OFF - -DOSGEARTH_BUILD_TRITON_NODEKIT=OFF - -DOSGEARTH_BUILD_SILVERLINING_NODEKIT=OFF - -DOSGEARTH_BUILD_TESTS=OFF - -DOSGEARTH_BUILD_BENCHMARKS=OFF - -DOSGEARTH_BUILD_DOCS=OFF - -DOSGEARTH_BUILD_PROCEDURAL_NODEKIT=OFF - -DOSGEARTH_BUILD_LEGACY_SPLAT_NODEKIT=OFF - -DOSGEARTH_BUILD_LEGACY_CONTROLS_API=OFF - -DOSGEARTH_BUILD_ZIP_PLUGIN=OFF - -DOSGEARTH_ENABLE_GEOCODER=OFF - -DOSGEARTH_ENABLE_PROFILING=OFF - -DOSGEARTH_ENABLE_S3=OFF - -DOSGEARTH_INSTALL_SHADERS=OFF - ) - _register_git_cmake_library( - osgearth - osgearth - "https://github.com/pelicanmapping/osgearth.git" - "osgearth-3.8.1" - ) - rcl_cmake_library_set_cmake_options(osgearth ${osgearth_opts}) - rcl_cmake_library_set_deps(osgearth openscenegraph sqlite3 curl proj gdal) - rcl_get_effective_install_dir(osgearth OSGEARTH_ROOT) - set(OSGEARTH_USE_PREFIX_PATH "${OSGEARTH_ROOT}" "${OSG_ROOT}" "${SQLITE3_ROOT}" "${CURL_ROOT}" "${PROJ_ROOT}" "${GDAL_ROOT}") - list(JOIN OSGEARTH_USE_PREFIX_PATH "\\;" OSGEARTH_USE_PREFIX_PATH_ARG) - rcl_cmake_library_set_other_use_opt(osgearth - "-DCMAKE_PREFIX_PATH=\"${OSGEARTH_USE_PREFIX_PATH_ARG}\"" - "-DOSGEARTH_ROOT=\"${OSGEARTH_ROOT}\"" - ) - rcl_cmake_library_set_init_script(osgearth - "list(APPEND CMAKE_PREFIX_PATH \"${OSGEARTH_ROOT}\")" - "list(APPEND CMAKE_PREFIX_PATH \"${OSG_ROOT}\")" - "list(APPEND CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")" - "list(APPEND CMAKE_PREFIX_PATH \"${CURL_ROOT}\")" - "list(APPEND CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")" - "list(APPEND CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")" - "set(OSGEARTH_ROOT \"${OSGEARTH_ROOT}\")" - "find_package(osgEarth CONFIG REQUIRED)" - ) - rcl_cmake_library_set_clear_script(osgearth - "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${OSGEARTH_ROOT}\")" - "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${OSG_ROOT}\")" - "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${SQLITE3_ROOT}\")" - "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${CURL_ROOT}\")" - "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${PROJ_ROOT}\")" - "list(REMOVE_ITEM CMAKE_PREFIX_PATH \"${GDAL_ROOT}\")" - "unset(OSGEARTH_ROOT)" - ) -endblock() \ No newline at end of file diff --git a/register/图表库.md b/register/图表库.md deleted file mode 100644 index 7233df8..0000000 --- a/register/图表库.md +++ /dev/null @@ -1,24 +0,0 @@ -## Qt / C++ 绘图库调研 - -### 1. Qt 原生 / QWidget 路线 - -| 库 | 定位 | 备注 | -|---|---|---| -| [JKQtPlotter](https://github.com/jkriege2/JKQtPlotter) | 类似 QCustomPlot 的 Qt 绘图库 | QWidget / Qt 风格,适合传统 2D 图表 | -| [官方 Qwt](https://github.com/opencor/qwt) | 老牌 Qt 技术绘图库 | 主要 2D,QPainter / QWidget 体系 | - -### 2. Dear ImGui / ImPlot 路线 - -| 库 | 定位 | 备注 | -|---|---|---| -| [Dear ImGui](https://github.com/ocornut/imgui) | 即时模式 GUI 框架 | ImGui 生态基础库 | -| [ImPlot](https://github.com/epezent/implot) | Dear ImGui 的 2D 绘图库 | 适合实时曲线、频谱、工程可视化 | -| [ImPlot3D](https://github.com/brenocq/implot3d) | Dear ImGui 的 3D 绘图库 | 适合 3D 曲面、3D 散点等 | -| [QIm](https://github.com/czyt1988/QIm) | Qt + Dear ImGui + ImPlot + ImPlot3D 封装 | 把 ImGui 绘图生态接入 Qt | -| [QWT issue #2](https://github.com/czyt1988/QWT/issues/2) | Dear ImGui / ImPlot / ImPlot3D 相关讨论 | 用于参考技术路线 | - -### 3. GPU / Vulkan 可视化路线 - -| 库 | 定位 | 备注 | -|---|---|---| -| [datoviz](https://github.com/datoviz/datoviz) | GPU 科学可视化库 | 可继续观察,等待 0.4 版本 | \ No newline at end of file diff --git a/register_project.cmake b/register_project.cmake index 751fba8..e73d352 100644 --- a/register_project.cmake +++ b/register_project.cmake @@ -51,9 +51,9 @@ if (CMAKE_HOST_WIN32) endif () - set(ecap_rely drogon libarchive SQLiteCpp) + set(ecap_rely global::drogon global::libarchive global::SQLiteCpp) - library_is_installed_with_rely(global ok ${ecap_rely}) + library_is_installed_with_rely(ok ${ecap_rely}) if (${ok}) if (NOT MINGW) diff --git a/start.cmake b/start.cmake index 6b0b9ec..a7c28c9 100644 --- a/start.cmake +++ b/start.cmake @@ -9,12 +9,13 @@ _add_binary_to_clion() _load_cmake_library() -rcl_init() +rcl_init(global) +rcl_set_root_dir(global "${EXTERNAL_DIR}/${G_Architecture_Name}_global") option(A_enable_register_library "Enable register library" OFF) -set(register_dir "${CMAKE_CURRENT_LIST_DIR}/register") +set(register_dir "${CMAKE_CURRENT_LIST_DIR}/0_cmake_library/register") message("register_dir ${register_dir}") include(${register_dir}/export.cmake) diff --git a/toolchain/交叉编译工具链.md b/toolchain/交叉编译工具链.md deleted file mode 100644 index 11600de..0000000 --- a/toolchain/交叉编译工具链.md +++ /dev/null @@ -1,46 +0,0 @@ - - -https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads - - -https://www.cnblogs.com/Clark-Zhang/p/16303434.html - - -https://www.cnblogs.com/jdsy/p/15638421.html - -https://blog.csdn.net/weixin_45827115/article/details/143185262 - - - - -// cross-ng -https://zhuanlan.zhihu.com/p/624646659 - -官方文档 -https://crosstool-ng.github.io/ -https://github.com/crosstool-ng/crosstool-ng - - - -// 预编译好的 cross-ng -https://packages.msys2.org/base/crosstool-ng - - -// ubuntu 使用cross-ng 制作交叉编译工具链 -https://blog.csdn.net/qq_42112618/article/details/120848016 - - - -git clone https://github.com/crosstool-ng/crosstool-ng - - -https://crosstool-ng.github.io/docs/install/ -sudo apt install git autoconf build-essential flex texinfo help2man gawk libtool libtool-bin python3-dev bison libncurses5-dev libncursesw5-dev -y - -./bootstrap - -./configure --prefix=/aenv/ng -make -make install -export PATH="${PATH}:/aenv/ng/bin" - diff --git a/toolchain/注意事项.txt b/toolchain/注意事项.txt deleted file mode 100644 index fb257b6..0000000 --- a/toolchain/注意事项.txt +++ /dev/null @@ -1,16 +0,0 @@ -https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads - - -Windows (mingw-w64-x86_64) hosted cross toolchains - - - -AArch32 bare-metal target (arm-none-eabi) -AArch32 GNU/Linux target with hard float (arm-none-linux-gnueabihf) -AArch64 bare-metal target (aarch64-none-elf) -AArch64 GNU/Linux target (aarch64-none-linux-gnu) - - - -C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64 -.bat 工具链必须和cl.exe 放在一个目录, 不然有些项目编译不过 diff --git a/toolchain/示例CMakePresets.json b/toolchain/示例CMakePresets.json deleted file mode 100644 index 9b79708..0000000 --- a/toolchain/示例CMakePresets.json +++ /dev/null @@ -1,401 +0,0 @@ -{ - "version": 10, - "cmakeMinimumRequired": { - "major": 3, - "minor": 21, - "patch": 0 - }, - "configurePresets": [ - { - "name": "macos", - "hidden": true, - "condition": { - "type": "equals", - "lhs": "${hostSystemName}", - "rhs": "Darwin" - }, - "generator": "Xcode", - "warnings": {"dev": true, "deprecated": true}, - "cacheVariables": { - "BUILD_TESTING": "OFF" - } - }, - { - "name": "darwin-debug", - "inherits": "macos", - "displayName": "Darwin 10.14+ (Debug)", - "description": "NetEase MSS C wrapper for macOS - Debug Configuration", - "binaryDir": "${sourceDir}/build", - "cacheVariables": { - "BUILD_TESTING": "ON", - "CMAKE_BUILD_TYPE": "Debug", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/darwin-debug" - } - }, - { - "name": "darwin-release-arm64", - "inherits": "macos", - "displayName": "Darwin arm64 10.14+ (Release)", - "description": "NetEase MSS C wrapper for macOS arm64 - Release Configuration", - "binaryDir": "${sourceDir}/build-darwin-arm64-realese", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_OSX_ARCHITECTURES": "arm64", - "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64", - "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/darwin-arm64", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/darwin-release-arm64" - } - }, - { - "name": "darwin-release-x86_64", - "inherits": "macos", - "displayName": "Darwin x86_64 10.14+ (Release)", - "description": "NetEase MSS C wrapper for macOS x86_64 - Release Configuration", - "binaryDir": "${sourceDir}/build-darwin-x86_64-realese", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64", - "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/darwin-x86_64", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/darwin-release-x86_64" - } - }, - { - "name": "ios-release-arm64", - "inherits": "macos", - "displayName": "iOS arm64 9.0+ (Release)", - "description": "NetEase MSS C wrapper for iOS arm64 - Release Configuration", - "binaryDir": "${sourceDir}/build-ios-arm64-release", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_SYSTEM_NAME": "iOS", - "CMAKE_OSX_DEPLOYMENT_TARGET": "9.0", - "CMAKE_OSX_ARCHITECTURES": "arm64", - "CMAKE_OSX_SYSROOT": "iphoneos", - "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64", - "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/ios-arm64-iphoneos", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/ios-release-arm64" - } - }, - { - "name": "ios-release-armv7", - "inherits": "macos", - "displayName": "iOS armv7 9.0+ (Release)", - "description": "NetEase MSS C wrapper for iOS armv7 - Release Configuration", - "binaryDir": "${sourceDir}/build-ios-armv7-release", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_SYSTEM_NAME": "iOS", - "CMAKE_OSX_DEPLOYMENT_TARGET": "9.0", - "CMAKE_OSX_ARCHITECTURES": "armv7", - "CMAKE_OSX_SYSROOT": "iphoneos", - "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64", - "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/ios-armv7-iphoneos", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/ios-release-armv7" - } - }, - { - "name": "ios-release-x86_64", - "inherits": "macos", - "displayName": "iOS x86_64 9.0+ (Release)", - "description": "NetEase MSS C wrapper for iOS x86_64 - Release Configuration", - "binaryDir": "${sourceDir}/build-ios-x86_64-release", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_SYSTEM_NAME": "iOS", - "CMAKE_OSX_DEPLOYMENT_TARGET": "9.0", - "CMAKE_OSX_ARCHITECTURES": "x86_64", - "CMAKE_OSX_SYSROOT": "iphonesimulator", - "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64", - "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/ios-x86_64-iphonesimulator", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/ios-release-x86_64" - } - }, - { - "name": "macos-android", - "hidden": true, - "condition": { - "type": "equals", - "lhs": "${hostSystemName}", - "rhs": "Darwin" - }, - "warnings": {"dev": true, "deprecated": true}, - "cacheVariables": { - "BUILD_TESTING": "OFF" - } - }, - { - "name": "android-release-x86_64", - "inherits": "macos-android", - "displayName": "Android x86_64 abi21 (Release)", - "description": "NetEase MSS C wrapper for Android x86_64 - Release Configuration", - "binaryDir": "${sourceDir}/build-android-x86_64-release", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_SYSTEM_NAME": "Android", - "CMAKE_SYSTEM_VERSION": "21", - "CMAKE_ANDROID_STL_TYPE": "c++_static", - "CMAKE_ANDROID_ARCH_ABI": "x86_64", - "CMAKE_ANDROID_NDK": "$env{HOME}/Library/Android/sdk/ndk/21.4.7075529", - "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64", - "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/android-x86_64-abi21", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/android-release-x86_64" - } - }, - { - "name": "android-release-x86", - "inherits": "macos-android", - "displayName": "Android x86 abi21 (Release)", - "description": "NetEase MSS C wrapper for Android x86 - Release Configuration", - "binaryDir": "${sourceDir}/build-android-x86-release", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_SYSTEM_NAME": "Android", - "CMAKE_SYSTEM_VERSION": "21", - "CMAKE_ANDROID_STL_TYPE": "c++_static", - "CMAKE_ANDROID_ARCH_ABI": "x86", - "CMAKE_ANDROID_NDK": "$env{HOME}/Library/Android/sdk/ndk/21.4.7075529", - "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64", - "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/android-x86-abi21", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/android-release-x86" - } - }, - { - "name": "android-release-armeabi-v7a", - "inherits": "macos-android", - "displayName": "Android armeabi-v7a abi21 (Release)", - "description": "NetEase MSS C wrapper for Android armeabi-v7a - Release Configuration", - "binaryDir": "${sourceDir}/build-android-armeabi-v7a-release", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_SYSTEM_NAME": "Android", - "CMAKE_SYSTEM_VERSION": "21", - "CMAKE_ANDROID_STL_TYPE": "c++_static", - "CMAKE_ANDROID_ARCH_ABI": "armeabi-v7a", - "CMAKE_ANDROID_NDK": "$env{HOME}/Library/Android/sdk/ndk/21.4.7075529", - "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64", - "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/android-armeabi-v7a-abi21", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/android-release-armeabi-v7a" - } - }, - { - "name": "android-release-arm64-v8a", - "inherits": "macos-android", - "displayName": "Android arm64-v8a abi21 (Release)", - "description": "NetEase MSS C wrapper for Android arm64-v8a - Release Configuration", - "binaryDir": "${sourceDir}/build-android-arm64-v8a-release", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_SYSTEM_NAME": "Android", - "CMAKE_SYSTEM_VERSION": "21", - "CMAKE_ANDROID_STL_TYPE": "c++_static", - "CMAKE_ANDROID_ARCH_ABI": "arm64-v8a", - "CMAKE_ANDROID_NDK": "$env{HOME}/Library/Android/sdk/ndk/21.4.7075529", - "CONAN_PROFILE_BUILD": "${sourceDir}/.profiles/darwin-x86_64", - "CONAN_PROFILE_HOST": "${sourceDir}/.profiles/android-arm64-v8a-abi21", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/android-release-arm64-v8a" - } - }, - { - "name": "windows", - "hidden": true, - "condition": { - "type": "equals", - "lhs": "${hostSystemName}", - "rhs": "Windows" - }, - "generator": "Visual Studio 15 2017", - "warnings": {"dev": true, "deprecated": true}, - "cacheVariables": { - "CMAKE_INSTALL_PREFIX": "${sourceDir}/exports", - "BUILD_TESTING": "OFF" - } - }, - { - "name": "windows-debug", - "inherits": "windows", - "displayName": "Windows x64 (Debug)", - "description": "NetEase MSS C wrapper for Windows - Debug Configuration", - "binaryDir": "${sourceDir}/build", - "architecture": { - "value": "x64", - "strategy": "set" - }, - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", - "CMAKE_DEBUG_POSTFIX": "d" - } - }, - { - "name": "win32-release-x64", - "inherits": "windows", - "displayName": "Windows x64 (Release)", - "description": "NetEase MSS C wrapper for Windows - Release Configuration", - "binaryDir": "${sourceDir}/build-win32-x64", - "architecture": { - "value": "x64", - "strategy": "set" - }, - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/win32-release-x64" - } - }, - { - "name": "win32-release-ia32", - "inherits": "windows", - "displayName": "Windows ia32 (Release)", - "description": "NetEase MSS C wrapper for Windows - Release Configuration", - "binaryDir": "${sourceDir}/build-win32-ia32", - "architecture": { - "value": "Win32", - "strategy": "set" - }, - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/win32-release-ia32" - } - } - ], - "buildPresets": [ - { - "name": "darwin-debug", - "configurePreset": "darwin-debug", - "displayName": "Darwin Local Compilation (Debug)", - "description": "NetEase MSS C wrapper for macOS - Debug Configuration", - "configuration": "Debug" - }, - { - "name": "darwin-release-x86_64", - "configurePreset": "darwin-release-x86_64", - "displayName": "Darwin x86_64 Local Compilation (Release)", - "description": "NetEase MSS C wrapper for macOS x86_64 - Release Configuration", - "configuration": "Release", - "targets": ["install"] - }, - { - "name": "darwin-release-arm64", - "configurePreset": "darwin-release-arm64", - "displayName": "Darwin x86_64 Local Compilation (Release)", - "description": "NetEase MSS C wrapper for macOS arm64 - Release Configuration", - "configuration": "Release", - "targets": ["install"] - }, - { - "name": "ios-release-arm64", - "configurePreset": "ios-release-arm64", - "displayName": "iOS arm64 Local Compilation (Release)", - "description": "NetEase MSS C wrapper for iOS arm64 - Release Configuration", - "configuration": "Release", - "targets": ["install"] - }, - { - "name": "ios-release-armv7", - "configurePreset": "ios-release-armv7", - "displayName": "iOS armv7 Local Compilation (Release)", - "description": "NetEase MSS C wrapper for iOS armv7 - Release Configuration", - "configuration": "Release", - "targets": ["install"] - }, - { - "name": "ios-release-x86_64", - "configurePreset": "ios-release-x86_64", - "displayName": "iOS x86_64 Local Compilation (Release)", - "description": "NetEase MSS C wrapper for iOS x86_64 - Release Configuration", - "configuration": "Release", - "targets": ["install"] - }, - { - "name": "android-release-x86_64", - "configurePreset": "android-release-x86_64", - "displayName": "Android x86_64 Local Compilation (Release)", - "description": "NetEase MSS C wrapper for Android x86_64 - Release Configuration", - "configuration": "Release", - "targets": ["install"] - }, - { - "name": "android-release-x86_64-strip", - "configurePreset": "android-release-x86_64", - "displayName": "Android x86_64 Local Compilation (Release)", - "description": "NetEase MSS C wrapper for Android x86_64 - Release Configuration", - "configuration": "Release", - "targets": ["install/strip"] - }, - { - "name": "android-release-x86", - "configurePreset": "android-release-x86", - "displayName": "Android x86 Local Compilation (Release)", - "description": "NetEase MSS C wrapper for Android x86 - Release Configuration", - "configuration": "Release", - "targets": ["install"] - }, - { - "name": "android-release-x86-strip", - "configurePreset": "android-release-x86", - "displayName": "Android x86 Local Compilation (Release)", - "description": "NetEase MSS C wrapper for Android x86 - Release Configuration", - "configuration": "Release", - "targets": ["install/strip"] - }, - { - "name": "android-release-armeabi-v7a", - "configurePreset": "android-release-armeabi-v7a", - "displayName": "Android armeabi-v7a Local Compilation (Release)", - "description": "NetEase MSS C wrapper for Android armeabi-v7a - Release Configuration", - "configuration": "Release", - "targets": ["install"] - }, - { - "name": "android-release-armeabi-v7a-strip", - "configurePreset": "android-release-armeabi-v7a", - "displayName": "Android armeabi-v7a Local Compilation (Release)", - "description": "NetEase MSS C wrapper for Android armeabi-v7a - Release Configuration", - "configuration": "Release", - "targets": ["install/strip"] - }, - { - "name": "android-release-arm64-v8a", - "configurePreset": "android-release-arm64-v8a", - "displayName": "Android arm64-v8a Local Compilation (Release)", - "description": "NetEase MSS C wrapper for Android arm64-v8a - Release Configuration", - "configuration": "Release", - "targets": ["install"] - }, - { - "name": "windows-debug", - "configurePreset": "windows-debug", - "displayName": "Windows Local Compilation (Debug)", - "description": "NetEase MSS C wrapper for Windows - Debug Configuration", - "configuration": "Debug" - }, - { - "name": "win32-release-x64", - "configurePreset": "win32-release-x64", - "displayName": "Windows x64 Local Compilation (Release)", - "description": "NetEase MSS C wrapper for Windows x64 - Release Configuration", - "configuration": "Release", - "targets": ["install"] - }, - { - "name": "win32-release-ia32", - "configurePreset": "win32-release-ia32", - "displayName": "Windows ia32 Local Compilation (Release)", - "description": "NetEase MSS C wrapper for Windows ia32 - Release Configuration", - "configuration": "Release", - "targets": ["install"] - } - ], - "testPresets": [ - { - "name": "darwin-debug", - "configurePreset": "darwin-debug", - "output": {"outputOnFailure": true}, - "execution": {"noTestsAction": "error", "stopOnFailure": true} - }, - { - "name": "darwin-release-arm64", - "configurePreset": "darwin-release-arm64", - "output": {"outputOnFailure": true}, - "execution": {"noTestsAction": "error", "stopOnFailure": true} - } - ] -} \ No newline at end of file