1*0a6a1f1dSLionel Sambuc /* $NetBSD: features.c,v 1.1 2014/02/27 09:37:02 matt Exp $ */ 2*0a6a1f1dSLionel Sambuc /*- 3*0a6a1f1dSLionel Sambuc * Copyright (c) 2014 The NetBSD Foundation, Inc. 4*0a6a1f1dSLionel Sambuc * All rights reserved. 5*0a6a1f1dSLionel Sambuc * 6*0a6a1f1dSLionel Sambuc * This code is derived from software contributed to The NetBSD Foundation 7*0a6a1f1dSLionel Sambuc * by Matt Thomas of 3am Software Foundry. 8*0a6a1f1dSLionel Sambuc * 9*0a6a1f1dSLionel Sambuc * Redistribution and use in source and binary forms, with or without 10*0a6a1f1dSLionel Sambuc * modification, are permitted provided that the following conditions 11*0a6a1f1dSLionel Sambuc * are met: 12*0a6a1f1dSLionel Sambuc * 1. Redistributions of source code must retain the above copyright 13*0a6a1f1dSLionel Sambuc * notice, this list of conditions and the following disclaimer. 14*0a6a1f1dSLionel Sambuc * 2. Redistributions in binary form must reproduce the above copyright 15*0a6a1f1dSLionel Sambuc * notice, this list of conditions and the following disclaimer in the 16*0a6a1f1dSLionel Sambuc * documentation and/or other materials provided with the distribution. 17*0a6a1f1dSLionel Sambuc * 18*0a6a1f1dSLionel Sambuc * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 19*0a6a1f1dSLionel Sambuc * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20*0a6a1f1dSLionel Sambuc * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21*0a6a1f1dSLionel Sambuc * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22*0a6a1f1dSLionel Sambuc * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23*0a6a1f1dSLionel Sambuc * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24*0a6a1f1dSLionel Sambuc * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25*0a6a1f1dSLionel Sambuc * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26*0a6a1f1dSLionel Sambuc * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27*0a6a1f1dSLionel Sambuc * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28*0a6a1f1dSLionel Sambuc * POSSIBILITY OF SUCH DAMAGE. 29*0a6a1f1dSLionel Sambuc */ 30*0a6a1f1dSLionel Sambuc 31*0a6a1f1dSLionel Sambuc /* 32*0a6a1f1dSLionel Sambuc * This file is used to have the compiler check for feature and then 33*0a6a1f1dSLionel Sambuc * have make set a variable based on that test. 34*0a6a1f1dSLionel Sambuc * 35*0a6a1f1dSLionel Sambuc * FEAT_EABI!=if ${COMPILE.c} -fsyntax-only -DEABI_TEST ${TESTFILE} >/dev/null 2>/dev/null; then echo yes; else echo no; fi 36*0a6a1f1dSLionel Sambuc * FEAT_LDREX!=if ${COMPILE.c} -fsyntax-only -DLDREX_TEST ${TESTFILE} >/dev/null 2>/dev/null; then echo yes; else echo no; fi 37*0a6a1f1dSLionel Sambuc * FEAT_LDRD!=if ${COMPILE.c} -fsyntax-only -DLDRD_TEST ${TESTFILE} >/dev/null 2>/dev/null; then echo yes; else echo no; fi 38*0a6a1f1dSLionel Sambuc * FEAT_THUMB2!=if ${COMPILE.c} -fsyntax-only -DTHUMB2_TEST ${TESTFILE} >/dev/null 2>/dev/null; then echo yes; else echo no; fi 39*0a6a1f1dSLionel Sambuc */ 40*0a6a1f1dSLionel Sambuc 41*0a6a1f1dSLionel Sambuc #if defined (__ARM_ARCH_8A__) || defined (__ARM_ARCH_7__) || \ 42*0a6a1f1dSLionel Sambuc defined (__ARM_ARCH_7A__) || defined (__ARM_ARCH_7R__) || \ 43*0a6a1f1dSLionel Sambuc defined (__ARM_ARCH_7M__) || defined (__ARM_ARCH_7EM__) || \ 44*0a6a1f1dSLionel Sambuc defined (__ARM_ARCH_6T2__) 45*0a6a1f1dSLionel Sambuc #define HAVE_THUMB2 46*0a6a1f1dSLionel Sambuc #endif 47*0a6a1f1dSLionel Sambuc 48*0a6a1f1dSLionel Sambuc #if defined (HAVE_THUMB2) || defined (__ARM_ARCH_6__) || \ 49*0a6a1f1dSLionel Sambuc defined (__ARM_ARCH_6J__) || defined (__ARM_ARCH_6K__) || \ 50*0a6a1f1dSLionel Sambuc defined (__ARM_ARCH_6Z__) || defined (__ARM_ARCH_6ZK__) || \ 51*0a6a1f1dSLionel Sambuc defined (__ARM_ARCH_6ZM__) 52*0a6a1f1dSLionel Sambuc #define HAVE_LDREX 53*0a6a1f1dSLionel Sambuc #endif 54*0a6a1f1dSLionel Sambuc 55*0a6a1f1dSLionel Sambuc #if defined (HAVE_LDREX) || defined(__ARM_ARCH_5TE__) || \ 56*0a6a1f1dSLionel Sambuc defined (__ARM_ARCH_5TEJ__) 57*0a6a1f1dSLionel Sambuc #define HAVE_LDRD 58*0a6a1f1dSLionel Sambuc #endif 59*0a6a1f1dSLionel Sambuc 60*0a6a1f1dSLionel Sambuc #if defined(THUMB2_TEST) && !defined(HAVE_THUMB2) 61*0a6a1f1dSLionel Sambuc #error no thumb2 62*0a6a1f1dSLionel Sambuc #endif 63*0a6a1f1dSLionel Sambuc 64*0a6a1f1dSLionel Sambuc #if defined(LDREX_TEST) && !defined(HAVE_LDREX) 65*0a6a1f1dSLionel Sambuc #error no ldrex 66*0a6a1f1dSLionel Sambuc #endif 67*0a6a1f1dSLionel Sambuc 68*0a6a1f1dSLionel Sambuc #if defined(LDRD_TEST) && !defined(HAVE_LDRD) 69*0a6a1f1dSLionel Sambuc #error no ldrd 70*0a6a1f1dSLionel Sambuc #endif 71*0a6a1f1dSLionel Sambuc 72*0a6a1f1dSLionel Sambuc #if defined(EABI_TEST) && !defined(__ARM_EABI__) 73*0a6a1f1dSLionel Sambuc #error not eabi 74*0a6a1f1dSLionel Sambuc #endif 75