| #!/usr/bin/env bash |
| # tools/sethost.sh |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. The |
| # ASF licenses this file to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance with the |
| # License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations |
| # under the License. |
| # |
| |
| set -e |
| |
| progname=$0 |
| host= |
| wenv= |
| MAKECMD="make" |
| |
| function showusage { |
| echo "" |
| echo "USAGE: $progname [-l|m|c|g|n|B] [make-opts]" |
| echo " $progname -h" |
| echo "" |
| echo "Where:" |
| echo " -l|m|c|g|n|B selects Linux (l), macOS (m), Cygwin (c), BSD (B)," |
| echo " MSYS/MSYS2 (g) or Windows native (n). Default Linux" |
| echo " make-opts directly pass to make" |
| echo " -h will show this help test and terminate" |
| exit 1 |
| } |
| |
| # Parse command line |
| |
| while [ ! -z "$1" ]; do |
| case $1 in |
| -l ) |
| host=linux |
| ;; |
| -c ) |
| host=windows |
| wenv=cygwin |
| ;; |
| -g ) |
| host=windows |
| wenv=msys |
| ;; |
| -m ) |
| host=macos |
| ;; |
| -n ) |
| host=windows |
| wenv=native |
| ;; |
| -B ) |
| host=bsd |
| MAKECMD="gmake" |
| ;; |
| -h ) |
| showusage |
| ;; |
| * ) |
| break |
| ;; |
| esac |
| shift |
| done |
| |
| # If the host was not explicitly given, try to guess. |
| # Examples of "uname -s" outputs: |
| # macOS: Darwin |
| # Cygwin: CYGWIN_NT-10.0-WOW |
| # Linux: Linux |
| # MSYS: MINGW32_NT-6.2 |
| # MSYS2: MSYS_NT-6.3-9600 |
| # BSD: FreeBSD, OpenBSD, NetBSD, *BSD |
| |
| if [ -z "$host" ]; then |
| case $(uname -s) in |
| Darwin) |
| host=macos |
| ;; |
| *BSD) |
| host=bsd |
| MAKECMD="gmake" |
| ;; |
| CYGWIN*) |
| host=windows |
| wenv=cygwin |
| ;; |
| MINGW32*) |
| host=windows |
| wenv=msys |
| ;; |
| MSYS*) |
| host=windows |
| wenv=msys |
| ;; |
| *) |
| # Assume linux as a fallback |
| |
| host=linux |
| ;; |
| esac |
| fi |
| |
| # Detect Host CPU type. |
| # At least MacOS and Linux can have x86_64 and arm based hosts. |
| |
| if [ -z "$cpu" ]; then |
| case $(uname -m) in |
| arm64) |
| cpu=arm64 |
| ;; |
| aarch64) |
| cpu=arm64 |
| ;; |
| *) |
| # Assume x86_64 as default |
| cpu=x86_64 |
| ;; |
| esac |
| fi |
| |
| WD=`test -d ${0%/*} && cd ${0%/*}; pwd` |
| cd $WD |
| |
| if [ -x sethost.sh ]; then |
| cd .. |
| fi |
| |
| if [ -x tools/sethost.sh ]; then |
| nuttx=$PWD |
| else |
| echo "This script must be executed in nuttx/ or nuttx/tools directories" |
| exit 1 |
| fi |
| |
| if [ ! -r $nuttx/.config ]; then |
| echo "There is no .config at $nuttx" |
| exit 1 |
| fi |
| |
| if [ ! -r $nuttx/Make.defs ]; then |
| echo "ERROR: No readable Make.defs file exists at $nuttx" |
| exit 1 |
| fi |
| |
| # Modify the configuration |
| |
| if [ "X$host" == "Xlinux" -o "X$host" == "Xmacos" -o "X$host" == "Xbsd" ]; then |
| |
| # Disable Windows (to suppress warnings from Window Environment selections) |
| |
| kconfig-tweak --file $nuttx/.config --disable CONFIG_HOST_WINDOWS |
| |
| # Enable Linux or macOS or BSD |
| |
| if [ "X$host" == "Xlinux" ]; then |
| echo " Select CONFIG_HOST_LINUX=y" |
| kconfig-tweak --file $nuttx/.config --disable CONFIG_HOST_MACOS |
| kconfig-tweak --file $nuttx/.config --disable CONFIG_HOST_BSD |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_HOST_LINUX |
| |
| if [ "X$cpu" == "Xarm64" ]; then |
| echo " Select CONFIG_HOST_ARM64=y" |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_HOST_ARM64 |
| fi |
| |
| elif [ "X$host" == "Xbsd" ]; then |
| echo " Select CONFIG_HOST_BSD=y" |
| kconfig-tweak --file $nuttx/.config --disable CONFIG_HOST_MACOS |
| kconfig-tweak --file $nuttx/.config --disable CONFIG_HOST_LINUX |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_HOST_BSD |
| |
| else |
| echo " Select CONFIG_HOST_MACOS=y" |
| kconfig-tweak --file $nuttx/.config --disable CONFIG_HOST_LINUX |
| kconfig-tweak --file $nuttx/.config --disable CONFIG_HOST_BSD |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_HOST_MACOS |
| |
| if [ "X$cpu" == "Xarm64" ]; then |
| echo " Select CONFIG_HOST_ARM64=y" |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_HOST_ARM64 |
| fi |
| fi |
| |
| # Enable the System V ABI |
| |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_SIM_X8664_SYSTEMV |
| else |
| echo " Select CONFIG_HOST_WINDOWS=y" |
| |
| kconfig-tweak --file $nuttx/.config --disable CONFIG_HOST_LINUX |
| kconfig-tweak --file $nuttx/.config --disable CONFIG_HOST_MACOS |
| kconfig-tweak --file $nuttx/.config --disable CONFIG_HOST_BSD |
| |
| # Enable Windows and the Microsoft ABI |
| |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_HOST_WINDOWS |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_SIM_X8664_MICROSOFT |
| |
| # Enable Windows environment |
| |
| if [ "X$wenv" == "Xcygwin" ]; then |
| echo " Select CONFIG_WINDOWS_CYGWIN=y" |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_WINDOWS_CYGWIN |
| else |
| if [ "X$wenv" == "Xmsys" ]; then |
| echo " Select CONFIG_WINDOWS_MSYS=y" |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_WINDOWS_MSYS |
| else |
| echo " Select CONFIG_WINDOWS_NATIVE=y" |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_EXPERIMENTAL |
| kconfig-tweak --file $nuttx/.config --enable CONFIG_WINDOWS_NATIVE |
| fi |
| fi |
| fi |
| |
| echo " Refreshing..." |
| |
| ${MAKECMD} olddefconfig $* || { echo "ERROR: failed to refresh"; exit 1; } |