+ const char *linker = IniFile_Get(opts, abi, "LD", NULL);
+ if( !linker ) {
+ fprintf(stderr, "No 'LD' defined for ABI %s\n", abi);
+ return -1;
+ }
+
+ char *objfiles[udiprops->nSourceFiles];
+ size_t objfiles_len = 0;
+ for( int i = 0; i < udiprops->nSourceFiles; i ++ ) {
+ objfiles[i] = get_objfile(opts, abi, udiprops->SourceFiles[i]->Filename);
+ objfiles_len += strlen(objfiles[i])+1;
+ }
+
+ // Create command string
+ char *objfiles_str = malloc(objfiles_len);
+ objfiles_len = 0;
+ for( int i = 0; i < udiprops->nSourceFiles; i ++ ) {
+ strcpy(objfiles_str + objfiles_len, objfiles[i]);
+ objfiles_len += strlen(objfiles[i])+1;
+ objfiles_str[objfiles_len-1] = ' ';
+ free( objfiles[i] );
+ }
+ objfiles_str[objfiles_len-1] = '\0';
+
+ mkdir("bin", 0755);
+ char *abidir = mkstr("bin/%s", abi);
+ mkdir(abidir, 0755);
+ free(abidir);
+
+ char *cmd = mkstr("%s %s -o bin/%s/%s -r %s",
+ linker, IniFile_Get(opts, abi, "LDFLAGS", ""),
+ abi, udiprops->ModuleName, objfiles_str);
+ printf("--- Linking: bin/%s/%s\n", abi, udiprops->ModuleName);
+ int rv = system(cmd);
+ free(cmd);
+ free(objfiles_str);
+
+ return rv;