diff --git a/.github/workflows/android-ci-pull.yml b/.github/workflows/android-ci-pull.yml index e222ea008..982e58260 100644 --- a/.github/workflows/android-ci-pull.yml +++ b/.github/workflows/android-ci-pull.yml @@ -1,16 +1,17 @@ name: android-ci-pull -on: +on: workflow_dispatch: pull_request: branches: - - master + - master paths-ignore: - "platform/ios/**" - - ".github/**" - - "README.md" - - ".gitignore" - + - "platform/qt/**" + - ".github/**" + - "README.md" + - ".gitignore" + jobs: build: runs-on: ubuntu-20.04 @@ -45,45 +46,45 @@ jobs: ${{ runner.os }}- - name: npm install - run: npm install --ignore-scripts + run: npm install --ignore-scripts working-directory: platform/android - name: Prepare ccache - run: ccache --clear + run: ccache --clear - name: Cache ccache uses: actions/cache@v2 env: - cache-name: ccache-v1 + cache-name: ccache-v1 with: path: ~/.ccache' key: ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} restore-keys: | ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }} - ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} + ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} - name: Clear ccache statistics run: | ccache --zero-stats ccache --max-size=2G - ccache --show-stats + ccache --show-stats - name: restore-gradle-cache uses: actions/cache@v2 env: cache-name: gradle-v1 with: - path: ~/.gradle' + path: ~/.gradle' key: ${{ env.cache-name }}-{{ hashFiles 'gradle/dependencies.gradle' }}-{{ hashFiles 'build.gradle' }}-{{ hashFiles 'gradle/wrapper/gradle-wrapper.properties' }}' restore-keys: | - - ${{ env.cache-name }} + - ${{ env.cache-name }} - name: Check code style run: make android-check - name: Run Android unit tests - run: make run-android-unit-test + run: make run-android-unit-test - name: Build libmapbox-gl.so for arm-v8 run: make android-lib-arm-v8 @@ -102,4 +103,4 @@ jobs: MapboxGLAndroidSDKTestApp/build/reports/lint-results.html MapboxGLAndroidSDKTestApp/build/reports/lint-results.xml MapboxGLAndroidSDKTestApp/lint-baseline.xml - MapboxGLAndroidSDK/build/intermediates/cmake/debug/obj \ No newline at end of file + MapboxGLAndroidSDK/build/intermediates/cmake/debug/obj diff --git a/.github/workflows/android-ci.yml b/.github/workflows/android-ci.yml index dc156eb76..71ae7769b 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/android-ci.yml @@ -1,16 +1,17 @@ name: android-ci -on: +on: workflow_dispatch: push: tags-ignore: - '**' paths-ignore: - "platform/ios/**" - - ".github/**" + - "platform/qt/**" + - ".github/**" - "README.md" - ".gitignore" - + jobs: build: runs-on: ubuntu-20.04 @@ -48,45 +49,45 @@ jobs: ${{ runner.os }}- - name: npm install - run: npm install --ignore-scripts + run: npm install --ignore-scripts working-directory: platform/android - name: Prepare ccache - run: ccache --clear + run: ccache --clear - name: Cache ccache uses: actions/cache@v2 env: - cache-name: ccache-v1 + cache-name: ccache-v1 with: path: ~/.ccache' key: ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} restore-keys: | ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }} - ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} + ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} - name: Clear ccache statistics run: | ccache --zero-stats ccache --max-size=2G - ccache --show-stats + ccache --show-stats - name: restore-gradle-cache uses: actions/cache@v2 env: cache-name: gradle-v1 with: - path: ~/.gradle' + path: ~/.gradle' key: ${{ env.cache-name }}-{{ hashFiles 'gradle/dependencies.gradle' }}-{{ hashFiles 'build.gradle' }}-{{ hashFiles 'gradle/wrapper/gradle-wrapper.properties' }}' restore-keys: | - - ${{ env.cache-name }} + - ${{ env.cache-name }} - name: Check code style run: make android-check - name: Run Android unit tests - run: make run-android-unit-test + run: make run-android-unit-test - name: Build libmapbox-gl.so for arm-v8 run: make android-lib-arm-v8 @@ -103,7 +104,7 @@ jobs: else echo "No secrets.MAPLIBRE_DEVELOPER_CONFIG_XML variable set, skipping apk build..." fi - shell: bash + shell: bash - name: Log in to Google Cloud Platform run: | @@ -116,7 +117,7 @@ jobs: else echo "No secrets.GLCLOUD_SERVICE_JSON variable set, skipping google cloud login..." fi - shell: bash + shell: bash - name: Run instrumentation tests on Firebase run: | @@ -131,7 +132,7 @@ jobs: else echo "No secrets.GLCLOUD_SERVICE_JSON variable set, skipping instrumentation tests..." fi - shell: bash + shell: bash - name: Store debug artifacts uses: actions/upload-artifact@v2 diff --git a/.github/workflows/ios-ci.yml b/.github/workflows/ios-ci.yml index 531e34374..dae116888 100644 --- a/.github/workflows/ios-ci.yml +++ b/.github/workflows/ios-ci.yml @@ -6,18 +6,20 @@ on: tags-ignore: - '**' paths-ignore: - - "platform/android/**" - - ".github/**" + - "platform/android/**" + - "platform/qt/**" + - ".github/**" - "README.md" - - ".gitignore" + - ".gitignore" pull_request: branches: - - master + - master paths-ignore: - - "platform/android/**" - - ".github/**" + - "platform/android/**" + - "platform/qt/**" + - ".github/**" - "README.md" - - ".gitignore" + - ".gitignore" jobs: build: @@ -29,14 +31,14 @@ jobs: defaults: run: working-directory: platform/ios - shell: bash + shell: bash steps: - uses: actions/checkout@v2 with: submodules: recursive fetch-depth: 0 - + - name: Install macos dependencies run: | brew list cmake || brew install cmake @@ -57,35 +59,35 @@ jobs: ${{ runner.os }}- - name: npm install - run: npm install --ignore-scripts + run: npm install --ignore-scripts - name: Prepare ccache - run: ccache --clear + run: ccache --clear - name: Cache ccache uses: actions/cache@v2 env: - cache-name: ccache-v1 + cache-name: ccache-v1 with: path: ~/.ccache' key: ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} restore-keys: | ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }} - ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} + ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} - name: Clear ccache statistics run: | ccache --zero-stats ccache --max-size=2G - ccache --show-stats + ccache --show-stats - name: Install iOS packaging dependencies run: | ./platform/ios/scripts/install-packaging-dependencies.sh env: CILAUNCH: true - + - name: Check debug symbols run: make darwin-check-public-symbols @@ -99,7 +101,7 @@ jobs: run: make ios-uitest - name: Build and run SDK unit tests with thread and undefined behavior sanitizers - run: make ios-sanitize + run: make ios-sanitize - name: Build and run SDK unit tests with address sanitizer run: make ios-sanitize-address diff --git a/.github/workflows/macos-ci.yml b/.github/workflows/macos-ci.yml index 0b3679201..809c72660 100644 --- a/.github/workflows/macos-ci.yml +++ b/.github/workflows/macos-ci.yml @@ -6,20 +6,22 @@ on: tags-ignore: - '**' paths-ignore: - - "platform/android/**" - - ".github/**" + - "platform/android/**" + - "platform/qt/**" + - ".github/**" - "README.md" - - ".gitignore" + - ".gitignore" branches: - master pull_request: branches: - - master + - master paths-ignore: - - "platform/android/**" - - ".github/**" + - "platform/android/**" + - "platform/qt/**" + - ".github/**" - "README.md" - - ".gitignore" + - ".gitignore" jobs: build: @@ -32,14 +34,14 @@ jobs: defaults: run: working-directory: platform/ios - shell: bash + shell: bash steps: - uses: actions/checkout@v2 with: submodules: recursive fetch-depth: 0 - + - name: Install macos dependencies run: | brew list cmake || brew install cmake @@ -60,28 +62,28 @@ jobs: ${{ runner.macos }}- - name: npm install - run: npm install --ignore-scripts + run: npm install --ignore-scripts - name: Prepare ccache - run: ccache --clear + run: ccache --clear - name: Cache ccache uses: actions/cache@v2 env: - cache-name: ccache-v1 + cache-name: ccache-v1 with: path: ~/.ccache' key: ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} restore-keys: | ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }} - ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }} + ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }} - name: Clear ccache statistics run: | ccache --zero-stats ccache --max-size=2G - ccache --show-stats + ccache --show-stats - name: Build macos test run: | diff --git a/.github/workflows/qt-ci-windows.yml b/.github/workflows/qt-ci-windows.yml new file mode 100644 index 000000000..588a66db3 --- /dev/null +++ b/.github/workflows/qt-ci-windows.yml @@ -0,0 +1,108 @@ +name: qt-ci-windows + +on: + workflow_dispatch: + push: + tags-ignore: + - '**' + paths-ignore: + - "platform/android/**" + - "platform/darwin/**" + - "platform/ios/**" + - "platform/macos/**" + - ".github/**" + - "README.md" + - ".gitignore" + pull_request: + branches: + - master + paths-ignore: + - "platform/android/**" + - "platform/darwin/**" + - "platform/ios/**" + - "platform/macos/**" + - ".github/**" + - "README.md" + - ".gitignore" + +jobs: + build-core: + runs-on: windows-latest + strategy: + matrix: + include: + - name: Windows + static: OFF + qt: 5.15.2 + qtarch: win64_msvc2019_64 + compiler: x64 + - name: Windows_static + static: ON + qt: 5.15.2 + qtarch: win64_msvc2019_64 + compiler: x64 + # - name: Windows + # static: ON + # qt: 6.2.2 + # qtarch: win64_msvc2019_64 + # compiler: x64 + env: + BUILD_TYPE: Debug + BUILD_MODE: ${{ matrix.static }} + COMPILER_TYPE: ${{ matrix.compiler }} + QT_VERSION: ${{ matrix.qt }} + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + path: source + fetch-depth: 0 + + - name: Setup submodules + shell: bash + run: | + cd source + auth_header="$(git config --local --get http.https://github.com/.extraheader)" + git submodule sync --recursive + git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 || true + + - name: Download Qt + uses: jurplel/install-qt-action@v2 + with: + version: ${{ env.QT_VERSION }} + arch: ${{ matrix.qtarch }} + + - name: Setup ninja + uses: seanmiddleditch/gha-setup-ninja@v3 + + - name: Setup MSVC + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ matrix.compiler }} + + - name: Build maplibre-gl-native (MSVC) + run: | + $env:Path = $env:Path -replace "C:\\ProgramData\\Chocolatey\\bin;","" + $env:Path = "$env:IQTA_TOOLS\$env:COMPILER_TYPE\bin;$env:Path" + echo "$env:Path" + mkdir build + cd build + $BuildType = "$env:BUILD_TYPE" + $BuildMode = "$env:BUILD_MODE" + cmake -S ../source/ ` + -G Ninja ` + -DCMAKE_BUILD_TYPE="$BuildType" ` + -DCMAKE_INSTALL_PREFIX="../install" ` + -DMBGL_WITH_QT=ON ` + -DMBGL_QT_LIBRARY_ONLY=ON ` + -DMBGL_QT_STATIC="$BuildMode" ` + -DMBGL_QT_WITH_INTERNAL_SQLITE=OFF + ninja + ninja install + + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + name: maplibre-gl-native_${{ matrix.name }}_Qt${{ matrix.qt }} + path: install diff --git a/.github/workflows/qt-ci.yml b/.github/workflows/qt-ci.yml new file mode 100644 index 000000000..955bf4df3 --- /dev/null +++ b/.github/workflows/qt-ci.yml @@ -0,0 +1,159 @@ +name: qt-ci + +on: + workflow_dispatch: + push: + tags-ignore: + - '**' + paths-ignore: + - "platform/android/**" + - "platform/darwin/**" + - "platform/macos/**" + - ".github/**" + - "README.md" + - ".gitignore" + pull_request: + branches: + - master + paths-ignore: + - "platform/android/**" + - "platform/darwin/**" + - "platform/macos/**" + - ".github/**" + - "README.md" + - ".gitignore" + +jobs: + build-core: + strategy: + matrix: + include: + - name: macOS + os: macos-latest + static: OFF + qt: 5.15.2 + qt_target: desktop + - name: macOS_static + os: macos-latest + static: ON + qt: 5.15.2 + qt_target: desktop + - name: iOS_static + os: macos-latest + static: ON + qt: 5.15.2 + qt_target: ios + - name: macOS + os: macos-latest + static: ON + qt: 6.2.2 + qt_target: desktop + - name: macOS_static + os: macos-latest + static: OFF + qt: 6.2.2 + qt_target: desktop + runs-on: ${{ matrix.os }} + env: + BUILD_TYPE: Debug + BUILD_MODE: ${{ matrix.static }} + QT_VERSION: ${{ matrix.qt }} + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + path: source + submodules: recursive + fetch-depth: 0 + + - name: Install dependencies + if: runner.os == 'macOS' + env: + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + run: | + brew list cmake || brew install cmake + brew list ccache || brew install ccache + brew list ninja || brew install ninja + + - name: Setup Xcode + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable + + - name: Download Qt + uses: jurplel/install-qt-action@v2 + with: + version: ${{ env.QT_VERSION }} + target: ${{ matrix.qt_target }} + + - name: Prepare ccache + run: | + ccache --clear + ccache --set-config cache_dir=~/.ccache + + - name: Cache ccache + uses: actions/cache@v2 + env: + cache-name: ccache-v1 + with: + path: ~/.ccache + key: ${{ env.cache-name }}-${{ runner.os }}-${{ matrix.name }}-${{ matrix.qt }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} + restore-keys: | + ${{ env.cache-name }}-${{ runner.os }}-${{ matrix.name }}-${{ matrix.qt }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} + ${{ env.cache-name }}-${{ runner.os }}-${{ matrix.name }}-${{ matrix.qt }}-${{ github.job }}-${{ github.ref }} + ${{ env.cache-name }}-${{ runner.os }}-${{ matrix.name }}-${{ matrix.qt }}-${{ github.job }} + + - name: Clear ccache statistics + run: | + ccache --zero-stats + ccache --max-size=2G + ccache --show-stats -v + + - name: Build maplibre-gl-native (macOS) + if: runner.os == 'macOS' && matrix.qt_target == 'desktop' + run: | + mkdir build && cd build + cmake ../source/ \ + -G Ninja \ + -DMBGL_WITH_QT=ON \ + -DMBGL_QT_STATIC=${BUILD_MODE} \ + -DMBGL_QT_WITH_INTERNAL_SQLITE=OFF \ + -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ + -DCMAKE_INSTALL_PREFIX=../install \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + ninja + ninja install + + - name: Build maplibre-gl-native (iOS) + if: runner.os == 'macOS' && matrix.qt_target == 'ios' + run: | + mkdir build && cd build + cmake ../source/ \ + -DCMAKE_TOOLCHAIN_FILE=../source/platform/ios/platform/ios/toolchain.cmake \ + -G Xcode \ + -DPLATFORM=OS64COMBINED \ + -DDEPLOYMENT_TARGET=12.0 \ + -DENABLE_BITCODE=ON \ + -DMBGL_WITH_QT=ON \ + -DMBGL_WITH_WERROR=OFF \ + -DMBGL_QT_LIBRARY_ONLY=ON \ + -DMBGL_QT_STATIC=${BUILD_MODE} \ + -DMBGL_QT_WITH_INTERNAL_SQLITE=OFF \ + -DMBGL_QT_WITH_IOS_CCACHE=ON \ + -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ + -DCMAKE_INSTALL_PREFIX=../install + cmake --build . --config Release + cmake --install . --config Release + + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + name: maplibre-gl-native_${{ matrix.name }}_Qt${{ matrix.qt }} + path: install + + - name: Show ccache statistics + run: | + ccache --show-stats -v diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake index 5f259b0f7..4085d740d 100644 --- a/platform/qt/qt.cmake +++ b/platform/qt/qt.cmake @@ -47,6 +47,13 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") add_definitions("-D_USE_MATH_DEFINES") endif() +if(CMAKE_SYSTEM_NAME STREQUAL iOS) + option(MBGL_QT_WITH_IOS_CCACHE "Enable ccache for iOS" OFF) + if(MBGL_QT_WITH_IOS_CCACHE) + include(${PROJECT_SOURCE_DIR}/platform/ios/ccache.cmake) + endif() +endif() + if(ANDROID) message(STATUS "Building for ABI: ${ANDROID_ABI}") set(CMAKE_STATIC_LIBRARY_SUFFIX "_${ANDROID_ABI}.a")