diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-03-12 11:39:11 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-03-12 11:39:11 +0100 |
| commit | df928fd2d0186550686bba1dd1f9468a0239853f (patch) | |
| tree | 3d46027c9e66d945bb97adcc22450260dddc7fff /src | |
| parent | 52c50a2fd4ad15a858540bee8d93ba129ac1d431 (diff) | |
| download | box64-df928fd2d0186550686bba1dd1f9468a0239853f.tar.gz box64-df928fd2d0186550686bba1dd1f9468a0239853f.zip | |
[RCFILE] Added 2 new rcfile only option, and try to apply wine program parameter earlier, before wien load to be able to change command line and maxcpu
Diffstat (limited to 'src')
| -rw-r--r-- | src/include/debug.h | 3 | ||||
| -rw-r--r-- | src/main.c | 52 | ||||
| -rw-r--r-- | src/tools/rcfile.c | 43 |
3 files changed, 62 insertions, 36 deletions
diff --git a/src/include/debug.h b/src/include/debug.h index 2c5746a0..a6660d7d 100644 --- a/src/include/debug.h +++ b/src/include/debug.h @@ -80,6 +80,9 @@ extern uint64_t start_cnt; #endif extern int box64_nosandbox; extern int box64_inprocessgpu; +extern int box64_cefdisablegpu; +extern int box64_cefdisablegpucompositor; +extern int box64_maxcpu_immutable; extern int box64_malloc_hack; extern int box64_dummy_crashhandler; extern int box64_sse_flushto0; diff --git a/src/main.c b/src/main.c index ccc46799..166ec94e 100644 --- a/src/main.c +++ b/src/main.c @@ -50,9 +50,12 @@ uintptr_t box64_pagesize; uintptr_t box64_load_addr = 0; int box64_nosandbox = 0; int box64_inprocessgpu = 0; +int box64_cefdisablegpu = 0; +int box64_cefdisablegpucompositor = 0; int box64_malloc_hack = 0; int box64_dynarec_test = 0; int box64_maxcpu = 0; +int box64_maxcpu_immutable = 0; #if defined(SD845) || defined(SD888) || defined(SD8G2) || defined(TEGRAX1) int box64_mmap32 = 1; #else @@ -1657,7 +1660,7 @@ int main(int argc, const char **argv, char **env) { #endif int ld_libs_args = -1; int is_custom_gstreamer = 0; - int wine_steam = 0; + const char* wine_prog = NULL; // check if this is wine if(!strcmp(prog, "wine64") || !strcmp(prog, "wine64-development") @@ -1695,23 +1698,20 @@ int main(int argc, const char **argv, char **env) { box64_custom_gstreamer = box_strdup(tmp); } } - // if program being called is wine_steam (rudimentary check...) and if no other argument are there - if(argv[nextarg+1] && argv[nextarg+1][0]!='-' /*&& argc==(nextarg+2)*/) { - if(!strcasecmp(argv[nextarg+1], "steam.exe")) - wine_steam = 1; - else if(!strcasecmp(argv[nextarg+1], "steam")) - wine_steam = 1; - if(!wine_steam) { - const char* pp = strrchr(argv[nextarg+1], '/'); - if(pp && !strcasecmp(pp+1, "steam.exe")) - wine_steam = 1; - else { - pp = strrchr(argv[nextarg+1], '\\'); - if(pp && !strcasecmp(pp+1, "steam.exe")) - wine_steam = 1; - } + // Try to get the name of the exe being run, to ApplyParams laters + if(argv[nextarg+1] && argv[nextarg+1][0]!='-' && strlen(argv[nextarg+1])>4 && !strcasecmp(argv[nextarg+1]+strlen(argv[nextarg+1]-4), ".exe")) { + const char* pp = strrchr(argv[nextarg+1], '/'); + if(pp) + wine_prog = pp+1; + else { + pp = strrchr(argv[nextarg+1], '\\'); + if(pp) + wine_prog = pp+1; + else + wine_prog = argv[nextarg+1]; } } + } else if(strstr(prog, "ld-musl-x86_64.so.1")) { // check if ld-musl-x86_64.so.1 is used printf_log(LOG_INFO, "BOX64: ld-musl detected. Trying to workaround and use system ld-linux\n"); @@ -1846,6 +1846,12 @@ int main(int argc, const char **argv, char **env) { }*/ ApplyParams("*"); // [*] is a special setting for all process ApplyParams(prgname); + if(box64_wine && wine_prog) { + ApplyParams(wine_prog); + wine_prog = NULL; + } + if(box64_wine) + box64_maxcpu_immutable = 1; // cannot change once wine is loaded for(int i=1; i<my_context->argc; ++i) { my_context->argv[i] = box_strdup(argv[i+nextarg]); @@ -1859,13 +1865,13 @@ int main(int argc, const char **argv, char **env) { { add_argv("--in-process-gpu"); } - if(wine_steam) { - printf_log(LOG_INFO, "Steam.exe detected, adding -cef-single-process -cef-in-process-gpu -cef-disable-sandbox -no-cef-sandbox -cef-disable-breakpad to parameters"); - add_argv("-cef-single-process"); - add_argv("-cef-in-process-gpu"); - add_argv("-cef-disable-sandbox"); - add_argv("-no-cef-sandbox"); - add_argv("-cef-disable-breakpad"); + if(box64_cefdisablegpu) + { + add_argv("-cef-disable-gpu"); + } + if(box64_cefdisablegpucompositor) + { + add_argv("-cef-disable-gpu-compositor"); } // check if file exist diff --git a/src/tools/rcfile.c b/src/tools/rcfile.c index 9980e07b..87cc3dd9 100644 --- a/src/tools/rcfile.c +++ b/src/tools/rcfile.c @@ -41,7 +41,6 @@ static const char default_rcfile[] = "\n" "[heroic]\n" "BOX64_NOSANDBOX=1\n" -"BOX64_INPROCESSGPU=1\n" "BOX64_MALLOC_HACK=2\n" "\n" "[LotCG.x86_64]\n" @@ -59,13 +58,6 @@ static const char default_rcfile[] = "[streaming_client]\n" "BOX64_EMULATED_LIBS=libSDL2-2.0.so.0:libSDL2_ttf-2.0.so.0\n" "\n" -"[steamwebhelper]\n" -"BOX64_NOSANDBOX=1\n" -"BOX64_INPROCESSGPU=1\n" -"BOX64_MALLOC_HACK=2\n" -"BOX64_LOG=0\n" -"BOX64_DYNAREC_BIGBLOCK=0\n" -"\n" "[steam-runtime-check-requirements]\n" "BOX64_EXIT=1\n" "\n" @@ -109,6 +101,8 @@ ENTRYSTRING_(BOX64_BASH, bash) \ ENTRYINT(BOX64_JITGDB, jit_gdb, 0, 3, 2) \ ENTRYBOOL(BOX64_NOSANDBOX, box64_nosandbox) \ ENTRYBOOL(BOX64_INPROCESSGPU, box64_inprocessgpu) \ +ENTRYBOOL(BOX64_CEFDISABLEGPU, box64_cefdisablegpu) \ +ENTRYBOOL(BOX64_CEFDISABLEGPUCOMPOSITOR, box64_cefdisablegpucompositor)\ ENTRYBOOL(BOX64_EXIT, want_exit) \ ENTRYBOOL(BOX64_LIBCEF, box64_libcef) \ ENTRYBOOL(BOX64_SDL2_JGUID, box64_sdl2_jguid) \ @@ -231,10 +225,30 @@ SUPER() #undef ENTRYDSTRING #undef ENTRYADDR #undef ENTRYULONG -// the actual fields +// the actual fields, in two steps to regroup bit fields together #define ENTRYBOOL(NAME, name) uint8_t name:1; #define CENTRYBOOL(NAME, name) uint8_t name:1; #define ENTRYINT(NAME, name, minval, maxval, bits) uint8_t name:bits; +#define ENTRYINTPOS(NAME, name) +#define ENTRYSTRING(NAME, name) +#define ENTRYSTRING_(NAME, name) +#define ENTRYDSTRING(NAME, name) +#define ENTRYADDR(NAME, name) +#define ENTRYULONG(NAME, name) +SUPER() +// done +#undef ENTRYBOOL +#undef CENTRYBOOL +#undef ENTRYINT +#undef ENTRYINTPOS +#undef ENTRYSTRING +#undef ENTRYSTRING_ +#undef ENTRYDSTRING +#undef ENTRYADDR +#undef ENTRYULONG +#define ENTRYBOOL(NAME, name) +#define CENTRYBOOL(NAME, name) +#define ENTRYINT(NAME, name, minval, maxval, bits) #define ENTRYINTPOS(NAME, name) uint32_t name; #define ENTRYSTRING(NAME, name) char* name; #define ENTRYSTRING_(NAME, name) char* name; @@ -532,10 +546,13 @@ void ApplyParams(const char* name) cycle_log = new_cycle_log; initCycleLog(my_context); } - if(new_maxcpu!=box64_maxcpu && box64_maxcpu && box64_maxcpu<new_maxcpu) { - printf_log(LOG_INFO, "Not applying BOX64_MAXCPU=%d because a lesser value is already active: %d\n", new_maxcpu, box64_maxcpu); - } else - box64_maxcpu = new_maxcpu; + if(!box64_maxcpu_immutable) { + if(new_maxcpu!=box64_maxcpu && box64_maxcpu && box64_maxcpu<new_maxcpu) { + printf_log(LOG_INFO, "Not applying BOX64_MAXCPU=%d because a lesser value is already active: %d\n", new_maxcpu, box64_maxcpu); + } else + box64_maxcpu = new_maxcpu; + } else if(new_maxcpu!=box64_maxcpu) + printf_log(LOG_INFO, "Not applying BOX64_MAXCPU=%d because it's too late\n", new_maxcpu); if(param->is_ld_library_path_present) AppendList(&my_context->box64_ld_lib, param->ld_library_path, 1); if(param->is_box64_path_present) AppendList(&my_context->box64_path, param->box64_path, 1); if(param->is_trace_file_present) { |