Rust cross compilation

This commit is contained in:
Luke Parker 2024-05-25 19:18:39 -04:00 committed by j-berman
parent d6ca63618e
commit 8b76958485
2 changed files with 59 additions and 2 deletions

View File

@ -31,36 +31,47 @@ jobs:
toolchain:
- name: "RISCV 64bit"
host: "riscv64-linux-gnu"
rust_host: "riscv64gc-unknown-linux-gnu"
packages: "python3 gperf g++-riscv64-linux-gnu"
- name: "ARM v7"
host: "arm-linux-gnueabihf"
rust_host: "armv7-unknown-linux-gnueabihf"
packages: "python3 gperf g++-arm-linux-gnueabihf"
- name: "ARM v8"
host: "aarch64-linux-gnu"
rust_host: "aarch64-unknown-linux-gnu"
packages: "python3 gperf g++-aarch64-linux-gnu"
- name: "i686 Win"
host: "i686-w64-mingw32"
rust_host: "i686-pc-windows-gnu"
packages: "python3 g++-mingw-w64-i686"
- name: "i686 Linux"
host: "i686-pc-linux-gnu"
rust_host: "i686-unknown-linux-gnu"
packages: "gperf cmake g++-multilib python3-zmq"
- name: "Win64"
host: "x86_64-w64-mingw32"
rust_host: "x86_64-pc-windows-gnu"
packages: "cmake python3 g++-mingw-w64-x86-64"
- name: "x86_64 Linux"
host: "x86_64-unknown-linux-gnu"
rust_host: "x86_64-unknown-linux-gnu"
packages: "gperf cmake python3-zmq libdbus-1-dev libharfbuzz-dev"
- name: "Cross-Mac x86_64"
host: "x86_64-apple-darwin"
rust_host: "x86_64-apple-darwin"
packages: "cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python-dev python3-setuptools-git"
- name: "Cross-Mac aarch64"
host: "aarch64-apple-darwin"
rust_host: "aarch64-apple-darwin"
packages: "cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python-dev python3-setuptools-git"
- name: "x86_64 Freebsd"
host: "x86_64-unknown-freebsd"
rust_host: "x86_64-unknown-freebsd"
packages: "clang-8 gperf cmake python3-zmq libdbus-1-dev libharfbuzz-dev"
- name: "ARMv8 Android"
host: "aarch64-linux-android"
rust_host: "aarch64-linux-android"
packages: "gperf cmake python3"
name: ${{ matrix.toolchain.name }}
steps:
@ -95,6 +106,8 @@ jobs:
run: ${{env.APT_SET_CONF}}
- name: install dependencies
run: sudo apt update; sudo apt -y install build-essential libtool cmake autotools-dev automake pkg-config bsdmainutils curl git ca-certificates ccache ${{ matrix.toolchain.packages }}
- name: install rust target
run: rustup update stable; rustup target add ${{ matrix.toolchain.rust_host }}
- name: prepare w64-mingw32
if: ${{ matrix.toolchain.host == 'x86_64-w64-mingw32' || matrix.toolchain.host == 'i686-w64-mingw32' }}
run: |

View File

@ -26,11 +26,55 @@
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if(MINGW)
set(RUST_PLATFORM "pc-windows")
set(RUST_TOOLCHAIN "-gnu")
elseif(MSVC)
set(RUST_PLATFORM "pc-windows")
set(RUST_TOOLCHAIN "-msvc")
elseif(APPLE)
set(RUST_PLATFORM "apple-darwin")
set(RUST_TOOLCHAIN "")
elseif(FREEBSD)
set(RUST_PLATFORM "unknown-freebsd")
set(RUST_TOOLCHAIN "")
elseif(OPENBSD)
set(RUST_PLATFORM "unknown-openbsd")
set(RUST_TOOLCHAIN "")
elseif(ANDROID)
set(RUST_PLATFORM "linux-android")
if(ARCH_ID MATCHES "(arm|armv7)")
set(RUST_TOOLCHAIN "eabi")
else()
set(RUST_TOOLCHAIN "")
endif()
elseif(DRAGONFLY)
set(RUST_PLATFORM "unknown-dragonfly")
set(RUST_TOOLCHAIN "")
elseif(CMAKE_SYSTEM_NAME MATCHES "(SunOS|Solaris)")
if(ARCH_ID MATCHES "x86_64")
set(RUST_PLATFORM "pc-solaris")
set(RUST_TOOLCHAIN "")
elseif(ARCH_ID MATCHES "sparcv9")
set(RUST_PLATFORM "sun-solaris")
set(RUST_TOOLCHAIN "")
endif()
else()
set(RUST_PLATFORM "unknown-linux")
if(ARCH_ID MATCHES "armv7")
set(RUST_TOOLCHAIN "-gnueabi")
else()
set(RUST_TOOLCHAIN "-gnu")
endif()
endif()
set(RUST_TARGET "${ARCH_ID}-${RUST_PLATFORM}${RUST_TOOLCHAIN}")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CARGO_CMD cargo build)
set(CARGO_CMD cargo build --target "${RUST_TARGET}")
set(TARGET_DIR "debug")
else ()
set(CARGO_CMD cargo build --release)
set(CARGO_CMD cargo build --target "${RUST_TARGET}" --release)
set(TARGET_DIR "release")
endif ()