commit 0131d764b9013a421bd08c9af77cf16160bd8df3 Author: H. Utku Maden Date: Tue Mar 19 18:01:11 2024 +0300 Initial Commit. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4ce945f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,65 @@ +# 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 + +# Set host name. +RUN echo docker_cross_compiler > /etc/hostname + +# 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 \ + libharfbuzz-dev \ + libpng-dev \ + libssl-dev \ + libxml2-dev \ + lzma-dev \ + mingw-w64 \ + nuget \ + ninja-build \ + 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 diff --git a/README.md b/README.md new file mode 100644 index 0000000..8d6fbda --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +QUIK Docker Cross Compiler +=========================== +This is the cross compilation C/C++ toolchain intended for QUIK. Use the Docker +container from this repository to cross compile natives for QUIK projects. diff --git a/cmake/linux-arm.cmake b/cmake/linux-arm.cmake new file mode 100644 index 0000000..a973557 --- /dev/null +++ b/cmake/linux-arm.cmake @@ -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) diff --git a/cmake/linux-arm64.cmake b/cmake/linux-arm64.cmake new file mode 100644 index 0000000..5008591 --- /dev/null +++ b/cmake/linux-arm64.cmake @@ -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) diff --git a/cmake/linux-x64.cmake b/cmake/linux-x64.cmake new file mode 100644 index 0000000..1366483 --- /dev/null +++ b/cmake/linux-x64.cmake @@ -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) diff --git a/cmake/linux-x86.cmake b/cmake/linux-x86.cmake new file mode 100644 index 0000000..2f2a27b --- /dev/null +++ b/cmake/linux-x86.cmake @@ -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) diff --git a/cmake/win-x64.cmake b/cmake/win-x64.cmake new file mode 100644 index 0000000..7224a0d --- /dev/null +++ b/cmake/win-x64.cmake @@ -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) diff --git a/cmake/win-x86.cmake b/cmake/win-x86.cmake new file mode 100644 index 0000000..1808cc4 --- /dev/null +++ b/cmake/win-x86.cmake @@ -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) diff --git a/sh/bashrc.sh b/sh/bashrc.sh new file mode 100644 index 0000000..7bafa63 --- /dev/null +++ b/sh/bashrc.sh @@ -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. diff --git a/sh/init.sh b/sh/init.sh new file mode 100644 index 0000000..6139bdd --- /dev/null +++ b/sh/init.sh @@ -0,0 +1,13 @@ +#!/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 diff --git a/sh/quik_build_native.sh b/sh/quik_build_native.sh new file mode 100644 index 0000000..cc5b191 --- /dev/null +++ b/sh/quik_build_native.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# $1 Source path of the project. +# $2 Target architecture list. +# DST is the destination directory. + +SRC=$1 +ARCHS=$2 + +if [ -z "$SRC" ] +then + echo You need to provide a source path. + return +fi + +if [ -z "$ARCHS" ] +then + ARCHS="linux-arm linux-arm64 linux-x64 win-x64 win-x86" +fi + +if [ -z "$DST" ] +then + DST=$PWD +fi + +for ARCH in $ARCHS; do + # Output directory. + PREFIX=$DST/runtimes/$ARCH/native + # Build directory. + BUILD=$DST/out/$ARCH + # Cmake toolchain file. + TOOLCHAIN=$DST/../cmake/$ARCH.cmake + + # Create directories. + mkdir -p $PREFIX $BUILD + # Configure CMAKE. + cmake -B $BUILD -S $SRC \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_FLAGS=-static-libgcc \ + -DCMAKE_CXX_FLAGS=-static-libgcc \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN \ + $QUIK_ADDITIONAL_CMAKE + + # Build and install. + ninja -C $BUILD all + ninja -C $BUILD install +done