From 07403fe796f6040754d01190c3390eb63fd83ef2 Mon Sep 17 00:00:00 2001 From: YunataSavior <58997725+YunataSavior@users.noreply.github.com> Date: Mon, 14 Jul 2025 08:59:19 -0700 Subject: [PATCH] Pragma hack to de-inline the daNpcF_c ctors (#2523) * A means of de-inlining the daNpcT_c ctors * Refactor daNpcF_c hack into variable, and add for more attempted NPC Fs * Address Taka's comment and add npc_wrestler to hack --- configure.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/configure.py b/configure.py index 1dde066427d..87d5acdc346 100755 --- a/configure.py +++ b/configure.py @@ -412,6 +412,11 @@ def MatchingFor(*versions) -> bool: return config.version in versions +# For whatever reason, daNpcF_c::daNpcF_c gets inlined. +# Using the following prevents that from happening: +# TODO: This is just a temporary hack and should be looked into more extensively in the future +DANPCF_C_HACK = '-pragma "inline_max_size(494)"' + config.warn_missing_config = True config.warn_missing_source = False config.libs = [ @@ -1756,8 +1761,8 @@ config.libs = [ ActorRel(Equivalent, "d_a_myna"), # weak function order ActorRel(NonMatching, "d_a_ni"), ActorRel(NonMatching, "d_a_npc_aru"), - ActorRel(NonMatching, "d_a_npc_ash"), - ActorRel(NonMatching, "d_a_npc_ashB"), + ActorRel(NonMatching, "d_a_npc_ash", extra_cflags=[DANPCF_C_HACK]), + ActorRel(NonMatching, "d_a_npc_ashB", extra_cflags=[DANPCF_C_HACK]), ActorRel(NonMatching, "d_a_npc_bans"), ActorRel(NonMatching, "d_a_npc_blue_ns"), ActorRel(Equivalent, "d_a_npc_bou"), @@ -1791,7 +1796,7 @@ config.libs = [ ActorRel(Equivalent, "d_a_npc_hanjo"), ActorRel(MatchingFor("GZ2E01"), "d_a_npc_henna0"), ActorRel(NonMatching, "d_a_npc_hoz"), - ActorRel(NonMatching, "d_a_npc_impal"), + ActorRel(NonMatching, "d_a_npc_impal", extra_cflags=[DANPCF_C_HACK]), ActorRel(NonMatching, "d_a_npc_inko"), ActorRel(NonMatching, "d_a_npc_ins"), ActorRel(NonMatching, "d_a_npc_jagar"), @@ -1821,7 +1826,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_npc_passer2"), ActorRel(NonMatching, "d_a_npc_post"), ActorRel(NonMatching, "d_a_npc_pouya"), - ActorRel(NonMatching, "d_a_npc_prayer"), + ActorRel(Equivalent, "d_a_npc_prayer", extra_cflags=[DANPCF_C_HACK]), # weak func order ActorRel(NonMatching, "d_a_npc_raca"), ActorRel(NonMatching, "d_a_npc_rafrel"), ActorRel(NonMatching, "d_a_npc_saru"), @@ -1833,14 +1838,14 @@ config.libs = [ ActorRel(NonMatching, "d_a_npc_seirei"), ActorRel(NonMatching, "d_a_npc_shad"), ActorRel(NonMatching, "d_a_npc_shaman"), - ActorRel(NonMatching, "d_a_npc_shoe"), + ActorRel(NonMatching, "d_a_npc_shoe", extra_cflags=[DANPCF_C_HACK]), ActorRel(MatchingFor("GZ2E01"), "d_a_npc_shop0"), ActorRel(Equivalent, "d_a_npc_shop_maro"), # weak function order ActorRel(NonMatching, "d_a_npc_sola"), ActorRel(NonMatching, "d_a_npc_soldierA"), ActorRel(NonMatching, "d_a_npc_soldierB"), ActorRel(MatchingFor("GZ2E01"), "d_a_npc_sq"), - ActorRel(NonMatching, "d_a_npc_the"), + ActorRel(NonMatching, "d_a_npc_the", extra_cflags=[DANPCF_C_HACK]), ActorRel(NonMatching, "d_a_npc_theB"), ActorRel(Equivalent, "d_a_npc_tk"), # weak function order ActorRel(NonMatching, "d_a_npc_tkc"), @@ -1850,7 +1855,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_npc_tr"), ActorRel(NonMatching, "d_a_npc_uri"), ActorRel(MatchingFor("GZ2E01"), "d_a_npc_worm", extra_cflags=['-pragma "nosyminline off"']), - ActorRel(NonMatching, "d_a_npc_wrestler"), + ActorRel(NonMatching, "d_a_npc_wrestler", extra_cflags=[DANPCF_C_HACK]), ActorRel(NonMatching, "d_a_npc_yamid"), ActorRel(NonMatching, "d_a_npc_yamis"), ActorRel(NonMatching, "d_a_npc_yamit"), @@ -1862,9 +1867,9 @@ config.libs = [ ActorRel(NonMatching, "d_a_npc_zelR"), ActorRel(NonMatching, "d_a_npc_zelRo"), ActorRel(Equivalent, "d_a_npc_zelda"), # weak function order - ActorRel(NonMatching, "d_a_npc_zra"), - ActorRel(NonMatching, "d_a_npc_zrc"), - ActorRel(NonMatching, "d_a_npc_zrz"), + ActorRel(NonMatching, "d_a_npc_zra", extra_cflags=[DANPCF_C_HACK]), + ActorRel(NonMatching, "d_a_npc_zrc", extra_cflags=[DANPCF_C_HACK]), + ActorRel(NonMatching, "d_a_npc_zrz", extra_cflags=[DANPCF_C_HACK]), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_Lv5Key"), ActorRel(Equivalent, "d_a_obj_Turara"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_TvCdlst"),