brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · a25a588 Raw
108 lines · bash
1#!/usr/bin/env bash2# ===----------------------------------------------------------------------===##3#4# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5# See https://llvm.org/LICENSE.txt for license information.6# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7#8# ===----------------------------------------------------------------------===##9 10#11# This script builds picolibc (https://github.com/picolibc/picolibc) from12# source to facilitate building libc++ against it.13#14 15set -e16 17PROGNAME="$(basename "${0}")"18 19function error() { printf "error: %s\n" "$*" >&2; exit 1; }20 21function usage() {22cat <<EOF23Usage:24${PROGNAME} [options]25 26[-h|--help]                  Display this help and exit.27 28--build-dir <DIR>            Path to the directory to use for building.29 30--install-dir <DIR>          Path to the directory to install the library to.31EOF32}33 34while [[ $# -gt 0 ]]; do35    case ${1} in36        -h|--help)37            usage38            exit 039            ;;40        --build-dir)41            build_dir="${2}"42            shift; shift43            ;;44        --install-dir)45            install_dir="${2}"46            shift; shift47            ;;48        --target)49            target="${2}"50            shift; shift51            ;;52        *)53            error "Unknown argument '${1}'"54            ;;55    esac56done57 58for arg in build_dir install_dir target; do59    if [ -z ${!arg+x} ]; then60        error "Missing required argument '--${arg//_/-}'"61    elif [ "${!arg}" == "" ]; then62        error "Argument to --${arg//_/-} must not be empty"63    fi64done65 66 67echo "--- Downloading picolibc"68picolibc_source_dir="${build_dir}/picolibc-source"69picolibc_build_dir="${build_dir}/picolibc-build"70mkdir -p "${picolibc_source_dir}"71mkdir -p "${picolibc_build_dir}"72# Download a known good version of picolibc.73picolibc_commit="48fbc2009c6473293d03d5ec6f190565c6223a5c"74curl -L "https://github.com/picolibc/picolibc/archive/${picolibc_commit}.zip" --output "${picolibc_source_dir}/picolibc.zip"75unzip -q "${picolibc_source_dir}/picolibc.zip" -d "${picolibc_source_dir}"76mv "${picolibc_source_dir}/picolibc-${picolibc_commit}"/* "${picolibc_source_dir}"77rm -rf "${picolibc_source_dir}/picolibc-${picolibc_commit}"78 79cat <<EOF > "${picolibc_build_dir}/meson-cross-build.txt"80[binaries]81c = ['${CC:-cc}', '--target=${target}', '-mfloat-abi=soft', '-nostdlib']82ar = 'llvm-ar'83as = 'llvm-as'84c_ld = 'lld'85strip = 'llvm-strip'86[host_machine]87system = 'none'88cpu_family = 'arm'89cpu = 'arm'90endian = 'little'91[properties]92skip_sanity_check = true93EOF94 95venv_dir="${build_dir}/meson-venv"96python3 -m venv "${venv_dir}"97# Install the version of meson that was the latest at the time this script was written.98"${venv_dir}/bin/pip" install "meson==1.9.0"99 100"${venv_dir}/bin/meson" setup \101  -Dincludedir=include -Dlibdir=lib -Dspecsdir=none -Dmultilib=false -Dpicoexit=false \102  --prefix "${install_dir}" \103  --cross-file "${picolibc_build_dir}/meson-cross-build.txt" \104  "${picolibc_build_dir}" \105  "${picolibc_source_dir}"106 107"${venv_dir}/bin/meson" install -C "${picolibc_build_dir}"108