Build with GitHub Actions
This commit is contained in:
parent
53d1123e83
commit
e8ffba6dcc
|
@ -0,0 +1,86 @@
|
|||
name: Build
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
cmake:
|
||||
# Skip building pull requests from the same repository
|
||||
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository }}
|
||||
runs-on: windows-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: [x64, x86]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Install Ninja
|
||||
uses: seanmiddleditch/gha-setup-ninja@3b1f8f94a2f8254bd26914c4ab9474d4f0015f67 # v6
|
||||
|
||||
- name: Visual Studio Development Environment
|
||||
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
|
||||
with:
|
||||
arch: ${{ matrix.arch }}
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build
|
||||
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: build-${{ matrix.arch }}
|
||||
path: bin
|
||||
if-no-files-found: error
|
||||
include-hidden-files: true
|
||||
|
||||
package:
|
||||
needs: cmake
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Download x64 Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: build-x64
|
||||
path: bin
|
||||
|
||||
- name: Download x86 Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: build-x86
|
||||
path: bin
|
||||
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: bin-${{ github.sha}}
|
||||
path: bin
|
||||
if-no-files-found: error
|
||||
include-hidden-files: true
|
||||
|
||||
- name: Create snapshot
|
||||
run: |
|
||||
curl.exe -L https://github.com/x64dbg/translations/releases/download/translations/qm.zip -o bin\qm.zip
|
||||
7z x bin\qm.zip -obin
|
||||
cmake -P .\cmake\release.cmake
|
||||
$timestamp = Get-Date -Format "yyyy-MM-dd_HH_mm"
|
||||
7z a -tzip -mx=9 snapshot_$timestamp.zip release\pluginsdk release\release release\commithash.txt
|
||||
7z a -tzip -mx=9 symbols-snapshot_$timestamp.zip release\pdb release\commithash.txt
|
||||
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: x64dbg-${{ github.sha}}
|
||||
path: '*.zip'
|
||||
if-no-files-found: error
|
||||
include-hidden-files: true
|
|
@ -4,6 +4,7 @@
|
|||
/bin/*.dll
|
||||
/bin/*.ini
|
||||
/bin/*.chm
|
||||
/bin/*.zip
|
||||
/src/**/x64/
|
||||
/src/**/Win32/
|
||||
/src/gui_build/
|
||||
|
|
|
@ -24,6 +24,12 @@ if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
|||
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS cmake.toml)
|
||||
endif()
|
||||
|
||||
# Options
|
||||
option(X64DBG_BUILD_IN_TREE "" ON)
|
||||
|
||||
# Variables
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
||||
|
||||
include("cmake/VSToolchain.cmake")
|
||||
|
||||
project(x64dbg
|
||||
|
@ -934,7 +940,7 @@ endif()
|
|||
|
||||
set(CMKR_TARGET exe)
|
||||
# Make the executable the main target
|
||||
add_dependencies(exe dbg gui deps)
|
||||
add_dependencies(exe dbg gui loaddll deps)
|
||||
|
||||
# Target: launcher
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
|
||||
|
@ -963,9 +969,19 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
|
|||
ON
|
||||
)
|
||||
|
||||
if(X64DBG_BUILD_IN_TREE) # X64DBG_BUILD_IN_TREE
|
||||
set_target_properties(launcher PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY
|
||||
"${PROJECT_SOURCE_DIR}/bin"
|
||||
)
|
||||
endif()
|
||||
|
||||
get_directory_property(CMKR_VS_STARTUP_PROJECT DIRECTORY ${PROJECT_SOURCE_DIR} DEFINITION VS_STARTUP_PROJECT)
|
||||
if(NOT CMKR_VS_STARTUP_PROJECT)
|
||||
set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT launcher)
|
||||
endif()
|
||||
|
||||
set(CMKR_TARGET launcher)
|
||||
add_dependencies(exe launcher)
|
||||
|
||||
endif()
|
||||
|
|
12
cmake.toml
12
cmake.toml
|
@ -2,6 +2,12 @@
|
|||
version = "3.15"
|
||||
cmkr-include = "cmake/cmkr.cmake"
|
||||
|
||||
[options]
|
||||
X64DBG_BUILD_IN_TREE = true
|
||||
|
||||
[variables]
|
||||
CMAKE_MODULE_PATH = "${CMAKE_SOURCE_DIR}/cmake"
|
||||
|
||||
[project]
|
||||
name = "x64dbg"
|
||||
description = "An open-source x64/x32 debugger for windows."
|
||||
|
@ -215,7 +221,7 @@ msvc.link-options = [
|
|||
]
|
||||
cmake-after = """
|
||||
# Make the executable the main target
|
||||
add_dependencies(exe dbg gui deps)
|
||||
add_dependencies(exe dbg gui loaddll deps)
|
||||
"""
|
||||
|
||||
[target.exe.properties]
|
||||
|
@ -238,7 +244,9 @@ link-libraries = [
|
|||
"Shlwapi",
|
||||
"Comctl32",
|
||||
]
|
||||
cmake-after = "add_dependencies(exe launcher)"
|
||||
|
||||
[target.launcher.properties]
|
||||
OUTPUT_NAME = "x96dbg"
|
||||
WIN32_EXECUTABLE = "ON"
|
||||
WIN32_EXECUTABLE = "ON"
|
||||
X64DBG_BUILD_IN_TREE.RUNTIME_OUTPUT_DIRECTORY = "${PROJECT_SOURCE_DIR}/bin"
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
# Documentation: https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#find-modules
|
||||
|
||||
if(Qt5_FOUND)
|
||||
return()
|
||||
endif()
|
||||
|
||||
find_package(Qt5 COMPONENTS ${Qt5_FIND_COMPONENTS} QUIET CONFIG)
|
||||
|
||||
if(Qt5_FOUND)
|
||||
if(NOT Qt5_FIND_QUIETLY)
|
||||
message(STATUS "Qt5 found: ${Qt5_DIR}")
|
||||
endif()
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(Qt5_FIND_REQUIRED AND MSVC)
|
||||
message(STATUS "Downloading Qt5...")
|
||||
# Fix warnings about DOWNLOAD_EXTRACT_TIMESTAMP
|
||||
if(POLICY CMP0135)
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
endif()
|
||||
include(FetchContent)
|
||||
set(FETCHCONTENT_QUIET OFF)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
FetchContent_Declare(Qt5
|
||||
URL "https://github.com/x64dbg/deps/releases/download/dependencies/qt5.12.12-msvc2017_64.7z"
|
||||
URL_HASH SHA256=bf302d02366dc09e112a1146e202429717c2097446edba8da3c3168d9a9996b4
|
||||
)
|
||||
else()
|
||||
FetchContent_Declare(Qt5
|
||||
URL "https://github.com/x64dbg/deps/releases/download/dependencies/qt5.12.12-msvc2017.7z"
|
||||
URL_HASH SHA256=0ea8bf7ea3ac5d7dfeb87af4ce471eefdadbf0809524fda2b0ca07aaf4654cfb
|
||||
)
|
||||
endif()
|
||||
FetchContent_MakeAvailable(Qt5)
|
||||
unset(FETCHCONTENT_QUIET)
|
||||
set(Qt5_ROOT ${qt5_SOURCE_DIR})
|
||||
find_package(Qt5 COMPONENTS ${Qt5_FIND_COMPONENTS} CONFIG REQUIRED)
|
||||
endif()
|
|
@ -7,10 +7,14 @@ if (CMAKE_GENERATOR MATCHES "Visual Studio")
|
|||
add_compile_options(/MP)
|
||||
endif()
|
||||
|
||||
# TODO: support other toolchains
|
||||
# Generate PDB files for release builds
|
||||
if(MSVC)
|
||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG:FULL /INCREMENTAL:NO /OPT:REF /OPT:ICF" CACHE STRING "")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/DEBUG:FULL /INCREMENTAL:NO /OPT:REF /OPT:ICF" CACHE STRING "")
|
||||
add_link_options(
|
||||
$<$<CONFIG:Release>:/DEBUG:FULL>
|
||||
$<$<CONFIG:Release>:/INCREMENTAL:NO>
|
||||
$<$<CONFIG:Release>:/OPT:REF>
|
||||
$<$<CONFIG:Release>:/OPT:ICF>
|
||||
)
|
||||
endif()
|
||||
|
||||
# Make the project look nicer in IDEs
|
||||
|
@ -20,3 +24,16 @@ set_property(GLOBAL PROPERTY AUTOMOC_SOURCE_GROUP "Generated Files")
|
|||
set_property(GLOBAL PROPERTY AUTOMOC_TARGETS_FOLDER "CMakePredefinedTargets")
|
||||
set_property(GLOBAL PROPERTY AUTORCC_SOURCE_GROUP "Generated Files")
|
||||
set_property(GLOBAL PROPERTY AUTORCC_TARGETS_FOLDER "CMakePredefinedTargets")
|
||||
|
||||
# Build to the right output directory
|
||||
if(X64DBG_BUILD_IN_TREE)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin/x64$<$<CONFIG:Debug>:d>")
|
||||
else()
|
||||
set(OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin/x32$<$<CONFIG:Debug>:d>")
|
||||
endif()
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY})
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY})
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY})
|
||||
endif()
|
||||
|
|
|
@ -11,13 +11,23 @@ if(CMAKE_SCRIPT_MODE_FILE)
|
|||
|
||||
message(STATUS "Copying dependencies from ${DEPS_DIR} to ${GUI_DIR}")
|
||||
|
||||
execute_process(COMMAND ${WINDEPLOYQT} --no-compiler-runtime --force ${GUI_DLL})
|
||||
execute_process(
|
||||
COMMAND ${WINDEPLOYQT} --no-compiler-runtime --no-translations --no-opengl-sw --force ${GUI_DLL} --list relative
|
||||
OUTPUT_VARIABLE DEPS_COPIED
|
||||
)
|
||||
|
||||
# Split the output into lines
|
||||
string(REGEX REPLACE "\n" ";" DEPS_COPIED "${DEPS_COPIED}")
|
||||
foreach(line ${DEPS_COPIED})
|
||||
message(STATUS "Copying ${line}")
|
||||
endforeach()
|
||||
|
||||
function(copy_dep relfile)
|
||||
if(EXISTS ${relfile})
|
||||
message(STATUS "Skipping ${relfile}")
|
||||
return()
|
||||
endif()
|
||||
set(DEPS_COPIED ${DEPS_COPIED} ${relfile} PARENT_SCOPE)
|
||||
message(STATUS "Copying ${relfile}")
|
||||
get_filename_component(reldir ${relfile} DIRECTORY)
|
||||
get_filename_component(relfile ${relfile} NAME)
|
||||
|
@ -34,7 +44,8 @@ if(CMAKE_SCRIPT_MODE_FILE)
|
|||
copy_dep(GleeBug/TitanEngine.dll)
|
||||
copy_dep(StaticEngine/TitanEngine.dll)
|
||||
|
||||
file(TOUCH "${GUI_DIR}/.deps_copied")
|
||||
list(JOIN DEPS_COPIED "\n" DEPS_COPIED)
|
||||
file(WRITE "${GUI_DIR}/.deps_copied" "${DEPS_COPIED}")
|
||||
|
||||
return()
|
||||
endif()
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
# Get the root directory
|
||||
get_filename_component(ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
|
||||
set(RELEASE_DIR "${ROOT_DIR}/release")
|
||||
|
||||
# Clean up existing release directory
|
||||
file(REMOVE_RECURSE "${RELEASE_DIR}")
|
||||
file(MAKE_DIRECTORY "${RELEASE_DIR}")
|
||||
|
||||
# Setup pluginsdk directories
|
||||
set(PLUGINSDK_DIR "${RELEASE_DIR}/pluginsdk")
|
||||
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}")
|
||||
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/dbghelp")
|
||||
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/DeviceNameResolver")
|
||||
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/jansson")
|
||||
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/lz4")
|
||||
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/TitanEngine")
|
||||
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/XEDParse")
|
||||
|
||||
# Setup release directories
|
||||
file(MAKE_DIRECTORY "${RELEASE_DIR}/release")
|
||||
file(MAKE_DIRECTORY "${RELEASE_DIR}/release/translations")
|
||||
file(MAKE_DIRECTORY "${RELEASE_DIR}/release/x32")
|
||||
file(MAKE_DIRECTORY "${RELEASE_DIR}/release/x64")
|
||||
|
||||
# Copy pluginsdk files
|
||||
set(PLUGINSDK_DIR "${RELEASE_DIR}/pluginsdk")
|
||||
|
||||
# Copy directories
|
||||
file(COPY "${ROOT_DIR}/src/dbg/dbghelp/" DESTINATION "${PLUGINSDK_DIR}/dbghelp")
|
||||
file(COPY "${ROOT_DIR}/src/dbg/DeviceNameResolver/" DESTINATION "${PLUGINSDK_DIR}/DeviceNameResolver")
|
||||
file(COPY "${ROOT_DIR}/src/dbg/jansson/" DESTINATION "${PLUGINSDK_DIR}/jansson")
|
||||
file(COPY "${ROOT_DIR}/src/dbg/lz4/" DESTINATION "${PLUGINSDK_DIR}/lz4")
|
||||
file(COPY "${ROOT_DIR}/src/dbg/TitanEngine/" DESTINATION "${PLUGINSDK_DIR}/TitanEngine")
|
||||
file(COPY "${ROOT_DIR}/src/dbg/XEDParse/" DESTINATION "${PLUGINSDK_DIR}/XEDParse")
|
||||
|
||||
# Remove TitanEngine.txt
|
||||
file(REMOVE "${PLUGINSDK_DIR}/TitanEngine/TitanEngine.txt")
|
||||
|
||||
# Copy headers
|
||||
file(GLOB PLUGIN_HEADERS
|
||||
"${ROOT_DIR}/src/dbg/_plugin_types.h"
|
||||
"${ROOT_DIR}/src/dbg/_plugins.h"
|
||||
"${ROOT_DIR}/src/dbg/_scriptapi*.h"
|
||||
"${ROOT_DIR}/src/dbg/_dbgfunctions.h"
|
||||
"${ROOT_DIR}/src/bridge/bridge*.h"
|
||||
)
|
||||
file(COPY ${PLUGIN_HEADERS} DESTINATION "${PLUGINSDK_DIR}")
|
||||
|
||||
file(COPY "${ROOT_DIR}/bin/x32/x32bridge.lib" DESTINATION "${PLUGINSDK_DIR}")
|
||||
file(COPY "${ROOT_DIR}/bin/x32/x32dbg.lib" DESTINATION "${PLUGINSDK_DIR}")
|
||||
file(COPY "${ROOT_DIR}/bin/x64/x64bridge.lib" DESTINATION "${PLUGINSDK_DIR}")
|
||||
file(COPY "${ROOT_DIR}/bin/x64/x64dbg.lib" DESTINATION "${PLUGINSDK_DIR}")
|
||||
|
||||
# Copy release files
|
||||
set(RELEASE_MAIN_DIR "${RELEASE_DIR}/release")
|
||||
|
||||
# Handle deps_copied
|
||||
function(handle_deps_copied arch)
|
||||
file(READ "${ROOT_DIR}/bin/${arch}/.deps_copied" DEPS_COPIED)
|
||||
string(REGEX REPLACE "\n" ";" DEPS_COPIED "${DEPS_COPIED}")
|
||||
foreach(DEP ${DEPS_COPIED})
|
||||
get_filename_component(reldir ${DEP} DIRECTORY)
|
||||
file(COPY "${ROOT_DIR}/bin/${arch}/${DEP}" DESTINATION "${RELEASE_MAIN_DIR}/${arch}/${reldir}")
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
handle_deps_copied("x64")
|
||||
handle_deps_copied("x32")
|
||||
|
||||
# Copy themes
|
||||
file(COPY "${ROOT_DIR}/bin/themes/" DESTINATION "${RELEASE_MAIN_DIR}/themes")
|
||||
|
||||
# Copy main files
|
||||
file(COPY "${ROOT_DIR}/bin/x96dbg.exe" DESTINATION "${RELEASE_MAIN_DIR}")
|
||||
file(COPY "${ROOT_DIR}/bin/mnemdb.json" DESTINATION "${RELEASE_MAIN_DIR}")
|
||||
file(COPY "${ROOT_DIR}/bin/errordb.txt" DESTINATION "${RELEASE_MAIN_DIR}")
|
||||
file(COPY "${ROOT_DIR}/bin/exceptiondb.txt" DESTINATION "${RELEASE_MAIN_DIR}")
|
||||
file(COPY "${ROOT_DIR}/bin/ntstatusdb.txt" DESTINATION "${RELEASE_MAIN_DIR}")
|
||||
file(COPY "${ROOT_DIR}/bin/winconstants.txt" DESTINATION "${RELEASE_MAIN_DIR}")
|
||||
|
||||
# Copy translations
|
||||
file(GLOB TRANSLATION_FILES "${ROOT_DIR}/bin/translations/*.qm")
|
||||
file(COPY ${TRANSLATION_FILES} DESTINATION "${RELEASE_MAIN_DIR}/translations")
|
||||
|
||||
# Copy x32 files
|
||||
file(COPY "${ROOT_DIR}/bin/x32/x32bridge.dll" DESTINATION "${RELEASE_MAIN_DIR}/x32")
|
||||
file(COPY "${ROOT_DIR}/bin/x32/x32dbg.dll" DESTINATION "${RELEASE_MAIN_DIR}/x32")
|
||||
file(COPY "${ROOT_DIR}/bin/x32/x32dbg.exe" DESTINATION "${RELEASE_MAIN_DIR}/x32")
|
||||
file(COPY "${ROOT_DIR}/bin/x32/x32gui.dll" DESTINATION "${RELEASE_MAIN_DIR}/x32")
|
||||
file(COPY "${ROOT_DIR}/bin/x32/loaddll.exe" DESTINATION "${RELEASE_MAIN_DIR}/x32")
|
||||
|
||||
# Copy x64 files
|
||||
file(COPY "${ROOT_DIR}/bin/x64/x64bridge.dll" DESTINATION "${RELEASE_MAIN_DIR}/x64")
|
||||
file(COPY "${ROOT_DIR}/bin/x64/x64dbg.dll" DESTINATION "${RELEASE_MAIN_DIR}/x64")
|
||||
file(COPY "${ROOT_DIR}/bin/x64/x64dbg.exe" DESTINATION "${RELEASE_MAIN_DIR}/x64")
|
||||
file(COPY "${ROOT_DIR}/bin/x64/x64gui.dll" DESTINATION "${RELEASE_MAIN_DIR}/x64")
|
||||
file(COPY "${ROOT_DIR}/bin/x64/loaddll.exe" DESTINATION "${RELEASE_MAIN_DIR}/x64")
|
||||
|
||||
# Create commithash.txt
|
||||
execute_process(
|
||||
COMMAND git rev-parse HEAD
|
||||
OUTPUT_FILE "${RELEASE_DIR}/commithash.txt"
|
||||
WORKING_DIRECTORY "${ROOT_DIR}"
|
||||
)
|
||||
|
||||
# Copy PDB files
|
||||
file(MAKE_DIRECTORY "${RELEASE_DIR}/pdb")
|
||||
file(MAKE_DIRECTORY "${RELEASE_DIR}/pdb/x32")
|
||||
file(MAKE_DIRECTORY "${RELEASE_DIR}/pdb/x64")
|
||||
|
||||
file(GLOB PDB_FILES "${ROOT_DIR}/bin/*.pdb")
|
||||
file(COPY ${PDB_FILES} DESTINATION "${RELEASE_DIR}/pdb")
|
||||
|
||||
file(GLOB PDB_X32_FILES "${ROOT_DIR}/bin/x32/*.pdb")
|
||||
file(COPY ${PDB_X32_FILES} DESTINATION "${RELEASE_DIR}/pdb/x32")
|
||||
|
||||
file(GLOB PDB_X64_FILES "${ROOT_DIR}/bin/x64/*.pdb")
|
||||
file(COPY ${PDB_X64_FILES} DESTINATION "${RELEASE_DIR}/pdb/x64")
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue