Skip to content

Commit a21325b

Browse files
committed
ci: generate message in pull requests (isledecomp#497)
1 parent ac06186 commit a21325b

5 files changed

Lines changed: 236 additions & 46 deletions

File tree

3rdparty/libcmt/CMakeLists.txt

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
add_library(patched-libcmt INTERFACE)
2+
3+
set(MSVC_CRT_SRC_PATH "" CACHE PATH "Path of MSVC6 CRT/SRC")
4+
# Locate the LIBCMT.LIB picked up from the LIB env var
5+
set(libs "$ENV{LIB}")
6+
if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
7+
string(REPLACE ":" ";" libs "${libs}")
8+
endif()
9+
find_library(LIBCMT_MSVC6_RTM_LIB NAMES LIBCMT.LIB libcmt.lib HINTS ${libs} REQUIRED)
10+
11+
if(EXISTS "${MSVC_CRT_SRC_PATH}/calloc.c" AND LIBCMT_MSVC6_RTM_LIB)
12+
enable_language(C)
13+
set(CMAKE_CXX_FLAGS "/W3 /GX /DWIN32 /D_WINDOWS")
14+
set(CMAKE_CXX_FLAGS_DEBUG "/Gm /Od /D_DEBUG")
15+
set(CMAKE_CXX_FLAGS_RELEASE "/O1 /DNDEBUG")
16+
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O1 /DNDEBUG")
17+
set(CMAKE_CXX_FLAGS_MINSIZEREL "/Os /DNDEBUG")
18+
19+
set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS}")
20+
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
21+
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
22+
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
23+
set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}")
24+
25+
# Compile our SP3 heap overlay as an OBJECT library so we can patch the
26+
# resulting .obj files into a copy of RTM's LIBCMT.LIB.
27+
add_library(goldp_libcmt_objs OBJECT
28+
"${MSVC_CRT_SRC_PATH}/free.c"
29+
"${MSVC_CRT_SRC_PATH}/calloc.c"
30+
"${MSVC_CRT_SRC_PATH}/malloc.c"
31+
"${MSVC_CRT_SRC_PATH}/realloc.c"
32+
"${MSVC_CRT_SRC_PATH}/expand.c"
33+
"${MSVC_CRT_SRC_PATH}/msize.c"
34+
"${MSVC_CRT_SRC_PATH}/sbheap.c"
35+
"${MSVC_CRT_SRC_PATH}/heapinit.c"
36+
"${MSVC_CRT_SRC_PATH}/heapchk.c"
37+
"${MSVC_CRT_SRC_PATH}/heapmin.c"
38+
"${MSVC_CRT_SRC_PATH}/new.cpp"
39+
"${MSVC_CRT_SRC_PATH}/delete.cpp"
40+
)
41+
target_include_directories(goldp_libcmt_objs PRIVATE "${MSVC_CRT_SRC_PATH}")
42+
target_compile_definitions(goldp_libcmt_objs PRIVATE WIN32_LEAN_AND_MEAN NOSERVICE)
43+
target_compile_definitions(goldp_libcmt_objs PRIVATE _MBCS _MB_MAP_DIRECT)
44+
target_compile_definitions(goldp_libcmt_objs PRIVATE _CRTBLD)
45+
target_compile_definitions(goldp_libcmt_objs PRIVATE WINHEAP)
46+
target_compile_options(goldp_libcmt_objs PRIVATE -Zp8 -GFy -GB -Gi- -Zl)
47+
set_property(TARGET goldp_libcmt_objs PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
48+
# Suppress source-level debug info so the PDB doesn't emit S_GPROC32 entries with C-source
49+
# names for CRT internals — this would shadow PUBLIC symbol names and break reccmp's symbol
50+
# resolution for call targets that LR's PDB only knows by linker-decorated name.
51+
set_property(TARGET goldp_libcmt_objs PROPERTY MSVC_DEBUG_INFORMATION_FORMAT "")
52+
53+
message(STATUS "Original LIBCMT.LIB: ${LIBCMT_MSVC6_RTM_LIB}")
54+
55+
# Build a patched LIBCMT.LIB: copy lib, strip heap .obj members, add ours.
56+
set(PATCHED_LIBCMT "${CMAKE_CURRENT_BINARY_DIR}/RACERS_LIBCMT.LIB")
57+
set(PRUNED_LIBCMT "${CMAKE_CURRENT_BINARY_DIR}/PRUNED_LIBCMT.LIB")
58+
add_custom_command(
59+
OUTPUT "${PATCHED_LIBCMT}"
60+
BYPRODUCTS "${PRUNED_LIBCMT}"
61+
DEPENDS goldp_libcmt_objs "${LIBCMT_MSVC6_RTM_LIB}"
62+
COMMAND "${CMAKE_COMMAND}" -E rm -f "${PATCHED_LIBCMT}" "${PRUNED_LIBCMT}"
63+
COMMAND "${CMAKE_COMMAND}" -E copy "${LIBCMT_MSVC6_RTM_LIB}" "${PRUNED_LIBCMT}"
64+
COMMAND "${CMAKE_AR}" /nologo
65+
/REMOVE:build\\intel\\mt_obj\\free.obj
66+
/REMOVE:build\\intel\\mt_obj\\calloc.obj
67+
/REMOVE:build\\intel\\mt_obj\\malloc.obj
68+
/REMOVE:build\\intel\\mt_obj\\realloc.obj
69+
/REMOVE:build\\intel\\mt_obj\\expand.obj
70+
/REMOVE:build\\intel\\mt_obj\\msize.obj
71+
/REMOVE:build\\intel\\mt_obj\\sbheap.obj
72+
/REMOVE:build\\intel\\mt_obj\\heapinit.obj
73+
/REMOVE:build\\intel\\mt_obj\\heapchk.obj
74+
/REMOVE:build\\intel\\mt_obj\\heapmin.obj
75+
/REMOVE:build\\intel\\mt_obj\\new.obj
76+
/REMOVE:build\\intel\\mt_obj\\delete.obj
77+
"${PATCHPRUNED_LIBCMTED_LIBCMT}"
78+
COMMAND "${CMAKE_AR}" /nologo /NODEFAULTLIB:LIBCMT.LIB "/OUT:${PATCHED_LIBCMT}" "${PRUNED_LIBCMT}" $<TARGET_OBJECTS:goldp_libcmt_objs>
79+
COMMAND_EXPAND_LISTS
80+
VERBATIM
81+
)
82+
add_custom_target(goldp_libcmt_target DEPENDS "${PATCHED_LIBCMT}")
83+
add_dependencies(goldp goldp_libcmt_target)
84+
85+
# Tell the linker to use our patched LIBCMT instead of RTM's
86+
target_link_options(patched-libcmt INTERFACE "/NODEFAULTLIB:LIBCMT.LIB")
87+
target_link_libraries(patched-libcmt INTERFACE "${PATCHED_LIBCMT}")
88+
else()
89+
message(STATUS "Could not find libcmt.lib and/or MSVC CRT sources: CRT will not be 100% matching")
90+
endif()

CMakeLists.txt

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -539,11 +539,17 @@ if (MSVC_FOR_DECOMP)
539539
#Embed debug information(/ Z7) for Debug and RelWithDebInfo configuration type
540540
set_property(TARGET goldp legoracers common_goldp common_legoracers PROPERTY MSVC_DEBUG_INFORMATION_FORMAT "$<$<CONFIG:Debug,RelWithDebInfo>:Embedded>")
541541

542-
set(CMAKE_CXX_FLAGS "/W3 /GX /D \"WIN32\" /D \"_WINDOWS\"")
543-
set(CMAKE_CXX_FLAGS_DEBUG "/Gm /Od /D \"_DEBUG\"")
544-
set(CMAKE_CXX_FLAGS_RELEASE "/O2 /D \"NDEBUG\"")
545-
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /D \"NDEBUG\"")
546-
set(CMAKE_CXX_FLAGS_MINSIZEREL "/Os /D \"NDEBUG\"")
542+
set(CMAKE_CXX_FLAGS "/W3 /GX /DWIN32 /D_WINDOWS")
543+
set(CMAKE_CXX_FLAGS_DEBUG "/Gm /Od /D_DEBUG")
544+
set(CMAKE_CXX_FLAGS_RELEASE "/O2 /DNDEBUG")
545+
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /DNDEBUG")
546+
set(CMAKE_CXX_FLAGS_MINSIZEREL "/Os /DNDEBUG")
547+
548+
set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS}")
549+
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
550+
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
551+
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
552+
set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}")
547553

548554
set(CMAKE_EXE_LINKER_FLAGS "/machine:I386")
549555
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/incremental:yes /debug")
@@ -632,8 +638,13 @@ foreach(target ${RECCMP_TARGETS})
632638
add_custom_command(OUTPUT "${progress_local}" COMMAND ${download_command})
633639
add_custom_target(show-progress-${reccmp_id}
634640
COMMENT "Compare progress of ${reccmp_id} with current git master"
635-
COMMAND reccmp-reccmp --target ${reccmp_id} --nolib --diff "${progress_local}"
641+
COMMAND reccmp-reccmp --target ${reccmp_id} --diff "${progress_local}"
636642
DEPENDS "${progress_local}"
637643
)
638644
add_dependencies(show-progress show-progress-${reccmp_id})
639645
endforeach()
646+
647+
if(MSVC_FOR_DECOMP)
648+
add_subdirectory(3rdparty/libcmt)
649+
target_link_libraries(goldp PRIVATE patched-libcmt)
650+
endif()

GolDP/library_msvc.h

Lines changed: 120 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@
7878
// LIBRARY: GOLDP 0x1004bd37
7979
// ___doserrno
8080

81-
// LIBRARY: GOLDP 0x1004bd57
82-
// __sopen
83-
8481
// LIBRARY: GOLDP 0x1004bd40
8582
// __open
8683

84+
// LIBRARY: GOLDP 0x1004bd57
85+
// __sopen
86+
8787
// LIBRARY: GOLDP 0x1004c026
8888
// __close
8989

@@ -120,12 +120,12 @@
120120
// LIBRARY: GOLDP 0x1004d030
121121
// __mtterm
122122

123-
// LIBRARY: GOLDP 0x1004d061
124-
// __getptd
125-
126123
// LIBRARY: GOLDP 0x1004d04e
127124
// __initptd
128125

126+
// LIBRARY: GOLDP 0x1004d061
127+
// __getptd
128+
129129
// LIBRARY: GOLDP 0x1004d0c8
130130
// __freeptd
131131

@@ -227,6 +227,12 @@
227227
// LIBRARY: GOLDP 0x1004ff37
228228
// ___crtGetEnvironmentStringsA
229229

230+
// LIBRARY: GOLDP 0x10050069
231+
// __GetLinkerVersion
232+
233+
// LIBRARY: GOLDP 0x10050096
234+
// ___heap_select
235+
230236
// LIBRARY: GOLDP 0x100501de
231237
// __heap_init
232238

@@ -239,10 +245,52 @@
239245
// LIBRARY: GOLDP 0x10050322
240246
// __NMSG_WRITE
241247

248+
// LIBRARY: GOLDP 0x100505c0
249+
// _memmove
250+
242251
// TODO #297: Seems to mismatch, maybe a custom allocator is used?
243252
// LIBRARY: GOLDP 0x100508f5
244253
// _calloc
245254

255+
// LIBRARY: GOLDP 0x10050a49
256+
// ___sbh_heap_init
257+
258+
// LIBRARY: GOLDP 0x10050a91
259+
// ___sbh_find_block
260+
261+
// LIBRARY: GOLDP 0x10050abc
262+
// ___sbh_free_block
263+
264+
// LIBRARY: GOLDP 0x10050de5
265+
// ___sbh_alloc_block
266+
267+
// LIBRARY: GOLDP 0x100510ee
268+
// ___sbh_alloc_new_region
269+
270+
// LIBRARY: GOLDP 0x1005119f
271+
// ___sbh_alloc_new_group
272+
273+
// LIBRARY: GOLDP 0x10051590
274+
// ___old_sbh_new_region
275+
276+
// LIBRARY: GOLDP 0x100516d4
277+
// ___old_sbh_release_region
278+
279+
// LIBRARY: GOLDP 0x1005172a
280+
// ___old_sbh_decommit_pages
281+
282+
// LIBRARY: GOLDP 0x100517ec
283+
// ___old_sbh_find_block
284+
285+
// LIBRARY: GOLDP 0x10051843
286+
// ___old_sbh_free_block
287+
288+
// LIBRARY: GOLDP 0x10051888
289+
// ___old_sbh_alloc_block
290+
291+
// LIBRARY: GOLDP 0x10051a90
292+
// ___old_sbh_alloc_block_from_page
293+
246294
// LIBRARY: GOLDP 0x10051c5d
247295
// __getbuf
248296

@@ -276,12 +324,12 @@
276324
// LIBRARY: GOLDP 0x10052980
277325
// _memset
278326

279-
// LIBRARY: GOLDP 0x100529f0
280-
// _memcpy
281-
282327
// LIBRARY: GOLDP 0x100529d8
283328
// __fptrap
284329

330+
// LIBRARY: GOLDP 0x100529f0
331+
// _memcpy
332+
285333
// LIBRARY: GOLDP 0x10052df8
286334
// ___crtGetStringTypeA
287335

@@ -297,6 +345,18 @@
297345
// LIBRARY: GOLDP 0x10053438
298346
// ___initmbctable
299347

348+
// LIBRARY: GOLDP 0x10053454
349+
// _strtol
350+
351+
// LIBRARY: GOLDP 0x10053680
352+
// _strchr
353+
354+
// LIBRARY: GOLDP 0x10053686
355+
// ___from_strstr_to_strchr
356+
357+
// LIBRARY: GOLDP 0x10053740
358+
// _strstr
359+
300360
// LIBRARY: GOLDP 0x100537c0
301361
// ___crtMessageBoxA
302362

@@ -336,30 +396,30 @@
336396
// GLOBAL: GOLDP 0x1005f458
337397
// __FPinit
338398

399+
// GLOBAL: GOLDP 0x1005f5f8
400+
// __aexit_rtn
401+
339402
// GLOBAL: GOLDP 0x1005f600
340403
// ___tlsindex
341404

342-
// GLOBAL: GOLDP 0x1005f97c
343-
// ___mb_cur_max
344-
345-
// GLOBAL: GOLDP 0x1005f988
346-
// __locktable
347-
348-
// GLOBAL: GOLDP 0x1005fc10
349-
// __XcptActTab
350-
351-
// GLOBAL: GOLDP 0x10065f08
352-
// ___error_mode
353-
354405
// GLOBAL: GOLDP 0x1005f608
355406
// ___nullstring
356407

357408
// GLOBAL: GOLDP 0x1005f60c
358409
// ___wnullstring
359410

411+
// GLOBAL: GOLDP 0x1005f610
412+
// __cfltcvt_tab
413+
360414
// GLOBAL: GOLDP 0x1005f770
361415
// __pctype
362416

417+
// GLOBAL: GOLDP 0x1005f97c
418+
// ___mb_cur_max
419+
420+
// GLOBAL: GOLDP 0x1005f988
421+
// __locktable
422+
363423
// GLOBAL: GOLDP 0x1005fb58
364424
// ___badioinfo
365425

@@ -369,9 +429,21 @@
369429
// GLOBAL: GOLDP 0x10062078
370430
// ___lc_time_curr
371431

432+
// GLOBAL: GOLDP 0x1005fc10
433+
// __XcptActTab
434+
435+
// GLOBAL: GOLDP 0x1005fc98
436+
// ___old_small_block_heap
437+
438+
// GLOBAL: GOLDP 0x10061cbc
439+
// ___old_sbh_threshold
440+
372441
// GLOBAL: GOLDP 0x10065f00
373442
// __aenvptr
374443

444+
// GLOBAL: GOLDP 0x10065f08
445+
// ___error_mode
446+
375447
// GLOBAL: GOLDP 0x10065f0c
376448
// ___app_type
377449

@@ -444,6 +516,33 @@
444516
// GLOBAL: GOLDP 0x100674c0
445517
// __nstream
446518

519+
// GLOBAL: GOLDP 0x100674c4
520+
// ___sbh_sizeHeaderList
521+
522+
// GLOBAL: GOLDP 0x100674c8
523+
// ___sbh_indGroupDefer
524+
525+
// GLOBAL: GOLDP 0x100674cc
526+
// ___sbh_pHeaderScan
527+
528+
// GLOBAL: GOLDP 0x100674d0
529+
// ___sbh_pHeaderDefer
530+
531+
// GLOBAL: GOLDP 0x100674d4
532+
// ___sbh_cntHeaderList
533+
534+
// GLOBAL: GOLDP 0x100674d8
535+
// ___sbh_pHeaderList
536+
537+
// GLOBAL: GOLDP 0x100674dc
538+
// ___sbh_threshold
539+
540+
// GLOBAL: GOLDP 0x100674e0
541+
// __crtheap
542+
543+
// GLOBAL: GOLDP 0x100674e4
544+
// ___active_heap
545+
447546
// GLOBAL: GOLDP 0x10067500
448547
// ___pioinfo
449548

0 commit comments

Comments
 (0)