diff --git a/.github/workflows/release_cross_compiled.yaml b/.github/workflows/release_cross_compiled.yaml new file mode 100644 index 000000000..bc6495977 --- /dev/null +++ b/.github/workflows/release_cross_compiled.yaml @@ -0,0 +1,104 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [main] + tags: + - "**" # Push events to every tag including hierarchical tags like v1.0/beta + workflow_dispatch: + +name: Release + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + RPOLARS_FULL_FEATURES: "true" + RPOLARS_CARGO_CLEAN_DEPS: "true" + RPOLARS_PROFILE: release-optimized + +jobs: + build: + runs-on: ${{ matrix.config.os }} + + name: ${{ matrix.config.os }} (${{ matrix.config.r }}) + + permissions: + contents: write + + strategy: + fail-fast: false + matrix: + config: + - {os: ubuntu-latest, r: 'release', target: 'x86_64-apple-darwin'} + - {os: ubuntu-latest, r: 'release', target: 'aarch64-apple-darwin'} + + steps: + - uses: actions/checkout@v3 + + - uses: ./.github/actions/setup + + - name: Fix path for Windows caching + if: runner.os == 'Windows' + shell: bash + run: echo "C:/Program Files/Git/usr/bin" >> $GITHUB_PATH + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + r-version: ${{ matrix.config.r }} + http-user-agent: ${{ matrix.config.http-user-agent }} + use-public-rspm: true + rtools-version: ${{ matrix.config.rtools-version }} + Ncpus: 2 + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::rcmdcheck + needs: dev + pak-version: devel + env: + CI: false + + - name: cross compile + run: | + pwd + rustup target add "${{ runner.target }}" + rustup default "${{ runner.target }}" + cargo build --lib --profile release-optimized --manifest-path=./src/rust/Cargo.toml + mv ./src/rust/target/release-optimized/libr_polars.a ./inst/ + echo "${{ runner.os }}" > .inst/target.txt + cat .inst/target.txt + ls -l + ls ./inst/ -l + shell: bash + + - name: build source (with object file) + run: | + runner_os <- readLines("./inst/target.txt")[1] + fn = devtools::build(vignettes = FALSE) + if (R.version$os != "mingw32") { + newfn = paste0(substr(fn,1,regexpr("_",fn)),"_cross_",runner_os,"_",R.version$platform,".",tools::file_ext(fn)) + file.rename(fn, newfn) + } else { + file.rename(fn,"../polars.zip") #R expects specific windows binary filename + } + shell: Rscript {0} + + - name: Release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request' + with: + files: | + ../polars_* + ../polars.zip + + - name: print files + run: print(list.files("..",recursive = TRUE,full.names=TRUE)) + shell: Rscript {0} + + - name: print wd + run: print(getwd()) + shell: Rscript {0} diff --git a/src/Makevars b/src/Makevars index 74fc41ef0..de414e0e4 100644 --- a/src/Makevars +++ b/src/Makevars @@ -15,6 +15,12 @@ $(SHLIB): $(STATLIB) CARGOTMP = $(CURDIR)/.cargo $(STATLIB): + if [ -f "$(CURDIR)/../inst/libr_polars.a" ]; then \ + echo "refer directly to a precompiled object file + skip cargo build"; \ + mkdir -p ./rust/target/$(RPOLARS_PROFILE) ; \ + mv $(CURDIR)/../inst/libr_polars.a ./rust/target/$(RPOLARS_PROFILE)/libr_polars.a ; \ + exit 0 ; \ + fi && \ if [ "true" != "true" ]; then \ export CARGO_HOME=$(CARGOTMP); \ fi && \