Adds ArcGIS build requirements analysis
This commit is contained in:
1 file changed
+175
@@ -0,0 +1,175 @@
|
||||
# ArcGIS Build Requirements Analysis
|
||||
|
||||
## Overview
|
||||
|
||||
This document analyzes the requirements for building full ArcGIS-enabled Qt6 applications in the Qt6 migration pipeline.
|
||||
|
||||
**Date:** 2026-09-24
|
||||
**Branch:** feature/lts-viewer-validation-testing-phase
|
||||
**Submodule:** qt6-migration-pipeline/qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
||||
|
||||
---
|
||||
|
||||
## SDK Structure
|
||||
|
||||
**Location:** `./external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk/`
|
||||
|
||||
### Components Status
|
||||
|
||||
| Component | Status | Location |
|
||||
|-----------|--------|----------|
|
||||
| **Headers** | ✅ Present | `sdk/include/` (37K+ header files) |
|
||||
| **Linux x64 Libraries** | ✅ Present | `sdk/linux/x64/lib/` |
|
||||
| - libruntimecore.so | ✅ 162MB | Core runtime engine |
|
||||
| - libEsriCommonQt.so | ✅ 27MB | Common Qt bindings |
|
||||
| - libEsriRuntimeQt.a | ✅ 86MB | Static C++ API library |
|
||||
| **CMake Config** | ✅ Present | `sdk/ideintegration/ArcGISRuntime.cmake` |
|
||||
|
||||
### CMake Targets Defined
|
||||
|
||||
The `ArcGISRuntime.cmake` module defines the following imported targets:
|
||||
|
||||
- `ArcGIS::Core` - Core runtime (shared library)
|
||||
- `ArcGIS::Cpp` - C++ API (static library)
|
||||
|
||||
---
|
||||
|
||||
## Missing Requirements for Full Builds
|
||||
|
||||
### 1. ArcGIS Runtime SDK License ⚠️
|
||||
|
||||
The ArcGIS Maps SDK for Qt is **proprietary software** from Esri:
|
||||
- Requires a valid license for production use
|
||||
- Must be obtained separately from Esri
|
||||
- Not included in this repository
|
||||
|
||||
### 2. Runtime Dependencies
|
||||
|
||||
For deployment, the following are needed:
|
||||
- No `bin/` or `plugins/` directory in SDK (Qt plugins not bundled)
|
||||
- Application must bundle required Qt plugins separately
|
||||
- Runtime library path must include `/sdk/linux/x64/lib/`
|
||||
|
||||
### 3. Docker Build Integration
|
||||
|
||||
The SDK must be **mounted into Docker container** during build:
|
||||
|
||||
```bash
|
||||
-v /path/to/sdk:/workspace/external/ArcGIS
|
||||
```
|
||||
|
||||
The `install_arcgis.sh` script:
|
||||
- Expects SDK at `/workspace/external/ArcGIS`
|
||||
- Creates symlink to `/repo/external/ArcGIS/MapsSDK_Qt_300.0.0/...`
|
||||
|
||||
---
|
||||
|
||||
## Build Configuration
|
||||
|
||||
### Enable ArcGIS Builds
|
||||
|
||||
```bash
|
||||
./new_docker_build.sh --arcgis --group5
|
||||
```
|
||||
|
||||
This will:
|
||||
- Set `BUILD_ARCGIS=ON`
|
||||
- Add ArcGIS SDK to `CMAKE_PREFIX_PATH`
|
||||
- Enable `advancedSymbology` library build
|
||||
- Link against `ArcGIS::ArcGIS` target
|
||||
|
||||
### CMake Configuration
|
||||
|
||||
CMake expects the following prefix path:
|
||||
|
||||
```cmake
|
||||
-DCMAKE_PREFIX_PATH="...;/workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus/external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk;/usr/local"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Dependency Chain
|
||||
|
||||
```
|
||||
advancedSymbology (Lts/Viewer/SituationMap/Symbology/)
|
||||
└── ArcGIS::ArcGIS (ArcGIS Runtime SDK)
|
||||
├── libruntimecore.so (162MB)
|
||||
├── libEsriCommonQt.so (27MB)
|
||||
└── libEsriRuntimeQt.a (86MB)
|
||||
|
||||
Lts/Plugins/AdvancedSymbology/
|
||||
├── AsbDataPlugin → advancedSymbology
|
||||
├── AsbSymbolProxyGuiPlugin → advancedSymbology
|
||||
└── AsbData → advancedSymbology
|
||||
```
|
||||
|
||||
### Key CMake Files
|
||||
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `Lts/Viewer/SituationMap/Symbology/CMakeLists.txt` | Contains `BUILD_ARCGIS` conditional for advancedSymbology |
|
||||
| `Lts/Plugins/AdvancedSymbology/Data/CMakeLists.txt` | Links AsbData, AsbDataPlugin against advancedSymbology |
|
||||
| `Lts/Plugins/AdvancedSymbology/Gui/SymbolProxy/CMakeLists.txt` | Links AsbSymbolProxyGuiPlugin against advancedSymbology |
|
||||
| `cmake/FindArcGISRuntime.cmake` | Locates ArcGIS SDK (via ArcGISRuntime.cmake) |
|
||||
|
||||
---
|
||||
|
||||
## Current Status
|
||||
|
||||
### Viewer-Only Builds (Without ArcGIS)
|
||||
|
||||
| Component | Status |
|
||||
|-----------|--------|
|
||||
| LtsDataView | ✅ Builds successfully |
|
||||
| LtsDataViewTest | ✅ Passes CTest (headless) |
|
||||
| LtsReportDisplay | ✅ Builds with KDReports |
|
||||
| situationMapCommon | ✅ Builds successfully |
|
||||
| advancedSymbology | ⚠️ NOT built (requires ArcGIS license) |
|
||||
| Qt6 Deprecation Warnings | ✅ Zero warnings |
|
||||
|
||||
### Full ArcGIS-Enabled Builds
|
||||
|
||||
To enable full ArcGIS functionality:
|
||||
|
||||
1. ✅ SDK folder structure is complete
|
||||
2. ⚠️ Obtain ArcGIS Runtime SDK for Qt license from Esri
|
||||
3. ⚠️ Mount SDK into Docker build environment
|
||||
4. ⚠️ Build with `--arcgis` flag
|
||||
5. ⚠️ Ensure runtime library path includes ArcGIS libraries
|
||||
|
||||
---
|
||||
|
||||
## Verification Commands
|
||||
|
||||
### Check SDK Libraries
|
||||
|
||||
```bash
|
||||
find ./external/ArcGIS -name "*.so" -o -name "*.a"
|
||||
```
|
||||
|
||||
### Build with ArcGIS Support
|
||||
|
||||
```bash
|
||||
./new_docker_build.sh --arcgis --group5
|
||||
```
|
||||
|
||||
### Verify advancedSymbology Build
|
||||
|
||||
```bash
|
||||
# Check if library was built
|
||||
ls -la build4/lib/libadvancedSymbology.so
|
||||
|
||||
# Check CMake configure output for ArcGIS
|
||||
grep -i "arcgis" build4/CMakeCache.txt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Conclusion
|
||||
|
||||
The SDK folder structure is **complete** for building ArcGIS-enabled applications. The only missing pieces are:
|
||||
|
||||
1. **Valid ArcGIS Runtime SDK license** (must be obtained from Esri)
|
||||
2. **Docker mount configuration** for CI/CD pipelines
|
||||
|
||||
For viewer-only validation testing, ArcGIS is **optional** — the core Viewer module (LtsDataView, LtsReportDisplay, situationMapCommon) builds and tests successfully without it.
|
||||
Reference in new issue
Block a user