Design a docker container for cross compiling native dependencies.
This commit is contained in:
parent
79242127e5
commit
33427146e1
3
.gitignore
vendored
3
.gitignore
vendored
@ -4,4 +4,5 @@ obj/
|
|||||||
riderModule.iml
|
riderModule.iml
|
||||||
/_ReSharper.Caches/
|
/_ReSharper.Caches/
|
||||||
.idea
|
.idea
|
||||||
.vscode
|
.vscode
|
||||||
|
nuget_repo
|
||||||
|
59
Dockerfile
Normal file
59
Dockerfile
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
# This is going to create an environment for you to cross compile all the
|
||||||
|
# packages needed to build this project.
|
||||||
|
#
|
||||||
|
# As always, debian > ubuntu <3
|
||||||
|
FROM debian:stable-slim
|
||||||
|
WORKDIR /root
|
||||||
|
|
||||||
|
# Download and Install dependencies.
|
||||||
|
# Install WGET
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install -y sudo wget
|
||||||
|
|
||||||
|
# Add the .NET package repository to the repository listing.
|
||||||
|
RUN wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
|
||||||
|
RUN dpkg -i packages-microsoft-prod.deb
|
||||||
|
RUN rm packages-microsoft-prod.deb
|
||||||
|
|
||||||
|
# APT dependencies.
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install -y \
|
||||||
|
build-essential \
|
||||||
|
bzip2 \
|
||||||
|
cmake \
|
||||||
|
clang \
|
||||||
|
cpio \
|
||||||
|
dotnet-sdk-6.0 \
|
||||||
|
gcc-arm-linux-gnueabihf \
|
||||||
|
gcc-aarch64-linux-gnu \
|
||||||
|
gcc-i686-linux-gnu \
|
||||||
|
git \
|
||||||
|
libssl-dev \
|
||||||
|
libxml2-dev \
|
||||||
|
lzma-dev \
|
||||||
|
mingw-w64 \
|
||||||
|
nuget \
|
||||||
|
patch \
|
||||||
|
python3 \
|
||||||
|
xz-utils \
|
||||||
|
zlib1g-dev
|
||||||
|
|
||||||
|
# Clone osxcross
|
||||||
|
# Let's do this later.
|
||||||
|
# RUN git clone https://github.com/tpoechtrager/osxcross.git osxcross
|
||||||
|
|
||||||
|
# Setup interactive shell.
|
||||||
|
# Setup sudo. Remove password prompt for group "wheel".
|
||||||
|
# RUN echo "%wheel ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/quik_sudo_conf
|
||||||
|
|
||||||
|
# Create a default user and switch.
|
||||||
|
RUN adduser --comment "" --disabled-password quik
|
||||||
|
USER quik
|
||||||
|
WORKDIR /home/quik
|
||||||
|
|
||||||
|
# Copy bashrc
|
||||||
|
RUN cp /etc/bash.bashrc ~/.bashrc
|
||||||
|
RUN echo source $HOME/src/sh/bashrc.sh >> ~/.bashrc
|
||||||
|
|
||||||
|
# Execute an interactive shell.
|
||||||
|
CMD bash
|
13
cmake/linux-arm.cmake
Normal file
13
cmake/linux-arm.cmake
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# QUIK Toolchain file for Linux-arm systems.
|
||||||
|
# Copyright (C) 2023
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_NAME Linux)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
|
||||||
|
|
||||||
|
set(CMAKE_FIND_ROOT_PATH "/usr/arm-linux-gnueabihf")
|
||||||
|
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
13
cmake/linux-arm64.cmake
Normal file
13
cmake/linux-arm64.cmake
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# QUIK Toolchain file for Linux-arm64 (aarch64) systems.
|
||||||
|
# Copyright (C) 2023
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_NAME Linux)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
|
||||||
|
|
||||||
|
set(CMAKE_FIND_ROOT_PATH "/usr/aarch64-linux-gnu")
|
||||||
|
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
9
cmake/linux-x64.cmake
Normal file
9
cmake/linux-x64.cmake
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# QUIK Toolchain file for Linux-x64 (amd64) systems.
|
||||||
|
# Copyright (C) 2023
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_NAME Linux)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER g++)
|
||||||
|
|
||||||
|
add_compile_options(-m64)
|
14
cmake/linux-x86.cmake
Normal file
14
cmake/linux-x86.cmake
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# QUIK Toolchain file for Linux-x86 (i386) systems.
|
||||||
|
# Copyright (C) 2023
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_NAME Linux)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER i686-linux-gnu-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER i686-linux-gnu-g++)
|
||||||
|
|
||||||
|
add_compile_options(-m32 -march=i686)
|
||||||
|
|
||||||
|
set(CMAKE_FIND_ROOT_PATH "/usr/i686-linux-gnu")
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
14
cmake/win-x64.cmake
Normal file
14
cmake/win-x64.cmake
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# QUIK Toolchain file for Windows-x64 systems.
|
||||||
|
# Copyright (C) 2023
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
|
||||||
|
|
||||||
|
set(CMAKE_FIND_ROOT_PATH "/usr/x86_64-w64-mingw32")
|
||||||
|
add_compile_options(-m64)
|
||||||
|
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
14
cmake/win-x86.cmake
Normal file
14
cmake/win-x86.cmake
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# QUIK Toolchain file for Windows-x86 systems.
|
||||||
|
# Copyright (C) 2023
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER i686-w64-mingw32-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
|
||||||
|
|
||||||
|
set(CMAKE_FIND_ROOT_PATH "/usr/i686-w64-mingw32")
|
||||||
|
add_compile_options(-m32)
|
||||||
|
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
13
compose.yaml
Normal file
13
compose.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
services:
|
||||||
|
cmdline:
|
||||||
|
image: quik/quik
|
||||||
|
user: quik
|
||||||
|
working_dir: /home/quik
|
||||||
|
volumes:
|
||||||
|
- src:/home/quik/src
|
||||||
|
volumes:
|
||||||
|
src:
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
device: ${PWD}
|
||||||
|
o: bind
|
5
sh/bashrc.sh
Executable file
5
sh/bashrc.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
source $HOME/src/sh/init.sh
|
||||||
|
echo QUIK Project Copyright \(C\) 2023
|
||||||
|
echo
|
||||||
|
echo This is an interactive shell for QUIK build image.
|
||||||
|
echo SuperUser \(su/sudo\) commands are enabled without a password. Beware.
|
3
sh/build_native.sh
Executable file
3
sh/build_native.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
source $(dirname "$0")/quik_build_native.sh
|
||||||
|
quik_build_native "Quik.StbImage.redist" "linux-arm linux-arm64 linux-x64 linux-x86 win-x64 win-x86"
|
15
sh/init.sh
Executable file
15
sh/init.sh
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Change to source directory
|
||||||
|
cd $HOME/src
|
||||||
|
|
||||||
|
export QUIK_SRC=$PWD
|
||||||
|
export QNUGET_LOCAL=QuikLocal
|
||||||
|
export QNUGET_LOCAL_PATH=$QUIK_SRC/nuget_repo
|
||||||
|
# export QNUGET_REMOTE=nuget
|
||||||
|
|
||||||
|
# Create nuget repository.
|
||||||
|
mkdir -p $QUIK_SRC/nuget_repo
|
||||||
|
nuget sources Add -Name $QNUGET_LOCAL -Source $QNUGET_LOCAL_PATH -NonInteractive
|
||||||
|
|
||||||
|
source sh/quik_build_native.sh
|
38
sh/quik_build_native.sh
Executable file
38
sh/quik_build_native.sh
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# $1 Source path of the project.
|
||||||
|
# $2 Target architecture list.
|
||||||
|
|
||||||
|
quik_build_native () {
|
||||||
|
SRC=$1
|
||||||
|
NAME=$(dirname $SRC)
|
||||||
|
ARCHS=$2
|
||||||
|
|
||||||
|
cd $SRC
|
||||||
|
|
||||||
|
for ARCH in $ARCHS; do
|
||||||
|
# Output directory.
|
||||||
|
PREFIX=runtimes/$ARCH/native
|
||||||
|
# Build directory.
|
||||||
|
BUILD=out/$ARCH
|
||||||
|
# Cmake toolchain file.
|
||||||
|
TOOLCHAIN=../cmake/$ARCH.cmake
|
||||||
|
|
||||||
|
# Create directories.
|
||||||
|
mkdir -p $PREFIX $BUILD
|
||||||
|
# Configure CMAKE.
|
||||||
|
cmake -B $BUILD -S . \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=$PREFIX \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN
|
||||||
|
|
||||||
|
# Build and install.
|
||||||
|
make -C $BUILD all
|
||||||
|
make -C $BUILD install
|
||||||
|
done
|
||||||
|
|
||||||
|
mkdir bin
|
||||||
|
nuget pack -OutputDirectory bin
|
||||||
|
nuget push $(find bin/*.nupkg) -Source $QNUGET_LOCAL -NonInteractive
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user