; Processor-independent options for VxWorks.
;
; Copyright (C) 2005-2021 Free Software Foundation, Inc.
; Contributed by CodeSourcery, LLC.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 3, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING3.  If not see
; <http://www.gnu.org/licenses/>.

Bdynamic
Driver Condition(VXWORKS_KIND == VXWORKS_KIND_NORMAL)

Bstatic
Driver Condition(VXWORKS_KIND == VXWORKS_KIND_NORMAL)

Xbind-lazy
Driver Condition(VXWORKS_KIND == VXWORKS_KIND_NORMAL)

Xbind-now
Driver Condition(VXWORKS_KIND == VXWORKS_KIND_NORMAL)

mrtp
Target RejectNegative Mask(VXWORKS_RTP) Condition(VXWORKS_KIND == VXWORKS_KIND_NORMAL)
Assume the VxWorks RTP environment.

; VxWorks AE has two modes: kernel mode and vThreads mode.  In
; general, back ends do not actually need to know which mode they're
; in, so we do not have to set any flags.
mvthreads
Target RejectNegative Condition(VXWORKS_KIND == VXWORKS_KIND_AE)
Assume the VxWorks vThreads environment.

non-static
Driver Condition(VXWORKS_KIND == VXWORKS_KIND_NORMAL)
