Skip to content

Commit

Permalink
optimized
Browse files Browse the repository at this point in the history
  • Loading branch information
leleliu008 committed Jun 6, 2024
1 parent b8af125 commit b894829
Show file tree
Hide file tree
Showing 3 changed files with 282 additions and 48 deletions.
110 changes: 94 additions & 16 deletions wrapper-native-c++.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,115 @@
#include <unistd.h>

int main(int argc, char * argv[]) {
char * const cxxc = getenv("PROXIED_CXX_FOR_BUILD");
char * const compiler = getenv("XCPKG_COMPILER_CXX");

if (cxxc == NULL) {
fprintf(stderr, "PROXIED_CXX_FOR_BUILD environment variable is not set.\n");
if (compiler == NULL) {
fprintf(stderr, "XCPKG_COMPILER_CXX environment variable is not set.\n");
return 1;
}

if (cxxc[0] == '\0') {
fprintf(stderr, "PROXIED_CXX_FOR_BUILD environment variable value should be a non-empty string.\n");
if (compiler[0] == '\0') {
fprintf(stderr, "XCPKG_COMPILER_CXX environment variable value should be a non-empty string.\n");
return 2;
}

char* argv2[argc + 2];
/////////////////////////////////////////////////////////////////

argv2[0] = cxxc;
char * const baseArgs = getenv("XCPKG_COMPILER_ARGS_FOR_BUILD");

if (baseArgs == NULL) {
fprintf(stderr, "XCPKG_COMPILER_ARGS_FOR_BUILD environment variable is not set.\n");
return 5;
}

if (baseArgs[0] == '\0') {
fprintf(stderr, "XCPKG_COMPILER_ARGS_FOR_BUILD environment variable value should be a non-empty string.\n");
return 6;
}

/////////////////////////////////////////////////////////////////

size_t baseArgc = 1U;

for (size_t i = 0U; ; i++) {
if (baseArgs[i] == '\0') {
break;
}

if (baseArgs[i] == ' ') {
baseArgc++;
}
}

/////////////////////////////////////////////////////////////////

int createSharedLibrary = 0;

for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-dynamiclib") == 0 || strcmp(argv[i], "-shared") == 0) {
createSharedLibrary = 1;
break;
}
}

/////////////////////////////////////////////////////////////////

char* argv2[argc + baseArgc + 2];

argv2[0] = compiler;

for (int i = 1; i < argc; i++) {
argv2[i] = argv[i];
}

char * const sysroot = getenv("SYSROOT_FOR_BUILD");
/////////////////////////////////////////////////////////////////

char * p = baseArgs;

for (size_t i = 0U; ; i++) {
if (baseArgs[i] == '\0') {
if (p[0] != '\0') {
argv2[argc++] = p;
}
break;
}

if (sysroot == NULL || sysroot[0] == '\0') {
argv2[argc] = NULL;
} else {
argv2[argc] = (char*)"-isysroot";
argv2[argc + 1] = sysroot;
argv2[argc + 2] = NULL;
if (baseArgs[i] == ' ') {
baseArgs[i] = '\0';

if (p[0] != '\0') {
argv2[argc++] = p;
}

p = &baseArgs[i + 1];
}
}

execv (cxxc, argv2);
perror(cxxc);
/////////////////////////////////////////////////////////////////

if (createSharedLibrary == 1) {
argv2[argc++] = (char*)"-fPIC";
}

argv2[argc++] = NULL;

/////////////////////////////////////////////////////////////////

const char * verbose = getenv("XCPKG_VERBOSE");

if (verbose != NULL && strcmp(verbose, "1") == 0) {
for (int i = 0; ;i++) {
if (argv2[i] == NULL) {
break;
} else {
fprintf(stderr, "%s\n", argv2[i]);
}
}
}

/////////////////////////////////////////////////////////////////

execv (compiler, argv2);
perror(compiler);
return 255;
}
110 changes: 94 additions & 16 deletions wrapper-native-cc.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,115 @@
#include <unistd.h>

int main(int argc, char * argv[]) {
char * const cc = getenv("PROXIED_CC_FOR_BUILD");
char * const compiler = getenv("XCPKG_COMPILER_C");

if (cc == NULL) {
fprintf(stderr, "PROXIED_CC_FOR_BUILD environment variable is not set.\n");
if (compiler == NULL) {
fprintf(stderr, "XCPKG_COMPILER_C environment variable is not set.\n");
return 1;
}

if (cc[0] == '\0') {
fprintf(stderr, "PROXIED_CC_FOR_BUILD environment variable value should be a non-empty string.\n");
if (compiler[0] == '\0') {
fprintf(stderr, "XCPKG_COMPILER_C environment variable value should be a non-empty string.\n");
return 2;
}

char* argv2[argc + 2];
/////////////////////////////////////////////////////////////////

argv2[0] = cc;
char * const baseArgs = getenv("XCPKG_COMPILER_ARGS_FOR_BUILD");

if (baseArgs == NULL) {
fprintf(stderr, "XCPKG_COMPILER_ARGS_FOR_BUILD environment variable is not set.\n");
return 5;
}

if (baseArgs[0] == '\0') {
fprintf(stderr, "XCPKG_COMPILER_ARGS_FOR_BUILD environment variable value should be a non-empty string.\n");
return 6;
}

/////////////////////////////////////////////////////////////////

size_t baseArgc = 1U;

for (size_t i = 0U; ; i++) {
if (baseArgs[i] == '\0') {
break;
}

if (baseArgs[i] == ' ') {
baseArgc++;
}
}

/////////////////////////////////////////////////////////////////

int createSharedLibrary = 0;

for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-dynamiclib") == 0 || strcmp(argv[i], "-shared") == 0) {
createSharedLibrary = 1;
break;
}
}

/////////////////////////////////////////////////////////////////

char* argv2[argc + baseArgc + 2];

argv2[0] = compiler;

for (int i = 1; i < argc; i++) {
argv2[i] = argv[i];
}

char * const sysroot = getenv("SYSROOT_FOR_BUILD");
/////////////////////////////////////////////////////////////////

char * p = baseArgs;

for (size_t i = 0U; ; i++) {
if (baseArgs[i] == '\0') {
if (p[0] != '\0') {
argv2[argc++] = p;
}
break;
}

if (sysroot == NULL || sysroot[0] == '\0') {
argv2[argc] = NULL;
} else {
argv2[argc] = (char*)"-isysroot";
argv2[argc + 1] = sysroot;
argv2[argc + 2] = NULL;
if (baseArgs[i] == ' ') {
baseArgs[i] = '\0';

if (p[0] != '\0') {
argv2[argc++] = p;
}

p = &baseArgs[i + 1];
}
}

execv (cc, argv2);
perror(cc);
/////////////////////////////////////////////////////////////////

if (createSharedLibrary == 1) {
argv2[argc++] = (char*)"-fPIC";
}

argv2[argc++] = NULL;

/////////////////////////////////////////////////////////////////

const char * verbose = getenv("XCPKG_VERBOSE");

if (verbose != NULL && strcmp(verbose, "1") == 0) {
for (int i = 0; ;i++) {
if (argv2[i] == NULL) {
break;
} else {
fprintf(stderr, "%s\n", argv2[i]);
}
}
}

/////////////////////////////////////////////////////////////////

execv (compiler, argv2);
perror(compiler);
return 255;
}
110 changes: 94 additions & 16 deletions wrapper-native-objc.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,115 @@
#include <unistd.h>

int main(int argc, char * argv[]) {
char * const objc = getenv("PROXIED_OBJC_FOR_BUILD");
char * const compiler = getenv("XCPKG_COMPILER_OBJC");

if (objc == NULL) {
fprintf(stderr, "PROXIED_OBJC_FOR_BUILD environment variable is not set.\n");
if (compiler == NULL) {
fprintf(stderr, "XCPKG_COMPILER_OBJC environment variable is not set.\n");
return 1;
}

if (objc[0] == '\0') {
fprintf(stderr, "PROXIED_OBJC_FOR_BUILD environment variable value should be a non-empty string.\n");
if (compiler[0] == '\0') {
fprintf(stderr, "XCPKG_COMPILER_OBJC environment variable value should be a non-empty string.\n");
return 2;
}

char* argv2[argc + 2];
/////////////////////////////////////////////////////////////////

argv2[0] = objc;
char * const baseArgs = getenv("XCPKG_COMPILER_ARGS_FOR_BUILD");

if (baseArgs == NULL) {
fprintf(stderr, "XCPKG_COMPILER_ARGS_FOR_BUILD environment variable is not set.\n");
return 5;
}

if (baseArgs[0] == '\0') {
fprintf(stderr, "XCPKG_COMPILER_ARGS_FOR_BUILD environment variable value should be a non-empty string.\n");
return 6;
}

/////////////////////////////////////////////////////////////////

size_t baseArgc = 1U;

for (size_t i = 0U; ; i++) {
if (baseArgs[i] == '\0') {
break;
}

if (baseArgs[i] == ' ') {
baseArgc++;
}
}

/////////////////////////////////////////////////////////////////

int createSharedLibrary = 0;

for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-dynamiclib") == 0 || strcmp(argv[i], "-shared") == 0) {
createSharedLibrary = 1;
break;
}
}

/////////////////////////////////////////////////////////////////

char* argv2[argc + baseArgc + 2];

argv2[0] = compiler;

for (int i = 1; i < argc; i++) {
argv2[i] = argv[i];
}

char * const sysroot = getenv("SYSROOT_FOR_BUILD");
/////////////////////////////////////////////////////////////////

char * p = baseArgs;

for (size_t i = 0U; ; i++) {
if (baseArgs[i] == '\0') {
if (p[0] != '\0') {
argv2[argc++] = p;
}
break;
}

if (sysroot == NULL || sysroot[0] == '\0') {
argv2[argc] = NULL;
} else {
argv2[argc] = (char*)"-isysroot";
argv2[argc + 1] = sysroot;
argv2[argc + 2] = NULL;
if (baseArgs[i] == ' ') {
baseArgs[i] = '\0';

if (p[0] != '\0') {
argv2[argc++] = p;
}

p = &baseArgs[i + 1];
}
}

execv (objc, argv2);
perror(objc);
/////////////////////////////////////////////////////////////////

if (createSharedLibrary == 1) {
argv2[argc++] = (char*)"-fPIC";
}

argv2[argc++] = NULL;

/////////////////////////////////////////////////////////////////

const char * verbose = getenv("XCPKG_VERBOSE");

if (verbose != NULL && strcmp(verbose, "1") == 0) {
for (int i = 0; ;i++) {
if (argv2[i] == NULL) {
break;
} else {
fprintf(stderr, "%s\n", argv2[i]);
}
}
}

/////////////////////////////////////////////////////////////////

execv (compiler, argv2);
perror(compiler);
return 255;
}

0 comments on commit b894829

Please sign in to comment.