mirror of
https://github.com/x64dbg/x64dbg
synced 2026-08-11 18:23:06 -04:00
resource.rc already embeds manifest.xml as an RT_MANIFEST resource. With the MSVC linker's default manifest generation left on, the linker embeds its own minimal manifest too, producing two RT_MANIFEST resources in the PE (the rich rc one at language 0 and the linker default at language 1033). They coexist because resource identity is (type, name, language). The old Visual Studio projects suppressed this via GenerateManifest=false (commita339dd2d), but that setting was lost when the projects were removed in favor of CMake (commitdf110dc0). Restore it by adding /MANIFEST:NO to the link options of the two targets that embed the manifest, so only the resource.rc manifest is kept. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
295 lines
6.4 KiB
TOML
295 lines
6.4 KiB
TOML
[cmake]
|
|
version = "3.15"
|
|
cmkr-include = "cmake/cmkr.cmake"
|
|
|
|
[options]
|
|
X64DBG_BUILD_IN_TREE = true
|
|
X64DBG_RELEASE = false
|
|
|
|
[variables]
|
|
CMAKE_MODULE_PATH = "${CMAKE_SOURCE_DIR}/cmake"
|
|
|
|
[project]
|
|
name = "x64dbg"
|
|
description = "An open-source x64/x32 debugger for windows."
|
|
msvc-runtime = "dynamic"
|
|
include-before = [
|
|
"cmake/VSToolchain.cmake"
|
|
]
|
|
include-after = [
|
|
"cmake/VSFlags.cmake",
|
|
]
|
|
|
|
[conditions]
|
|
x86 = "CMAKE_SIZEOF_VOID_P EQUAL 4"
|
|
x64 = "CMAKE_SIZEOF_VOID_P EQUAL 8"
|
|
|
|
[find-package]
|
|
Qt5 = { components = ["Widgets", "WinExtras"] }
|
|
|
|
[subdir."src/zydis_wrapper"]
|
|
[subdir."src/gui/Src/ThirdPartyLibs/md4c"]
|
|
[subdir."src/third_party"]
|
|
[subdir."src/tests"]
|
|
|
|
[target.bridge]
|
|
type = "shared"
|
|
sources = [
|
|
"src/bridge/*.cpp",
|
|
"src/bridge/*.c",
|
|
"src/bridge/*.h",
|
|
]
|
|
private-compile-definitions = [
|
|
"BUILD_BRIDGE",
|
|
]
|
|
|
|
[target.bridge.properties]
|
|
x86.OUTPUT_NAME = "x32bridge"
|
|
x64.OUTPUT_NAME = "x64bridge"
|
|
|
|
[target.btparser]
|
|
type = "static"
|
|
sources = [
|
|
"src/dbg/btparser/btparser/lexer.cpp",
|
|
"src/dbg/btparser/btparser/helpers.h",
|
|
"src/dbg/btparser/btparser/keywords.h",
|
|
"src/dbg/btparser/btparser/lexer.h",
|
|
"src/dbg/btparser/btparser/operators.h",
|
|
"src/dbg/btparser/btparser/parser.h",
|
|
"src/dbg/btparser/btparser/testfiles.h",
|
|
]
|
|
include-directories = [
|
|
"src/dbg/btparser",
|
|
]
|
|
clang-any.compile-options = ["-Wno-self-assign-field"]
|
|
|
|
[target.dbg]
|
|
type = "shared"
|
|
sources = [
|
|
"src/dbg/*.cpp",
|
|
"src/dbg/*.h",
|
|
"src/dbg/analysis/*.cpp",
|
|
"src/dbg/analysis/*.h",
|
|
"src/dbg/commands/*.cpp",
|
|
"src/dbg/commands/*.h",
|
|
"src/dbg/DeviceNameResolver/*.h",
|
|
"src/dbg/jansson/*.h",
|
|
"src/dbg/lz4/*.h",
|
|
"src/dbg/msdia/*.cpp",
|
|
"src/dbg/msdia/*.h",
|
|
"src/dbg/ntdll/*.h",
|
|
"src/dbg/TitanEngine/*.h",
|
|
"src/dbg/WinInet-Downloader/*.cpp",
|
|
"src/dbg/WinInet-Downloader/*.h",
|
|
"src/dbg/XEDParse/*.h",
|
|
]
|
|
private-link-libraries = [
|
|
"::zydis_wrapper",
|
|
"::bridge",
|
|
"::btparser",
|
|
"Psapi",
|
|
"Shlwapi",
|
|
"Ws2_32",
|
|
"Wininet",
|
|
"Iphlpapi",
|
|
]
|
|
x86.private-link-libraries = [
|
|
"src/dbg/dbghelp/dbghelp_x86.lib",
|
|
"src/dbg/DeviceNameResolver/DeviceNameResolver_x86.lib",
|
|
"src/dbg/jansson/jansson_x86.lib",
|
|
"src/dbg/lz4/lz4_x86.lib",
|
|
"src/dbg/ntdll/ntdll_x86.lib",
|
|
"src/dbg/TitanEngine/TitanEngine_x86.lib",
|
|
"src/dbg/XEDParse/XEDParse_x86.lib",
|
|
"src/dbg/LLVMDemangle/LLVMDemangle_x86.lib",
|
|
]
|
|
x64.private-link-libraries = [
|
|
"src/dbg/dbghelp/dbghelp_x64.lib",
|
|
"src/dbg/DeviceNameResolver/DeviceNameResolver_x64.lib",
|
|
"src/dbg/jansson/jansson_x64.lib",
|
|
"src/dbg/lz4/lz4_x64.lib",
|
|
"src/dbg/ntdll/ntdll_x64.lib",
|
|
"src/dbg/TitanEngine/TitanEngine_x64.lib",
|
|
"src/dbg/XEDParse/XEDParse_x64.lib",
|
|
"src/dbg/LLVMDemangle/LLVMDemangle_x64.lib",
|
|
]
|
|
private-compile-definitions = [
|
|
"BUILD_DBG",
|
|
"NOMINMAX",
|
|
]
|
|
private-include-directories = [
|
|
"src/dbg",
|
|
"src/dbg/analysis",
|
|
"src/dbg/commands",
|
|
]
|
|
msvc.link-options = [
|
|
"/DELAYLOAD:TitanEngine.dll",
|
|
]
|
|
msvc.link-libraries = [
|
|
"Delayimp",
|
|
]
|
|
|
|
[target.dbg.properties]
|
|
x86.OUTPUT_NAME = "x32dbg"
|
|
x64.OUTPUT_NAME = "x64dbg"
|
|
|
|
[target.gui]
|
|
type = "shared"
|
|
sources = [
|
|
"src/gui/**.cpp",
|
|
"src/gui/**.h",
|
|
"src/gui/**.ui",
|
|
"src/gui/**.qrc",
|
|
]
|
|
private-link-libraries = [
|
|
"Qt5::Widgets",
|
|
"Qt5::WinExtras",
|
|
"::zydis_wrapper",
|
|
"::bridge",
|
|
"::md4c-html",
|
|
"winmm",
|
|
"wininet",
|
|
"dwmapi"
|
|
]
|
|
x86.private-link-libraries = [
|
|
"src/gui/Src/ThirdPartyLibs/ldconvert/ldconvert_x86.lib",
|
|
]
|
|
x64.private-link-libraries = [
|
|
"src/gui/Src/ThirdPartyLibs/ldconvert/ldconvert_x64.lib",
|
|
]
|
|
private-include-directories = [
|
|
"src",
|
|
"src/gui/Src",
|
|
"src/gui/Src/Gui",
|
|
"src/gui/Src/BasicView",
|
|
"src/gui/Src/Disassembler",
|
|
"src/gui/Src/Memory",
|
|
"src/gui/Src/Bridge",
|
|
"src/gui/Src/Global",
|
|
"src/gui/Src/Utils",
|
|
"src/gui/Src/ThirdPartyLibs/ldconvert",
|
|
]
|
|
private-compile-definitions = [
|
|
"BUILD_LIB",
|
|
"NOMINMAX",
|
|
"X64DBG",
|
|
]
|
|
X64DBG_RELEASE.compile-definitions = ["X64DBG_RELEASE"]
|
|
include-after = ["cmake/deps.cmake"]
|
|
|
|
[target.gui.properties]
|
|
x86.OUTPUT_NAME = "x32gui"
|
|
x64.OUTPUT_NAME = "x64gui"
|
|
AUTOMOC = true
|
|
AUTORCC = true
|
|
AUTOUIC = true
|
|
|
|
[target.exe]
|
|
type = "executable"
|
|
msvc-runtime = "static"
|
|
sources = [
|
|
"src/exe/*.cpp",
|
|
"src/exe/*.h",
|
|
"src/exe/manifest.xml",
|
|
"src/exe/resource.rc",
|
|
"src/exe/strings_utf8.rc",
|
|
]
|
|
x86.sources = ["src/exe/icon32.rc"]
|
|
x64.sources = ["src/exe/icon64.rc"]
|
|
link-libraries = [
|
|
"::bridge",
|
|
"Wintrust",
|
|
]
|
|
msvc.link-options = [
|
|
# resource.rc already embeds manifest.xml as RT_MANIFEST, so disable the
|
|
# linker's default manifest to avoid embedding a second one.
|
|
"/MANIFEST:NO",
|
|
"/DELAYLOAD:user32.dll",
|
|
"/DELAYLOAD:wintrust.dll",
|
|
"/DELAYLOAD:$<TARGET_FILE_NAME:bridge>",
|
|
"/NOIMPLIB",
|
|
"/NOEXP",
|
|
"/LARGEADDRESSAWARE",
|
|
]
|
|
msvc.link-libraries = [
|
|
"Delayimp",
|
|
]
|
|
# Make the executable build everything
|
|
dependencies = [
|
|
"dbg",
|
|
"gui",
|
|
"loaddll",
|
|
"deps",
|
|
"third_party",
|
|
]
|
|
x86.dependencies = ["launcher"]
|
|
|
|
[target.exe.properties]
|
|
x86.OUTPUT_NAME = "x32dbg"
|
|
x64.OUTPUT_NAME = "x64dbg"
|
|
x86.ARCHIVE_OUTPUT_NAME = "x32dbg_exe"
|
|
x64.ARCHIVE_OUTPUT_NAME = "x64dbg_exe"
|
|
x86.PDB_NAME = "x32dbg_exe"
|
|
x64.PDB_NAME = "x64dbg_exe"
|
|
WIN32_EXECUTABLE = "ON"
|
|
|
|
[target.loaddll]
|
|
type = "executable"
|
|
msvc-runtime = "static"
|
|
sources = [
|
|
"src/loaddll/loaddll.cpp",
|
|
]
|
|
x86.link-libraries = [
|
|
"src/dbg/ntdll/ntdll_x86.lib",
|
|
]
|
|
x64.link-libraries = [
|
|
"src/dbg/ntdll/ntdll_x64.lib",
|
|
]
|
|
msvc.link-options = [
|
|
"/DELAYLOAD:user32.dll",
|
|
]
|
|
msvc.link-libraries = [
|
|
"Delayimp",
|
|
]
|
|
|
|
[target.loaddll.properties]
|
|
WIN32_EXECUTABLE = "ON"
|
|
|
|
[target.headless]
|
|
type = "executable"
|
|
sources = [
|
|
"src/headless/*.cpp",
|
|
"src/headless/*.h",
|
|
]
|
|
link-libraries = [
|
|
"::bridge",
|
|
]
|
|
msvc.link-options = [
|
|
"/LARGEADDRESSAWARE",
|
|
]
|
|
dependencies = ["exe"]
|
|
|
|
[target.launcher]
|
|
type = "executable"
|
|
condition = "x86"
|
|
msvc-runtime = "static"
|
|
sources = [
|
|
"src/launcher/*.cpp",
|
|
"src/exe/icon.rc",
|
|
"src/exe/resource.rc",
|
|
"src/exe/strings_utf8.rc",
|
|
]
|
|
msvc.link-options = [
|
|
# resource.rc already embeds manifest.xml as RT_MANIFEST, so disable the
|
|
# linker's default manifest to avoid embedding a second one.
|
|
"/MANIFEST:NO",
|
|
]
|
|
link-libraries = [
|
|
"Shlwapi",
|
|
"Comctl32",
|
|
]
|
|
|
|
[target.launcher.properties]
|
|
OUTPUT_NAME = "x96dbg"
|
|
WIN32_EXECUTABLE = "ON"
|
|
X64DBG_BUILD_IN_TREE.RUNTIME_OUTPUT_DIRECTORY = "${PROJECT_SOURCE_DIR}/bin"
|