blob: fc2c1f27d453d0a9297dba82ae95e8e44310a54f [file] [log] [blame]
/* Common hooks for Texas Instruments MSP430.
Copyright (C) 2014 Free Software Foundation, Inc.
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/>. */
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "diagnostic-core.h"
#include "tm.h"
#include "common/common-target.h"
#include "common/common-target-def.h"
#include "opts.h"
#include "flags.h"
/* Handle -mcpu= and -mmcu= here. We want to ensure that only one
of these two options - the last specified on the command line -
is passed on to the msp430 backend. */
static bool
msp430_handle_option (struct gcc_options *opts ATTRIBUTE_UNUSED,
struct gcc_options *opts_set ATTRIBUTE_UNUSED,
const struct cl_decoded_option *decoded,
location_t loc ATTRIBUTE_UNUSED)
{
switch (decoded->opt_index)
{
case OPT_mcpu_:
if (strcasecmp (decoded->arg, "msp430x") == 0
|| strcasecmp (decoded->arg, "msp430xv2") == 0
|| strcasecmp (decoded->arg, "430x") == 0
|| strcasecmp (decoded->arg, "430xv2") == 0)
{
target_cpu = "msp430x";
target_mcu = NULL;
}
else if (strcasecmp (decoded->arg, "msp430") == 0
|| strcasecmp (decoded->arg, "430") == 0)
{
target_cpu = "msp430";
target_mcu = NULL;
}
else
{
error ("unrecognised argument of -mcpu: %s", decoded->arg);
return false;
}
break;
case OPT_mmcu_:
/* For backwards compatibility we recognise two generic MCU
430X names. However we want to be able to generate special C
preprocessor defines for them, which is why we set target_mcu
to NULL. */
if (strcasecmp (decoded->arg, "msp430") == 0)
{
target_cpu = "msp430";
target_mcu = NULL;
}
else if (strcasecmp (decoded->arg, "msp430x") == 0
|| strcasecmp (decoded->arg, "msp430xv2") == 0)
{
target_cpu = "msp430x";
target_mcu = NULL;
}
else
target_cpu = NULL;
break;
}
return true;
}
#undef TARGET_HANDLE_OPTION
#define TARGET_HANDLE_OPTION msp430_handle_option
struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;