hosted.c (4646B)
1 #include "os/hosted_internal.h" 2 3 static int hosted_resolve_windows_mingw(const KitOsHostedRequest* req, 4 const KitOsHostedDirs* dirs, 5 KitOsHostedPlan* plan) { 6 if (dirs->nlibdirs == 0) { 7 kit_os_hosted_errf(req->host, req->host_user, req->tool, 8 "Windows hosted profile requires --sysroot or " 9 "KIT_SYSROOT"); 10 return 1; 11 } 12 plan->profile_name = "windows-mingw-ucrt"; 13 if (kit_os_hosted_add_incdirs(plan, req->host, req->host_user, dirs) != 0) { 14 kit_os_hosted_errf(req->host, req->host_user, req->tool, "out of memory"); 15 return 1; 16 } 17 if (!req->link_inputs) return 0; 18 if (kit_os_hosted_add_required_search( 19 plan->before, &plan->nbefore, KIT_OS_HOSTED_MAX_BEFORE, req, dirs, 20 "crt2.o", KIT_OS_HOSTED_INPUT_OBJECT) != 0 || 21 kit_os_hosted_add_required_search( 22 plan->before, &plan->nbefore, KIT_OS_HOSTED_MAX_BEFORE, req, dirs, 23 "crtbegin.o", KIT_OS_HOSTED_INPUT_OBJECT) != 0) 24 return 1; 25 if (kit_os_hosted_add_required_search( 26 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 27 "libmingw32.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 28 kit_os_hosted_add_required_search( 29 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 30 "libmoldname.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 31 kit_os_hosted_add_required_search( 32 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 33 "libmingwex.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 34 kit_os_hosted_add_required_search( 35 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 36 "libwinpthread.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 37 kit_os_hosted_add_required_search( 38 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 39 "libucrt.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 40 kit_os_hosted_add_required_search( 41 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 42 "libadvapi32.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 43 kit_os_hosted_add_required_search( 44 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 45 "libshell32.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 46 kit_os_hosted_add_required_search( 47 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 48 "libuser32.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 49 kit_os_hosted_add_required_search( 50 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 51 "libkernel32.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 52 kit_os_hosted_add_required_search( 53 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 54 "libmingw32.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 55 kit_os_hosted_add_required_search( 56 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 57 "libmoldname.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 58 kit_os_hosted_add_required_search( 59 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 60 "libmingwex.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 61 kit_os_hosted_add_required_search( 62 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 63 "libwinpthread.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 64 kit_os_hosted_add_required_search( 65 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 66 "libucrt.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0 || 67 kit_os_hosted_add_required_search( 68 plan->after, &plan->nafter, KIT_OS_HOSTED_MAX_AFTER, req, dirs, 69 "libkernel32.a", KIT_OS_HOSTED_INPUT_ARCHIVE) != 0) 70 return 1; 71 if (kit_os_hosted_add_required_search( 72 plan->final, &plan->nfinal, KIT_OS_HOSTED_MAX_FINAL, req, dirs, 73 "crtend.o", KIT_OS_HOSTED_INPUT_OBJECT) != 0) 74 return 1; 75 return 0; 76 } 77 78 static int hosted_sysroot_layout_windows(KitOsHostedDirs* dirs, 79 KitTargetSpec target, 80 const char* sysroot) { 81 (void)target; 82 if (kit_os_hosted_dirs_add_inc_join(dirs, sysroot, "include") != 0 || 83 kit_os_hosted_dirs_add_lib_join(dirs, sysroot, "lib") != 0 || 84 kit_os_hosted_dirs_add_lib_join(dirs, sysroot, "lib/windows") != 0) 85 return 1; 86 return 0; 87 } 88 89 const KitOsHostedOps kit_os_windows_hosted_ops = { 90 .obj = KIT_OBJ_COFF, 91 .default_profile = 1, 92 .needs_sysroot_libdir = 1, 93 .resolve = hosted_resolve_windows_mingw, 94 .sysroot_layout = hosted_sysroot_layout_windows, 95 };