X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fpic%2Fmain.c;h=976a2e4794e183548d0b3592a050b3dd7f535b68;hb=52eb93f73f643bc7175d8f6ea06ec78b1026f001;hp=d2244b3c29529e836c9df151946a37cfe5bfb097;hpb=df600563e3005614c5ab09aab6ba39218bbd3191;p=fw%2Fsdcc diff --git a/src/pic/main.c b/src/pic/main.c index d2244b3c..976a2e47 100644 --- a/src/pic/main.c +++ b/src/pic/main.c @@ -9,6 +9,8 @@ #include "ralloc.h" #include "device.h" #include "SDCCutil.h" +#include "SDCCmacro.h" +#include "MySystem.h" #include "glue.h" //#include "gen.h" @@ -47,6 +49,15 @@ static char *_pic14_keywords[] = NULL }; +pic14_options_t pic14_options; + +extern int debug_verbose; /* from pcode.c */ +static OPTION _pic14_poptions[] = { + { 0 , "--debug-xtra", &debug_verbose, "show more debug info in assembly output" }, + { 0 , "--no-pcode-opt", &pic14_options.disable_df, "disable (slightly faulty) optimization on pCode" }, + { 0 , NULL, NULL, NULL } +}; + void pCodeInitRegisters(void); void pic14_assignRegisters (ebbIndex *); @@ -62,6 +73,7 @@ _pic14_init (void) { asm_addTree (&asm_asxxxx_mapping); pCodeInitRegisters(); + memset (&pic14_options, 0, sizeof (pic14_options)); } static void @@ -171,7 +183,7 @@ _pic14_parseOptions (int *pargc, char **argv, int *i) } return 1; } - + return FALSE; } @@ -307,7 +319,7 @@ sym_link *test = NULL; value *val; */ - fprintf(stderr,"checking for native mult\n"); + //fprintf(stderr,"checking for native mult\n"); if ( ic->op != '*') { @@ -394,6 +406,68 @@ static const char *_asmCmd[] = }; +extern set *libFilesSet; +extern set *libDirsSet; +extern set *libPathsSet; +extern set *includeDirsSet; +extern set *userIncDirsSet; +extern set *dataDirsSetSet; +extern set *relFilesSet; +extern set *linkOptionsSet; + +static void _pic14_do_link () +{ + hTab *linkValues=NULL; + char lfrm[256]; + char *lcmd; + char temp[128]; + set *tSet=NULL; + int ret; + + /* + * link command format: + * {linker} {incdirs} {lflags} -o {outfile} {spec_ofiles} {ofiles} {libs} + * + */ + + sprintf(lfrm, "{linker} {incdirs} {sysincdirs} {lflags} -o {outfile} {user_ofile} {spec_ofiles} {ofiles} {libs}"); + + shash_add(&linkValues, "linker", "gplink"); + + /* LIBRARY SEARCH DIRS */ + mergeSets(&tSet, libPathsSet); + mergeSets(&tSet, libDirsSet); + shash_add(&linkValues, "incdirs", joinStrSet(appendStrSet(tSet, "-I\"", "\""))); + + SNPRINTF (&temp[0], 128, "%cpic\"", DIR_SEPARATOR_CHAR); + joinStrSet(appendStrSet(libDirsSet, "-I\"", &temp[0])); + shash_add(&linkValues, "sysincdirs", joinStrSet(appendStrSet(libDirsSet, "-I\"", &temp[0]))); + + shash_add(&linkValues, "lflags", joinStrSet(linkOptionsSet)); + + shash_add(&linkValues, "outfile", dstFileName); + + if(fullSrcFileName) { + sprintf(temp, "%s.o", dstFileName); + shash_add(&linkValues, "user_ofile", temp); + } + + shash_add(&linkValues, "ofiles", joinStrSet(relFilesSet)); + + /* LIBRARIES */ + addSet(&libFilesSet, "libsdcc.lib"); + shash_add(&linkValues, "libs", joinStrSet(libFilesSet)); + + lcmd = msprintf(linkValues, lfrm); + + ret = my_system( lcmd ); + + Safe_free( lcmd ); + + if(ret) + exit(1); +} + /* Globals */ PORT pic_port = { @@ -421,7 +495,7 @@ PORT pic_port = { _linkCmd, NULL, - NULL, + _pic14_do_link, /* own do link function */ ".o", 0 }, @@ -430,7 +504,7 @@ PORT pic_port = }, { /* Sizes: char, short, int, long, ptr, fptr, gptr, bit, float, max */ - 1, 2, 2, 4, 2, 2, 2, 1, 4, 4 + 1, 2, 2, 4, 2, 2, 3, 1, 4, 4 /* TSD - I changed the size of gptr from 3 to 1. However, it should be 2 so that we can accomodate the PIC's with 4 register banks (like the 16f877) @@ -481,7 +555,7 @@ PORT pic_port = "_", _pic14_init, _pic14_parseOptions, - NULL, + _pic14_poptions, NULL, _pic14_finaliseOptions, _pic14_setDefaultOptions,