#!/bin/bash -e # # Kangaroo Punch Toolchains # Copyright 2023-2024 Scott Duensing # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the “Software”), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # PIURL=https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools- function buildMacOSXToolchain() { local SDK=$1 local XCODE=$2 local PLATFORM=$3 local BASE=$(pwd) # This isn't great. What if there is more than one version installed? #local LLVM=$(ls -1 /usr/lib | grep llvm) #local CLANG=$(ls -1 /usr/lib/${LLVM}/lib/clang | grep -F .) mkdir -p work if [[ ! -d work/osxcross ]]; then git clone https://github.com/tpoechtrager/osxcross.git work/osxcross sudo work/osxcross/tools/get_dependencies.sh fi if [[ ! -f x-tools/${PLATFORM}/toolchain.cmake ]]; then pushd work/osxcross # Have we built Apple's clang? #if [[ ! -d "${BASE}/clang" ]]; then # UNATTENDED=1 INSTALLPREFIX=${BASE}/clang ./build_apple_clang.sh #fi # Do we have an existing SDK tarball? if [[ ! -f "${BASE}/${SDK}" ]]; then # Nope. Build tarball and keep for later. ./tools/gen_sdk_package_pbzx.sh "${BASE}/${XCODE}" mv -f MacOSX* "${BASE}/." fi # Put tarball in place. cp -f "${BASE}/${SDK}" tarballs/. # Build SDK. UNATTENDED=1 TARGET_DIR=${BASE}/x-tools/${PLATFORM} ./build.sh # Fix fubar in osxcross. [[ -d target ]] && rm -rf target ln -sf ${BASE}/x-tools/${PLATFORM} target # Build compiler runtime. ./build_compiler_rt.sh # Tidy up for next build. ./cleanup.sh popd fi } function install_x86_64_linux() { # Required tools for Linux x86_64. These should always be installed. sudo apt-get install -y \ binutils \ bison \ build-essential \ clang \ cmake \ curl \ flex \ git \ git-lfs \ liblzma-dev \ texinfo \ unzip \ zlib1g-dev } function install_x86_linux() { # x86 Linux support. sudo apt-get install -y gcc-multilib } function install_x86_64_windows() { # x86 and x86_64 Windows. sudo apt-get install -y mingw-w64 } function install_aarch64_pi() { # Raspberry Pi, various CPUs. wget -O- ${PIURL}aarch64-rpi3-linux-gnu.tar.xz | tar xJ } function install_armv6_pi() { wget -O- ${PIURL}armv6-rpi-linux-gnueabihf.tar.xz | tar xJ } function install_armv8_pi() { wget -O- ${PIURL}armv8-rpi3-linux-gnueabihf.tar.xz | tar xJ #***TODO*** sysroots } function install_x86_64_macos() { # MacOS x86, x86_64. #***TODO*** https://stackoverflow.com/questions/67712376/after-updating-gcc-clang-cant-find-libstdc-anymore buildMacOSXToolchain MacOSX10.13.sdk.tar.xz Xcode_9.4.1.xip x86_64-macos-apple } function install_aarch64_macos() { # MacOS aarch64. buildMacOSXToolchain MacOSX13.3.sdk.tar.xz Xcode_14.3.1.xip aarch64-macos-apple } function install_x86_dos() { # DJGPP for DOS. export DJGPP_PREFIX=$(pwd)/x-tools/djgpp mkdir -p work if [[ ! -d work/build-djgpp ]]; then git clone https://github.com/andrewwutw/build-djgpp.git work/build-djgpp fi if [[ ! -f x-tools/djgpp/setenv ]]; then pushd work/build-djgpp ./build-djgpp.sh 12.2.0 popd fi } ARCH=$1 PLAT=$2 HELP=1 COLS=2 ROWS=9 row=0 declare -A PLATFORMS=() PLATFORMS[0]="x86_64"; PLATFORMS[1]="linux" PLATFORMS[2]="x86"; PLATFORMS[3]="linux" PLATFORMS[4]="x86_64"; PLATFORMS[5]="windows" PLATFORMS[6]="aarch64"; PLATFORMS[7]="pi" PLATFORMS[8]="armv6"; PLATFORMS[9]="pi" PLATFORMS[10]="armv8"; PLATFORMS[11]="pi" PLATFORMS[12]="x86_64"; PLATFORMS[13]="macos" PLATFORMS[14]="aarch64"; PLATFORMS[15]="macos" PLATFORMS[16]="x86"; PLATFORMS[17]="dos" # Install all toolchains. if [[ "${ARCH}" == "all" && "${PLAT}" == "all" ]]; then HELP=0 for (( row=0; row