Compare commits

...

18 Commits

Author SHA1 Message Date
3fd7ed4337 Merge branch 'master' into add_buildroot 2021-08-10 21:12:00 +02:00
ac1f7b020d Merge pull request #554 from bensuperpc/Update_readme
Update Readme and fix CI
2021-08-10 00:40:48 +02:00
95579e0562 Merge pull request #549 from bensuperpc/remove_manylinux2014-aarch64
Remove manylinux2014-aarch64
2021-08-09 22:57:48 +02:00
ab5dd0c8a5 Update Readme and fix CI
Update Readme and fix CI

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-08-09 21:37:16 +02:00
281a19366e Re-Add qt5 minimal
Re-Add qt5 minimal

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-08-09 19:34:21 +02:00
3c20faed07 Disable qt5
Disable qt5

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-08-09 13:10:51 +02:00
0a5eeacfdb Merge pull request #553 from bensuperpc/Update_scripts
Update script and CI
2021-08-09 08:39:05 +02:00
0da9a72049 Add quotes
Add quotes

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-08-08 22:15:47 +02:00
b5a73bef22 Improve buildroot builder
Improve buildroot builder

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-08-08 22:09:24 +02:00
1866b69356 Fix readme
Fix readme

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-08-08 20:58:04 +02:00
d59411d2cb Fix bash scripts
Fix bash scripts

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-08-08 20:45:36 +02:00
cb5ab9f914 Merge branch 'add_buildroot' of https://github.com/bensuperpc/dockcross into add_buildroot 2021-08-08 20:36:38 +02:00
4e8fad2063 Add Qt5 minimal
Add Qt5 minimal

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-08-08 20:36:32 +02:00
0b7e44d6a4 Merge branch 'dockcross:master' into add_buildroot 2021-08-08 13:19:46 +02:00
f3aa59ba6e Improve full image aarch64
Improve full image aarch64

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-08-08 13:13:19 +02:00
0b90985648 Add full image
Add full image

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-08-08 03:52:31 +02:00
c6c159b900 Merge pull request #551 from bensuperpc/Fix_typo
Fix typo
2021-08-07 17:21:47 +02:00
b32a1c22b4 Fix typo
Fix typo

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
2021-08-07 17:21:08 +02:00
24 changed files with 4014 additions and 123 deletions

View File

@ -9,8 +9,8 @@ jobs:
- uses: actions/stale@v4
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
exempt-issue-milestones: 'future,alpha,beta,release'
exempt-pr-milestones: 'bugfix,improvement'
exempt-issue-milestones: 'future,alpha,beta,release,bugfix,improvement,enhancement,help wanted'
exempt-pr-milestones: 'bugfix,improvement,enhancement,help wanted'
exempt-all-pr-assignees: true
stale-issue-message: 'This issue is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 30 days.'
stale-pr-message: 'This PR is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 30 days.'

View File

@ -5,12 +5,12 @@ on:
branches:
- '*'
paths-ignore:
- '**/README.md'
- '**.md'
pull_request:
branches:
- '*'
paths-ignore:
- '**/README.md'
- '**.md'
workflow_dispatch:
jobs:
@ -48,7 +48,7 @@ jobs:
matrix:
arch_name: [android-arm, android-arm64, android-x86, android-x86_64,
linux-arm64, linux-arm64-musl, linux-armv5, linux-armv5-musl,
linux-armv6, linux-armv6-lts, linux-armv6-musl,
linux-armv6, linux-armv6-lts, linux-armv6-musl, linux-arm64-full,
linux-armv7, linux-armv7a, linux-armv7l-musl,
linux-x64-clang, linux-s390x, linux-x64, linux-x86,
linux-mips, linux-ppc64le, web-wasm,

View File

@ -5,12 +5,12 @@ on:
branches:
- '*'
paths-ignore:
- '**/README.md'
- '**.md'
pull_request:
branches:
- '*'
paths-ignore:
- '**/README.md'
- '**.md'
workflow_dispatch:
jobs:

View File

@ -14,7 +14,7 @@ BIN = ./bin
# These images are built using the "build implicit rule"
STANDARD_IMAGES = android-arm android-arm64 android-x86 android-x86_64 \
linux-x86 linux-x64 linux-x64-clang linux-arm64 linux-arm64-musl \
linux-x86 linux-x64 linux-x64-clang linux-arm64 linux-arm64-musl linux-arm64-full \
linux-armv5 linux-armv5-musl linux-m68k-uclibc linux-s390x \
linux-armv6 linux-armv6-lts linux-armv6-musl \
linux-armv7l-musl linux-armv7 linux-armv7a \
@ -24,7 +24,7 @@ STANDARD_IMAGES = android-arm android-arm64 android-x86 android-x86_64 \
# Generated Dockerfiles.
GEN_IMAGES = android-arm android-arm64 \
linux-x86 linux-x64 linux-x64-clang linux-arm64 linux-arm64-musl \
linux-x86 linux-x64 linux-x64-clang linux-arm64 linux-arm64-musl linux-arm64-full \
manylinux2014-x64 manylinux2014-x86 \
web-wasm linux-mips \
windows-static-x86 windows-static-x64 windows-static-x64-posix \
@ -40,7 +40,7 @@ GEN_IMAGE_DOCKERFILES = $(addsuffix /Dockerfile,$(GEN_IMAGES))
NON_STANDARD_IMAGES = manylinux2014-x64 manylinux2014-x86 web-wasm
# Docker composite files
DOCKER_COMPOSITE_SOURCES = common.docker common.debian common.manylinux \
DOCKER_COMPOSITE_SOURCES = common.docker common.debian common.manylinux common.buildroot \
common.crosstool common.windows common-manylinux.crosstool common.dockcross common.label-and-env
DOCKER_COMPOSITE_FOLDER_PATH = common/
DOCKER_COMPOSITE_PATH = $(addprefix $(DOCKER_COMPOSITE_FOLDER_PATH),$(DOCKER_COMPOSITE_SOURCES))
@ -93,6 +93,7 @@ $(GEN_IMAGE_DOCKERFILES) Dockerfile: %Dockerfile: %Dockerfile.in $(DOCKER_COMPOS
-e '/common.debian/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.debian' \
-e '/common.manylinux/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.manylinux' \
-e '/common.crosstool/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.crosstool' \
-e '/common.buildroot/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.buildroot' \
-e '/common-manylinux.crosstool/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common-manylinux.crosstool' \
-e '/common.windows/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.windows' \
-e '/common.dockcross/ r $(DOCKER_COMPOSITE_FOLDER_PATH)common.dockcross' \
@ -206,7 +207,7 @@ purge: clean
# Check bash syntax
bash-check:
find . -type f \( -name "*.sh" -o -name "*.bash" \) -print0 | xargs -0 -P"$(shell nproc)" -I{} \
$(SHELLCHECK) --check-sourced --color=auto --format=gcc --severity=error --shell=bash --enable=all "{}"
$(SHELLCHECK) --check-sourced --color=auto --format=gcc --severity=warning --shell=bash --enable=all "{}"
#
# testing implicit rule

101
README.md
View File

@ -12,35 +12,24 @@ Cross compiling toolchains in Docker images.
- Pre-built and configured toolchains for cross compiling.
- Most images also contain an emulator for the target system.
- Clean separation of build tools, source code, and build artifacts.
- Commands in the container are run as the calling user, so that any
created files have the expected ownership, (i.e. not root).
- Make variables ([CC]{.title-ref}, [LD]{.title-ref} etc) are set to
point to the appropriate tools in the container.
- Commands in the container are run as the calling user, so that any created files have the expected ownership, (i.e. not root).
- Make variables **CC**, **CXX**, **LD** etc) are set to point to the appropriate tools in the container.
- Recent [CMake](https://cmake.org) and ninja are precompiled.
- [Conan.io](https://www.conan.io) can be used as a package manager.
- Toolchain files configured for CMake.
- Current directory is mounted as the container\'s workdir, `/work`.
- Works with the [Docker for
Mac](https://docs.docker.com/docker-for-mac/) and [Docker for
Windows](https://docs.docker.com/docker-for-windows/).
- Support using alternative container executor by setting
[OCI_EXE]{.title-ref} environment variable. By default, it searches
for [docker]{.title-ref} and [podman](https://podman.io) executable.
- Works with the [Docker for Mac](https://docs.docker.com/docker-for-mac/) and [Docker for Windows](https://docs.docker.com/docker-for-windows/).
- Support using alternative container executor by setting **OCI_EXE** environment variable. By default, it searches for [docker](https://www.docker.com) and [podman](https://podman.io) executable.
## Examples
1. `dockcross make`: Build the *Makefile* in the current directory.
2. `dockcross cmake -Bbuild -H. -GNinja`: Run CMake with a build
directory `./build` for a *CMakeLists.txt* file in the current
directory and generate `ninja` build configuration files.
2. `dockcross cmake -Bbuild -H. -GNinja`: Run CMake with a build directory `./build` for a *CMakeLists.txt* file in the current directory and generate `ninja` build configuration files.
3. `dockcross ninja -Cbuild`: Run ninja in the `./build` directory.
4. `dockcross bash -c '$CC test/C/hello.c -o hello'`: Build the
*hello.c* file with the compiler identified with the `CC`
environmental variable in the build environment.
4. `dockcross bash -c '$CC test/C/hello.c -o hello'`: Build the *hello.c* file with the compiler identified with the `CC` environmental variable in the build environment.
5. `dockcross bash`: Run an interactive shell in the build environment.
Note that commands are executed verbatim. If any shell processing for
environment variable expansion or redirection is required, please use
Note that commands are executed verbatim. If any shell processing for environment variable expansion or redirection is required, please use
```bash
bash -c "<command args>"
```
@ -76,42 +65,42 @@ The dockcross script will execute the given command-line inside the container, a
## Summary cross compilers
| Image name | Arch | Compiler | Target OS |
| Image name | Target arch | Compiler | Target OS |
|:-------:|:--------:|:------:|:-----:|
| dockcross/base | - | - | - |
| dockcross/android-arm | ARMv7 | Clang | Android 32 bit |
| dockcross/android-arm | ARMv7 | Clang | Android |
| dockcross/android-arm64 | ARMv8 | Clang | Android |
| dockcross/android-x86 | x86 | Clang | Android x86 |
| dockcross/android-x86_64 | x86_64 | Clang | Android x86_64 |
| dockcross/linux-arm64 | ARMv8 | GCC | Linux ARMv8 |
| dockcross/linux-arm64-musl | ARMv8 | GCC + musl | Linux ARMv8 |
| dockcross/linux-armv5 | ARMv5 | GCC | Linux ARMv5 |
| dockcross/linux-armv5-musl | ARMv5 | GCC + musl | Linux ARMv5 |
| dockcross/linux-armv6 | ARMv6 | GCC | Linux ARMv6 |
| dockcross/linux-armv6-lts | ARMv6 | GCC + Glibc 2.28 | Linux ARMv6 |
| dockcross/linux-armv6-musl | ARMv6 | GCC + musl | Linux ARMv6 |
| dockcross/linux-armv7 | ARMv7 | GCC | Linux ARMv7 |
| dockcross/linux-armv7a | ARMv7a | GCC | Linux ARMv7a |
| dockcross/linux-armv7l-musl | ARMv7l | GCC + musl | Linux ARMv7l |
| dockcross/linux-mips | mips | GCC | Linux mips |
| dockcross/linux-s390x | s390x | GCC | Linux s390x |
| dockcross/linux-ppc64le | ppc64le | GCC | Linux ppc64le |
| dockcross/linux-riscv32 | riscv32 | GCC | Linux riscv32 |
| dockcross/linux-riscv64 | riscv64 | GCC | Linux riscv64 |
| dockcross/linux-m68k-uclibc | m68k | GCC + uclibc | Linux m68k |
| dockcross/linux-xtensa-uclibc | xtensa | GCC + uclibc | Linux xtensa |
| dockcross/manylinux2014-x86 | x86 | GCC | Linux x86 |
| dockcross/manylinux2014-x64 | x86_64 | GCC | Linux x86_64 |
| dockcross/linux-x86 | x86 | GCC | Linux x86 |
| dockcross/linux-x64 | x86_64 | GCC | Linux x86_64 |
| dockcross/linux-x64-clang | x86_64 | Clang | Linux x86_64 |
| dockcross/android-x86 | x86 | Clang | Android |
| dockcross/android-x86_64 | x86_64 | Clang | Android |
| dockcross/linux-arm64 | ARMv8 | GCC | Linux |
| dockcross/linux-arm64-musl | ARMv8 | GCC + musl | Linux |
| dockcross/linux-armv5 | ARMv5 | GCC | Linux |
| dockcross/linux-armv5-musl | ARMv5 | GCC + musl | Linux |
| dockcross/linux-armv6 | ARMv6 | GCC | Linux |
| dockcross/linux-armv6-lts | ARMv6 | GCC + Glibc 2.28 | Linux |
| dockcross/linux-armv6-musl | ARMv6 | GCC + musl | Linux |
| dockcross/linux-armv7 | ARMv7 | GCC | Linux |
| dockcross/linux-armv7a | ARMv7a | GCC | Linux |
| dockcross/linux-armv7l-musl | ARMv7l | GCC + musl | Linux |
| dockcross/linux-mips | mips | GCC | Linux |
| dockcross/linux-s390x | s390x | GCC | Linux |
| dockcross/linux-ppc64le | ppc64le | GCC | Linux |
| dockcross/linux-riscv32 | riscv32 | GCC | Linux |
| dockcross/linux-riscv64 | riscv64 | GCC | Linux |
| dockcross/linux-m68k-uclibc | m68k | GCC + uclibc | Linux |
| dockcross/linux-xtensa-uclibc | xtensa | GCC + uclibc | Linux |
| dockcross/manylinux2014-x86 | x86 | GCC | Linux |
| dockcross/manylinux2014-x64 | x86_64 | GCC | Linux |
| dockcross/linux-x86 | x86 | GCC | Linux |
| dockcross/linux-x64 | x86_64 | GCC | Linux |
| dockcross/linux-x64-clang | x86_64 | Clang | Linux |
| dockcross/web-wasm | JS | LLVM | Web (JS) |
| dockcross/windows-shared-x86 | x86 | GCC | Windows x86 |
| dockcross/windows-shared-x64 | x86_64 | GCC | Windows x86_64 |
| dockcross/windows-shared-x64-posix | x86_64 | GCC | Windows x86_64 |
| dockcross/windows-static-x86 | x86 | GCC | Windows x86 |
| dockcross/windows-static-x64 | x86_64 | GCC | Windows x86_64 |
| dockcross/windows-static-x64-posix | x86_64 | GCC | Windows x86_64 |
| dockcross/windows-shared-x86 | x86 | GCC | Windows |
| dockcross/windows-shared-x64 | x86_64 | GCC | Windows |
| dockcross/windows-shared-x64-posix | x86_64 | GCC | Windows |
| dockcross/windows-static-x86 | x86 | GCC | Windows |
| dockcross/windows-static-x64 | x86_64 | GCC | Windows |
| dockcross/windows-static-x64-posix | x86_64 | GCC | Windows |
## Cross compilers
@ -322,6 +311,18 @@ linking.
32-bit Windows cross-compiler based on [MXE/MinGW-w64](https://mxe.cc/) with win32 threads and dynamic linking.
## Summary legacy cross compilers
The list of docker images that are no longer supported or broken
| Image name | Target arch | Compiler | Target OS |
|:-------:|:--------:|:------:|:-----:|
| dockcross/manylinux2014-aarch64 | ARMv8 | GCC 4.8 | manylinux |
| dockcross/manylinux1-x86 | x86 | GCC | manylinux |
| dockcross/manylinux1-x64 | x86_64 | GCC| manylinux |
| dockcross/manylinux2010-x86 | x86 | GCC | manylinux |
| dockcross/manylinux2010-x64 | x86_64 | GCC | manylinux |
## Articles
- [dockcross: C++ Write Once, Run

30
common/common.buildroot Normal file
View File

@ -0,0 +1,30 @@
# Install Debian packages required for `buildroot`.
RUN apt-get update --yes && apt-get install --no-install-recommends --yes \
gawk \
gperf \
help2man \
python3-dev \
texinfo \
unzip \
libtool \
libtool-bin \
&& apt-get clean autoclean --yes \
&& apt-get autoremove --yes \
&& rm -rf /var/lib/{apt,dpkg,cache,log}/
COPY \
imagefiles/install-buildroot-toolchain.sh \
buildroot.config \
/dockcross/
# Build and install the toolchain, cleaning up artifacts afterwards.
RUN mkdir /dockcross/buildroot \
&& cd /dockcross/buildroot \
&& /dockcross/install-buildroot-toolchain.sh \
-c "/dockcross/buildroot.config" \
-v "${BR_VERSION}" \
&& rm -rf /dockcross/buildroot /dockcross/install-buildroot-toolchain.sh
# Restore our default workdir (from "dockcross/base").
WORKDIR /work

View File

@ -48,7 +48,7 @@ RUN mkdir /dockcross/crosstool \
&& cd /dockcross/crosstool \
&& /dockcross/install-crosstool-ng-toolchain.sh \
-p "${XCC_PREFIX}" \
-c /dockcross/crosstool-ng.config \
-c "/dockcross/crosstool-ng.config" \
-v "${CT_VERSION}" \
&& rm -rf /dockcross/crosstool /dockcross/install-crosstool-ng-toolchain.sh

View File

@ -25,7 +25,7 @@ if ! command -v git &> /dev/null; then
exit 1
fi
if [[ "${CMAKE_VERSION}" == "" ]]; then
if [[ -z "${CMAKE_VERSION}" ]]; then
echo >&2 'error: CMAKE_VERSION env. variable must be set to a non-empty value'
exit 1
fi
@ -33,16 +33,16 @@ fi
cd /usr/src
# If the first link doesn't work, it will use the mirror on github
git clone "$CMAKE_URL" CMake -b v$CMAKE_VERSION --depth 1 \
|| git clone "$CMAKE_MIRROR_URL" CMake -b v$CMAKE_VERSION --depth 1
git clone "$CMAKE_URL" CMake -b "v$CMAKE_VERSION" --depth 1 \
|| git clone "$CMAKE_MIRROR_URL" CMake -b "v$CMAKE_VERSION" --depth 1
mkdir /usr/src/CMake-build
cd /usr/src/CMake-build
${WRAPPER} /usr/src/CMake/bootstrap \
--parallel=$(nproc) \
--parallel="$(nproc)" \
-- -DCMAKE_USE_OPENSSL=OFF
${WRAPPER} make -j$(nproc)
${WRAPPER} make -j"$(nproc)"
mkdir /usr/src/CMake-ssl-build
@ -55,7 +55,7 @@ ${WRAPPER} /usr/src/CMake-build/bin/cmake \
-DCMAKE_USE_OPENSSL:BOOL=ON \
-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl \
../CMake
${WRAPPER} make -j$(nproc) install
${WRAPPER} make -j"$(nproc)" install
# Cleanup install tree
cd /usr/src/cmake-$CMAKE_VERSION

View File

@ -18,7 +18,7 @@ function do_curl_build {
# We do this shared to avoid obnoxious linker issues where git couldn't
# link properly. If anyone wants to make this build statically go for it.
LIBS=-ldl CFLAGS=-Wl,--exclude-libs,ALL ./configure --with-ssl --disable-static > /dev/null
make -j$(nproc) > /dev/null
make -j"$(nproc)" > /dev/null
make install > /dev/null
}

View File

@ -12,7 +12,7 @@ if ! command -v tar &> /dev/null; then
exit 1
fi
if [[ "${GIT_VERSION}" == "" ]]; then
if [[ -z "${GIT_VERSION}" ]]; then
echo >&2 'error: GIT_VERSION env. variable must be set to a non-empty value'
exit 1
fi
@ -32,18 +32,18 @@ curl --connect-timeout 20 \
--retry-max-time 40 \
-# -LO $url
tar xvzf git-${GIT_VERSION}.tar.gz --no-same-owner
rm -f git-${GIT_VERSION}.tar.gz
tar xvzf "git-${GIT_VERSION}.tar.gz" --no-same-owner
rm -f "git-${GIT_VERSION}.tar.gz"
pushd git-${GIT_VERSION}
pushd "git-${GIT_VERSION}"
./configure --prefix=/usr/local --with-curl
make -j$(nproc)
make -j"$(nproc)"
make install
popd
ldconfig
rm -rf git-${GIT_VERSION}
rm -rf "git-${GIT_VERSION}"
# turn the detached message off
git config --global advice.detachedHead false

View File

@ -59,7 +59,7 @@ PERL_DOWNLOAD_URL=https://www.cpan.org/src/5.0
function do_perl_build {
${WRAPPER} sh Configure -des -Dprefix=/opt/perl > /dev/null
${WRAPPER} make -j$(nproc) > /dev/null
${WRAPPER} make -j"$(nproc)" > /dev/null
${WRAPPER} make install > /dev/null
}
@ -84,7 +84,7 @@ function build_perl {
function do_openssl_build {
${WRAPPER} ./config no-shared -fPIC $CONFIG_FLAG --prefix=/usr/local/ssl --openssldir=/usr/local/ssl > /dev/null
${WRAPPER} make -j$(nproc) > /dev/null
${WRAPPER} make -j"$(nproc)" > /dev/null
${WRAPPER} make install_sw > /dev/null
}

View File

@ -25,13 +25,13 @@ while [ $# -gt 0 ]; do
done
# Download
wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz
tar xvf Python-${PYTHON_VERSION}.tgz
wget "https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz"
tar xvf "Python-${PYTHON_VERSION}.tgz"
# Configure, build and install
cd Python-${PYTHON_VERSION}
cd "Python-${PYTHON_VERSION}" || exit 1
# Disable --enable-shared --enable-optimizations --prefix=/usr/local/python-${PYTHON_VERSION}
./configure --with-ensurepip=install
make -j$(nproc)
make -j"$(nproc) "
make install #altinstall
ln -s /usr/local/bin/python3 /usr/local/bin/python
@ -39,4 +39,4 @@ ln -s /usr/local/bin/pip3 /usr/local/bin/pip
# Clean
cd ..
rm -rf Python-${PYTHON_VERSION}
rm -rf "Python-${PYTHON_VERSION}"

View File

@ -41,20 +41,20 @@ command:update-image() {
}
help:update-image() {
echo Pull the latest $FINAL_IMAGE .
echo "Pull the latest $FINAL_IMAGE ."
}
command:update-script() {
if cmp -s <( $OCI_EXE run --rm $FINAL_IMAGE ) $0; then
echo $0 is up to date
echo "$0 is up to date"
else
echo -n Updating $0 '... '
echo -n "Updating $0 ... "
$OCI_EXE run --rm $FINAL_IMAGE > $0 && echo ok
fi
}
help:update-image() {
echo Update $0 from $FINAL_IMAGE .
echo "Update $0 from $FINAL_IMAGE ."
}
command:update() {
@ -63,7 +63,7 @@ command:update() {
}
help:update() {
echo Pull the latest $FINAL_IMAGE, and then update $0 from that.
echo "Pull the latest $FINAL_IMAGE, and then update $0 from that."
}
command:help() {

View File

@ -24,8 +24,8 @@ fi
# The dockcross script sets the BUILDER_UID and BUILDER_GID vars.
if [[ -n $BUILDER_UID ]] && [[ -n $BUILDER_GID ]]; then
groupadd -o -g $BUILDER_GID $BUILDER_GROUP 2> /dev/null
useradd -o -m -g $BUILDER_GID -u $BUILDER_UID $BUILDER_USER 2> /dev/null
groupadd -o -g "$BUILDER_GID" "$BUILDER_GROUP" 2> /dev/null
useradd -o -m -g "$BUILDER_GID" -u "$BUILDER_UID" "$BUILDER_USER" 2> /dev/null
export HOME=/home/${BUILDER_USER}
shopt -s dotglob
cp -r /root/* $HOME/
@ -37,8 +37,8 @@ if [[ -n $BUILDER_UID ]] && [[ -n $BUILDER_GID ]]; then
fi
# Enable passwordless sudo capabilities for the user
chown root:$BUILDER_GID $(which gosu)
chmod +s $(which gosu); sync
chown root:$BUILDER_GID "$(which gosu)"
chmod +s "$(which gosu)"; sync
# Execute project specific pre execution hook
if [[ -e /work/.dockcross ]]; then

View File

@ -0,0 +1,43 @@
#!/usr/bin/env bash
set -x
set -e
set -o pipefail
ROOT=${PWD}
usage() { echo "Usage: $0 -c <config-path> -v <version>" 1>&2; exit 1; }
REPO_URL="https://github.com/buildroot/buildroot.git"
CONFIG_PATH=""
REV="2021.08-rc1"
while getopts "c:v:" o; do
case "${o}" in
c)
CONFIG_PATH=$(readlink -f ${OPTARG})
;;
v)
REV=${OPTARG}
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
if [ -z ${CONFIG_PATH} ] || [ ! -f ${CONFIG_PATH} ]; then
echo "ERROR: Missing config path (-c)."
usage
fi
if [ -z ${REV} ]; then
echo "WARNING: No version selected, use default version: $REV (-v)."
fi
git clone "$REPO_URL" --recurse-submodules --remote-submodules #--branch="$REV"
cd buildroot
git checkout "$REV"
cp "$CONFIG_PATH" .config
make

View File

@ -28,7 +28,7 @@ if ! command -v tar &> /dev/null; then
exit 1
fi
if [[ "${CMAKE_VERSION}" == "" ]]; then
if [[ -z "${CMAKE_VERSION}" ]]; then
echo >&2 'error: CMAKE_VERSION env. variable must be set to a non-empty value'
exit 1
fi
@ -45,10 +45,10 @@ curl --connect-timeout 30 \
--retry-max-time 30 \
-# -LO $url
tar -xzvf ${CMAKE_ROOT}.tar.gz
rm -f ${CMAKE_ROOT}.tar.gz
tar -xzvf "${CMAKE_ROOT}.tar.gz"
rm -f "${CMAKE_ROOT}.tar.gz"
cd ${CMAKE_ROOT}
cd "${CMAKE_ROOT}"
rm -rf doc man
rm -rf bin/cmake-gui

View File

@ -89,7 +89,7 @@ BOOTSTRAP_PREFIX="${CTNG}/prefix"
./bootstrap
./configure \
--prefix "${BOOTSTRAP_PREFIX}"
make -j$(nproc)
make -j"$(nproc)"
make install
##

View File

@ -14,7 +14,7 @@ if ! command -v gpg &> /dev/null; then
fi
GOSU_VERSION=1.12
dpkgArch=$(if test $(uname -m) = "x86_64"; then echo amd64; else echo i386; fi)
dpkgArch=$(if test "$(uname -m)" = "x86_64"; then echo amd64; else echo i386; fi)
url="https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${dpkgArch}"
url_key="https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${dpkgArch}.asc"

View File

@ -0,0 +1,41 @@
FROM dockcross/base:latest
# This is for 64-bit ARM Linux machine
# Buildroot version
ENV BR_VERSION 2021.08-rc1
#include "common.buildroot"
# The cross-compiling emulator
RUN apt-get update \
&& apt-get install -y \
qemu-user \
qemu-user-static \
&& apt-get clean --yes
# The CROSS_TRIPLE is a configured alias of the "aarch64-buildroot-linux-gnu" target.
ENV CROSS_TRIPLE aarch64-buildroot-linux-gnu
ENV CROSS_ROOT /buildroot
ENV AS=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-as \
AR=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ar \
CC=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-gcc \
CPP=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-cpp \
CXX=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-g++ \
LD=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ld \
FC=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-gfortran
ENV QEMU_LD_PREFIX "${CROSS_ROOT}/${CROSS_TRIPLE}/sysroot"
ENV QEMU_SET_ENV "LD_LIBRARY_PATH=${CROSS_ROOT}/lib:${QEMU_LD_PREFIX}"
COPY Toolchain.cmake ${CROSS_ROOT}/
ENV CMAKE_TOOLCHAIN_FILE ${CROSS_ROOT}/Toolchain.cmake
#ENV PKG_CONFIG_PATH /usr/lib/aarch64-linux-gnu/pkgconfig
# Linux kernel cross compilation variables
ENV PATH ${PATH}:${CROSS_ROOT}/bin
ENV CROSS_COMPILE ${CROSS_TRIPLE}-
ENV ARCH arm64
#include "common.label-and-env"

View File

@ -0,0 +1,22 @@
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(cross_triple "aarch64-buildroot-linux-gnu")
set(cross_root /buildroot)
set(CMAKE_C_COMPILER $ENV{CC})
set(CMAKE_CXX_COMPILER $ENV{CXX})
set(CMAKE_Fortran_COMPILER $ENV{FC})
set(CMAKE_CXX_FLAGS "-I ${cross_root}/include/")
set(CMAKE_FIND_ROOT_PATH ${cross_root} ${cross_root}/${cross_triple})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_SYSROOT ${cross_root}/${cross_triple}/sysroot)
set(CMAKE_CROSSCOMPILING_EMULATOR /usr/bin/qemu-aarch64)

File diff suppressed because it is too large Load Diff

View File

@ -1,26 +0,0 @@
#!/bin/bash
set -euo pipefail
# More info: https://github.com/GoogleContainerTools/container-diff
if (( $# < 1 || $# > 2 )); then
echo "Need 1 or 2 arguments: <img1> <img2>"
exit 1
fi
if (( $# == 1 )); then
container-diff analyze $1 --type=history 2>&1 | tee -a analyze-history.txt
container-diff analyze $1 --type=file 2>&1 | tee -a analyze-file.txt
container-diff analyze $1 --type=size 2>&1 | tee -a analyze-size.txt
container-diff analyze $1 --type=apt 2>&1 | tee -a analyze-apt.txt
container-diff analyze $1 --type=pip 2>&1 | tee -a analyze-pip.txt
fi
if (( $# == 2 )); then
container-diff diff $1 $2 --type=history 2>&1 | tee -a diff-history.txt
container-diff diff $1 $2 --type=file 2>&1 | tee -a diff-file.txt
container-diff diff $1 $2 --type=size 2>&1 | tee -a diff-size.txt
container-diff diff $1 $2 --type=apt 2>&1 | tee -a diff-apt.txt
container-diff diff $1 $2 --type=pip 2>&1 | tee -a diff-pip.txt
fi

24
tools/dockcross-builder.sh Executable file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env bash
if (( $# >= 1 )); then
image=$1
build_file=build-${image%:*}
shift 1
cmake_arg=$*
echo "cmake arg: $cmake_arg"
#echo "Pulling dockcross/$image"
#docker pull dockcross/"$image"
echo "Make script dockcross-$image"
docker run --rm dockcross/"$image" > ./dockcross-"$image"
chmod +x ./dockcross-"$image"
echo "Build $build_file"
./dockcross-"$image" cmake -B "$build_file" -S . -G Ninja "$cmake_arg"
./dockcross-"$image" ninja -C "$build_file"
else
echo "Usage: ${0##*/} <docker imag (ex: linux-x64/linux-x64-clang/linux-arm64/windows-shared-x64/windows-static-x64...)> <cmake arg.>"
exit 1
fi

View File

@ -0,0 +1,27 @@
#!/usr/bin/env bash
# More info: https://github.com/GoogleContainerTools/container-diff
if (( $# < 1 || $# > 2 )); then
echo "Need 1 or 2 arguments: <img1> <img2>"
echo "For local image: daemon://<img>"
echo "For remote image: remote://<img>"
exit 1
fi
if (( $# == 1 )); then
container-diff analyze "$1" --type=history 2>&1 | tee -a analyze-history.txt
container-diff analyze "$1" --type=file 2>&1 | tee -a analyze-file.txt
container-diff analyze "$1" --type=size 2>&1 | tee -a analyze-size.txt
container-diff analyze "$1" --type=apt 2>&1 | tee -a analyze-apt.txt
container-diff analyze "$1" --type=pip 2>&1 | tee -a analyze-pip.txt
fi
if (( $# == 2 )); then
container-diff diff "$1" "$2" --type=history 2>&1 | tee -a diff-history.txt
container-diff diff "$1" "$2" --type=file 2>&1 | tee -a diff-file.txt
container-diff diff "$1" "$2" --type=size 2>&1 | tee -a diff-size.txt
container-diff diff "$1" "$2" --type=apt 2>&1 | tee -a diff-apt.txt
container-diff diff "$1" "$2" --type=pip 2>&1 | tee -a diff-pip.txt
fi