commit e4e9ebd5b09ff2c6bbb9fd2fc3ff58fe3d863562 Author: Scott Duensing Date: Tue Nov 7 17:36:49 2023 -0600 Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4fae6dc --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.jpg filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..425e0ff --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*~ +work/ +x-tools/ +*.xip +*.xz diff --git a/icon.jpg b/icon.jpg new file mode 100644 index 0000000..75e1221 --- /dev/null +++ b/icon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65229651f8bb5ffb433012f0b98574af4478c66ad8cdb93e333bebbd45f15b07 +size 48307 diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..76926a6 --- /dev/null +++ b/install.sh @@ -0,0 +1,236 @@ +#!/bin/bash -e + + +# +# Copyright 2023 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/${PLATFORM}/toolchain.cmake ]]; 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