X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Tools%2Fudibuild%2Fsrc%2Fbuild.c;h=4d0b294781cc59d55c67a65ba378538caee23ba9;hb=0dea0609daa090182b07dd2565567b53e59c507e;hp=2ccd2b2aa6b088a110a1ba3719a5a181f5aff64d;hpb=4c6e540b4b8a74b11e805a3e44ae7f7ebfba85e3;p=tpg%2Facess2.git diff --git a/Tools/udibuild/src/build.c b/Tools/udibuild/src/build.c index 2ccd2b2a..4d0b2947 100644 --- a/Tools/udibuild/src/build.c +++ b/Tools/udibuild/src/build.c @@ -9,11 +9,13 @@ #include #include #include // mkdir +#include // unlink #include "include/build.h" #include "include/common.h" // === PROTOTYPES === char *get_objfile(tIniFile *opts, const char *abi, const char *srcfile); +char *get_udipropsfile(tIniFile *opts, const char *abi); // === CODE === int Build_CompileFile(tIniFile *opts, const char *abi, tUdiprops *udiprops, tUdiprops_Srcfile *srcfile) @@ -45,6 +47,32 @@ int Build_CompileFile(tIniFile *opts, const char *abi, tUdiprops *udiprops, tUdi return rv; } +int Build_CreateUdiprops(tIniFile *opts, const char *abi, tUdiprops *udiprops) +{ + const char *cc_prog = IniFile_Get(opts, abi, "CC", NULL); + + char *filename = get_udipropsfile(opts, abi); + FILE *fp = fopen(filename, "w"); + fprintf(fp, "char udiprops[] __attribute__((section(\".udiprops\"))) = \n"); + for( int i = 0; i < udiprops->nLines; i ++ ) { + // TODO: Escape " in string + fprintf(fp, " \"%s\"\n", udiprops->Lines[i]); + } + fprintf(fp, " ;\n"); + fclose(fp); + + char *cmd = mkstr("%s %s -c %s -o %s.o", + cc_prog, IniFile_Get(opts, abi, "CFLAGS", ""), + filename, filename); + + int rv = system(cmd); + free(cmd); + unlink(filename); + free(filename); + + return rv; +} + int Build_LinkObjects(tIniFile *opts, const char *abi, tUdiprops *udiprops) { const char *linker = IniFile_Get(opts, abi, "LD", NULL); @@ -76,12 +104,16 @@ int Build_LinkObjects(tIniFile *opts, const char *abi, tUdiprops *udiprops) mkdir(abidir, 0755); free(abidir); - char *cmd = mkstr("%s %s -o bin/%s/%s -r %s", + char *udiprops_c = get_udipropsfile(opts, abi); + char *cmd = mkstr("%s -r %s -o bin/%s/%s -s %s",// %s.o", linker, IniFile_Get(opts, abi, "LDFLAGS", ""), - abi, udiprops->ModuleName, objfiles_str); + abi, udiprops->ModuleName, objfiles_str, udiprops_c + ); printf("--- Linking: bin/%s/%s\n", abi, udiprops->ModuleName); + printf("%s\n", cmd); int rv = system(cmd); free(cmd); + free(udiprops_c); free(objfiles_str); return rv; @@ -92,3 +124,8 @@ char *get_objfile(tIniFile *opts, const char *abi, const char *srcfile) return mkstr("%s.o", srcfile); } +char *get_udipropsfile(tIniFile *opts, const char *abi) +{ + return mkstr(".udiprops.c"); +} +