Use CMake FetchContent to support both stable and HEAD ghidra (#15)

Quite a few changes that should be explained in the READMEs

Updates to CI actions
This commit is contained in:
Eric Kilmer
2021-11-17 09:12:23 -05:00
committed by GitHub
parent 66c4f8b915
commit 3e1e6a7eb9
15 changed files with 552 additions and 176 deletions
+17 -19
View File
@@ -17,28 +17,31 @@ jobs:
matrix:
os: [ubuntu-latest, macos-latest]
build_type: [RelWithDebInfo, Debug]
release: [stable, HEAD]
steps:
- uses: actions/checkout@v1
- name: Setup Git User for Applying Patches
# See this thread for more details https://github.community/t/github-actions-bot-email-address/17204/5
run: |
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
- name: Generate cache key
id: cache_key
run: echo ::set-output name=VALUE::build_${{ matrix.os }}_type-${{ matrix.build_type }}
run: echo ::set-output name=VALUE::build_${{ matrix.os }}_type-${{ matrix.build_type }}-${{ matrix.release }}
- name: Update the cache (ccache)
uses: actions/cache@v1.0.3
with:
path: ccache
path: "${{ github.workspace }}/ccache"
key: ${{ steps.cache_key.outputs.VALUE }}_ccache
- name: Create the cache
run: mkdir -p ccache
- name: Synchronize the submodules
run: git submodule sync --recursive
- name: Update the submodules
run: git submodule update --init --recursive
run: |
mkdir -p "${{ github.workspace }}/ccache"
echo "CCACHE_DIR=${{ github.workspace }}/ccache" >> $GITHUB_ENV
- name: Install Linux system dependencies
if: runner.os == 'Linux'
@@ -70,23 +73,22 @@ jobs:
- name: Configure the project
run: |
export CCACHE_DIR="$(realpath ccache)"
cmake \
-S . \
-B build \
-G Ninja \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
-DSLEIGH_GHIDRA_RELEASE_TYPE=${{ matrix.release }} \
-DSLEIGH_ENABLE_TESTS=ON \
-DSLEIGH_ENABLE_EXAMPLES=ON \
-DSLEIGH_ENABLE_PACKAGING=ON
- name: Build the project
run: |
export CCACHE_DIR="$(realpath ccache)"
cmake \
--build build \
-v
@@ -103,12 +105,8 @@ jobs:
- name: Run the install target
run: |
mkdir install
export DESTDIR="$(realpath install)"
cmake \
--build build \
--target install
cmake --install build \
--prefix install
- name: Create the packages
run: |
+4
View File
@@ -1,2 +1,6 @@
build
.vscode
# FetchContent Ghidra source directories
/src/ghidra*
cmake_fc_*
-3
View File
@@ -1,3 +0,0 @@
[submodule "src"]
path = src
url = https://github.com/NationalSecurityAgency/ghidra
+42 -125
View File
@@ -7,7 +7,15 @@
#
cmake_minimum_required(VERSION 3.21.0)
project("sleigh" VERSION 10.0.4.0)
# Sets "library_root" variable for decompiler cpp root directory
# Sets "ghidra_version" for numeric version number
# Use "ghidrasource_SOURCE_DIR" variable for Ghidra repo root
include(src/setup-ghidra-source.cmake)
project("sleigh"
VERSION "${ghidra_version}"
)
include("cmake/options.cmake")
@@ -23,12 +31,6 @@ if(SLEIGH_ENABLE_PACKAGING)
endif()
endif()
# Make sure the submodule has been initialized correctly
set(library_root "${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Features/Decompiler/src/decompile/cpp")
if(NOT EXISTS "${library_root}/sleigh.hh")
message(FATAL_ERROR "The ghidra submodule has not been initialized")
endif()
set(sleigh_core_source_list
"${library_root}/xml.cc"
"${library_root}/space.cc"
@@ -222,6 +224,11 @@ add_executable(decomp_opt
"${library_root}/consolemain.cc"
)
if("${SLEIGH_GHIDRA_RELEASE_TYPE}" STREQUAL "HEAD")
target_sources(decomp_opt PRIVATE
"${library_root}/testfunction.cc"
)
endif()
target_compile_definitions(decomp_opt PRIVATE
__TERMINAL__
@@ -255,6 +262,12 @@ if(SLEIGH_ENABLE_TESTS)
"${library_root}/test.cc"
"${library_root}/../unittests/testfloatemu.cc"
)
if("${SLEIGH_GHIDRA_RELEASE_TYPE}" STREQUAL "HEAD")
target_sources(ghidra_test_dbg PRIVATE
"${library_root}/../unittests/testtypes.cc"
"${library_root}/../unittests/testcirclerange.cc"
)
endif()
target_link_libraries(ghidra_test_dbg PRIVATE
sleigh_settings
@@ -268,9 +281,14 @@ if(SLEIGH_ENABLE_TESTS)
"${library_root}"
)
set(extra_test_args "")
if("${SLEIGH_GHIDRA_RELEASE_TYPE}" STREQUAL "HEAD")
# We compile the sla files in our build directory
set(extra_test_args -sleighpath "${CMAKE_CURRENT_BINARY_DIR}")
endif()
add_test(
NAME ghidra_test_dbg
COMMAND ghidra_test_dbg
COMMAND ghidra_test_dbg ${extra_test_args} unittests
)
endif()
@@ -283,6 +301,13 @@ add_executable(ghidra_opt
${sleigh_deccore_source_list}
${sleigh_ghidra_source_list}
)
if("${SLEIGH_GHIDRA_RELEASE_TYPE}" STREQUAL "HEAD")
target_sources(ghidra_opt PRIVATE
$<$<CONFIG:DEBUG>:
"${library_root}/testfunction.cc"
>
)
endif()
target_link_libraries(ghidra_opt PRIVATE
sleigh_settings
@@ -424,127 +449,19 @@ endif()
#
# Spec files
#
if(NOT "${SLEIGH_GHIDRA_RELEASE_TYPE}" STREQUAL "HEAD")
include(spec-files-list/spec_files_stable.cmake)
else()
include(spec-files-list/spec_files_HEAD.cmake)
endif()
set(spec_file_list
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/6502/data/languages/6502.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/68000/data/languages/68020.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/68000/data/languages/68030.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/68000/data/languages/68040.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/68000/data/languages/coldfire.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/6805/data/languages/6805.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/6805/data/languages/6809.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/8048/data/languages/8048.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/8051/data/languages/80251.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/8051/data/languages/80390.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/8051/data/languages/8051.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/8051/data/languages/mx51.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/8085/data/languages/8085.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/AARCH64/data/languages/AARCH64BE.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/AARCH64/data/languages/AARCH64.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM4_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM4_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM4t_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM4t_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM5_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM5_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM5t_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM5t_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM6_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM6_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM7_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM7_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM8_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/ARM/data/languages/ARM8_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Atmel/data/languages/avr32a.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Atmel/data/languages/avr8eind.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Atmel/data/languages/avr8e.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Atmel/data/languages/avr8.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Atmel/data/languages/avr8xmega.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/CP1600/data/languages/CP1600.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/CR16/data/languages/CR16B.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/CR16/data/languages/CR16C.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Dalvik/data/languages/Dalvik.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/DATA/data/languages/data-be-64.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/DATA/data/languages/data-le-64.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/HCS08/data/languages/HC05.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/HCS08/data/languages/HC08.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/HCS08/data/languages/HCS08.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/HCS12/data/languages/HCS12.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/JVM/data/languages/JVM.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/M8C/data/languages/m8c.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/MCS96/data/languages/MCS96.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/MIPS/data/languages/mips32be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/MIPS/data/languages/mips32le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/MIPS/data/languages/mips32R6be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/MIPS/data/languages/mips32R6le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/MIPS/data/languages/mips64be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/MIPS/data/languages/mips64le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PA-RISC/data/languages/pa-risc32be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/dsPIC30F.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/dsPIC33C.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/dsPIC33E.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/dsPIC33F.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/pic12c5xx.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/pic16c5x.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/pic16f.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/pic16.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/pic17c7xx.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/pic18.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/PIC24E.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/PIC24F.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PIC/data/languages/PIC24H.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_32_4xx_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_32_4xx_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_32_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_32_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_32_quicciii_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_32_quicciii_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_64_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_altivec_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_altivec_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_altivec_vle_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_vle_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/PowerPC/data/languages/ppc_64_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/RISCV/data/languages/riscv.ilp32d.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/RISCV/data/languages/riscv.lp64d.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Sparc/data/languages/SparcV9_32.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Sparc/data/languages/SparcV9_64.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/SuperH4/data/languages/SuperH4_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/SuperH4/data/languages/SuperH4_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/SuperH/data/languages/sh-1.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/SuperH/data/languages/sh-2a.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/SuperH/data/languages/sh-2.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/TI_MSP430/data/languages/TI_MSP430.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/TI_MSP430/data/languages/TI_MSP430X.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy64_be_harvard.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy64_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy64_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy_be_posStack.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy_builder_be_align2.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy_builder_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy_builder_le_align2.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy_builder_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy_wsz_be.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Toy/data/languages/toy_wsz_le.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/tricore/data/languages/tricore.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/V850/data/languages/V850.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/x86/data/languages/x86-64.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/x86/data/languages/x86.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Z80/data/languages/z180.slaspec"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors/Z80/data/languages/z80.slaspec"
)
set(sla_spec_output "${CMAKE_CURRENT_BINARY_DIR}/Processors")
set(sla_spec_output "${CMAKE_CURRENT_BINARY_DIR}/Ghidra/Processors")
add_custom_command(
OUTPUT "${sla_spec_output}"
DEPENDS ${spec_file_list}
COMMAND "${CMAKE_COMMAND}" -E rm -rf "${sla_spec_output}"
COMMAND "${CMAKE_COMMAND}" -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/src/Ghidra/Processors" "${sla_spec_output}"
COMMAND "${CMAKE_COMMAND}" -E copy_directory "${ghidrasource_SOURCE_DIR}/Ghidra/Processors" "${sla_spec_output}"
COMMENT "sleigh: Copying the spec files"
VERBATIM
)
@@ -588,7 +505,7 @@ if(SLEIGH_ENABLE_EXAMPLES)
add_custom_target(sleighexample_runner
"${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/specfiles"
COMMAND "${CMAKE_COMMAND}" -E create_symlink "${CMAKE_CURRENT_BINARY_DIR}/Processors/x86/data/languages/x86.sla" "${CMAKE_CURRENT_BINARY_DIR}/specfiles/x86.sla"
COMMAND "${CMAKE_COMMAND}" -E create_symlink "${CMAKE_CURRENT_BINARY_DIR}/Ghidra/Processors/x86/data/languages/x86.sla" "${CMAKE_CURRENT_BINARY_DIR}/specfiles/x86.sla"
COMMAND sleighexample disassemble
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
)
@@ -696,7 +613,7 @@ if(SLEIGH_ENABLE_INSTALL)
"${library_root}/translate.hh"
"${library_root}/types.h"
"${library_root}/xml.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/include/libsleigh.hh"
"${PROJECT_SOURCE_DIR}/include/libsleigh.hh"
)
install(
+26 -23
View File
@@ -14,11 +14,21 @@ This repository provides a CMake-based build project for SLEIGH so that it can b
## Dependencies and Prerequisites
### Required
| Name | Version | Linux Package to Install | macOS Homebrew Package to Install |
| ---- | ------- | ------------------------ | --------------------------------- |
| [Git](https://git-scm.com/) | Latest | git | N/A |
| [Ninja](https://ninja-build.org/) | Latest | ninja-build | ninja |
| [CMake](https://cmake.org/) | 3.21+ | cmake | cmake |
**NOTE**: This CMake project pulls the Ghidra source code from the internet during configuration. See the [note on Ghidra source code section](#note-on-ghidra-source-code) for more details.
### Optional
For building documentation during installation and packaging:
| Name | Version | Linux Package to Install | macOS Homebrew Package to Install |
| ---- | ------- | ------------------------ | --------------------------------- |
| [Doxygen](https://www.doxygen.nl/) | Latest | doxygen | doxygen |
| [GraphViz](https://graphviz.org/) | Latest | graphviz | graphviz |
@@ -29,27 +39,23 @@ This repository provides a CMake-based build project for SLEIGH so that it can b
git clone https://github.com/lifting-bits/sleigh.git
cd sleigh
# Update the GHIDRA submodule
git submodule update --init --recursive --progress
# Create a build directory
mkdir build
cd build
# Configure CMake
cmake \
-DSLEIGH_ENABLE_INSTALL=ON \
-DCMAKE_INSTALL_PREFIX="<path where SLEIGH will install>" \
-G Ninja \
..
cmake -B build -S . \
-DSLEIGH_ENABLE_INSTALL=ON
# Build SLEIGH
cmake --build .
cmake --build build -j
# Install SLEIGH
cmake --build . --target install
cmake --install build --prefix <path where SLEIGH will install>
```
### Note on Ghidra source code
The Ghidra source code is not actually included in this git repo, and by default, CMake will automatically pull a stable version from the internet for you.
Please see [`src/README.md`](./src/README.md) for more information on how to customize which Ghidra source code commit will be used/compiled, including specifying your own local copy of the Ghidra source.
## Packaging
The CMake configuration also supports building packages for SLEIGH. If the `SLEIGH_ENABLE_PACKAGING` option is set during the configuration step, the build step will generate a tarball containing the SLEIGH installation. Additionally, the build will create an RPM package if it finds `rpm` in the `PATH` and/or a DEB package if it finds `dpkg` in the `PATH`.
@@ -57,17 +63,14 @@ The CMake configuration also supports building packages for SLEIGH. If the `SLEI
For example:
```sh
cmake \
-DSLEIGH_ENABLE_PACKAGING=ON \
-DCMAKE_INSTALL_PREFIX="<path where SLEIGH will install>" \
-G Ninja \
..
cmake -B build -S . \
-DSLEIGH_ENABLE_PACKAGING=ON
# Build SLEIGH
cmake --build .
cmake --build build -j
# Package SLEIGH
cmake --build . --target package
cmake --build build --target package
```
## API Usage
@@ -100,7 +103,7 @@ $ sleigh-lift pcode <path where SLEIGH is installed>/share/sleigh/Processors/x86
(register,0x202,1) = INT_EQUAL (unique,0x12d00,1) (const,0x0,1)
```
The `SLEIGH_ENABLE_EXAMPLES` option must be set during the configuration step in order to build `sleigh-lift`.
The `SLEIGH_ENABLE_EXAMPLES` option must be set to `ON` during the configuration step in order to build `sleigh-lift`.
## License
+3 -5
View File
@@ -7,11 +7,9 @@
#
set(PACKAGE_VERSION 1)
string(REPLACE "." ";" SLEIGH_VERSION_COMPONENTS "${PROJECT_VERSION}")
list(GET SLEIGH_VERSION_COMPONENTS 0 CPACK_PACKAGE_VERSION_MAJOR)
list(GET SLEIGH_VERSION_COMPONENTS 1 CPACK_PACKAGE_VERSION_MINOR)
list(GET SLEIGH_VERSION_COMPONENTS 2 CPACK_PACKAGE_VERSION_PATCH)
if("${SLEIGH_GHIDRA_RELEASE_TYPE}" STREQUAL "HEAD")
set(PACKAGE_VERSION "DEV.${ghidra_short_commit}")
endif()
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "SLEIGH was designed for the GHIDRA reverse engineering platform and is used to describe microprocessors with enough detail to facilitate two major components of GHIDRA, the disassembly and decompilation engines.")
set(CPACK_PACKAGE_NAME "sleigh")
View File
@@ -0,0 +1,53 @@
From d0b7efa848938b880332a729629c31a724dbf855 Mon Sep 17 00:00:00 2001
From: Eric Kilmer <eric.d.kilmer@gmail.com>
Date: Mon, 1 Nov 2021 17:10:18 -0400
Subject: [PATCH] Fix arg parsing in sleigh C++ test runner
---
Ghidra/Features/Decompiler/src/decompile/cpp/test.cc | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/test.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/test.cc
index e81f2564a..7c5557158 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/test.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/test.cc
@@ -85,7 +85,7 @@ int main(int argc, char **argv) {
set<string> dataTestNames;
string dirname("../datatests");
string sleighdirname("../../../../../../..");
- if (argc > 0) {
+ while (argc > 0) {
string command(argv[0]);
if (command == "-path") {
dirname = argv[1];
@@ -109,21 +109,23 @@ int main(int argc, char **argv) {
argv += 1;
argc -= 1;
}
- }
- if (argc > 0) {
- string command(argv[0]);
- if (command == "unittests") {
+ else if (command == "unittests") {
runUnitTests = true;
runDataTests = false; // Run only unit tests
unitTestNames.insert(argv + 1,argv + argc);
+ argv += 1;
+ argc -=1;
}
else if (command == "datatests") {
runUnitTests = false; // Run only data-tests
runDataTests = true;
dataTestNames.insert(argv + 1,argv + argc);
+ argv += 1;
+ argc -=1;
}
else {
cout << "USAGE: ghidra_test [-path <datatestdir>] [[unittests|datatests] [testname1 testname2 ...]]" << endl;
+ return -1;
}
}
startDecompilerLibrary(sleighdirname.c_str());
--
2.33.1
+12
View File
@@ -0,0 +1,12 @@
# Ghidra Patches
This directory contains small patches that should not affect any deployed Ghidra sleigh functionality from its original intent.
These patches primarily support packaging and testing, or fixing critical issues that prevent building for one reason or another.
The two directories are detailed below:
* [`stable`](./stable) --- Patches applied to the officially released _stable_ version of Ghidra.
* [`HEAD`](./HEAD) --- Patches applied to Ghidra's newer _HEAD_ commit (as listed in [`../src/setup-ghidra-source.cmake`](../src/setup-ghidra-source.cmake) file).
See the [`../src/README.md`](../src/README.md) for more details on how these patches are used/applied.
View File
+122
View File
@@ -0,0 +1,122 @@
set(spec_file_list
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/6502/data/languages/6502.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/6502/data/languages/65c02.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/68000/data/languages/68020.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/68000/data/languages/68030.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/68000/data/languages/68040.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/68000/data/languages/coldfire.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/6805/data/languages/6805.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/6805/data/languages/6809.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8048/data/languages/8048.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8051/data/languages/80251.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8051/data/languages/80390.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8051/data/languages/8051.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8051/data/languages/mx51.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8085/data/languages/8085.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/AARCH64/data/languages/AARCH64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/AARCH64/data/languages/AARCH64BE.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM4_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM4_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM4t_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM4t_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM5_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM5_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM5t_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM5t_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM6_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM6_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM7_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM7_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr32a.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8e.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8eind.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8xmega.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/CP1600/data/languages/CP1600.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/CR16/data/languages/CR16B.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/CR16/data/languages/CR16C.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/DATA/data/languages/data-be-64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/DATA/data/languages/data-le-64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Dalvik/data/languages/Dalvik_Base.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Dalvik/data/languages/Dalvik_DEX_Android10.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Dalvik/data/languages/Dalvik_DEX_Android11.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Dalvik/data/languages/Dalvik_DEX_KitKat.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Dalvik/data/languages/Dalvik_DEX_Lollipop.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Dalvik/data/languages/Dalvik_DEX_Marshmallow.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Dalvik/data/languages/Dalvik_DEX_Nougat.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Dalvik/data/languages/Dalvik_DEX_Oreo.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Dalvik/data/languages/Dalvik_DEX_Pie.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Dalvik/data/languages/Dalvik_ODEX_KitKat.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS08/data/languages/HC05.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS08/data/languages/HC08.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS08/data/languages/HCS08.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS12/data/languages/HCS12.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/JVM/data/languages/JVM.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/M8C/data/languages/m8c.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MCS96/data/languages/MCS96.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips32R6be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips32R6le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips32be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips32le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips64be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips64le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PA-RISC/data/languages/pa-risc32be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/PIC24E.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/PIC24F.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/PIC24H.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/dsPIC30F.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/dsPIC33C.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/dsPIC33E.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/dsPIC33F.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic12c5xx.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic16.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic16c5x.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic16f.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic17c7xx.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic18.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_4xx_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_4xx_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_quicciii_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_quicciii_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_altivec_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_altivec_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_altivec_vle_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_vle_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/RISCV/data/languages/riscv.ilp32d.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/RISCV/data/languages/riscv.lp64d.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Sparc/data/languages/SparcV9_32.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Sparc/data/languages/SparcV9_64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/SuperH/data/languages/sh-1.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/SuperH/data/languages/sh-2.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/SuperH/data/languages/sh-2a.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/SuperH4/data/languages/SuperH4_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/SuperH4/data/languages/SuperH4_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/TI_MSP430/data/languages/TI_MSP430.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/TI_MSP430/data/languages/TI_MSP430X.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy64_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy64_be_harvard.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy64_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_be_posStack.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_builder_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_builder_be_align2.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_builder_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_builder_le_align2.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_wsz_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_wsz_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/V850/data/languages/V850.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Z80/data/languages/z180.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Z80/data/languages/z80.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/tricore/data/languages/tricore.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/x86/data/languages/x86-64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/x86/data/languages/x86.slaspec"
)
+112
View File
@@ -0,0 +1,112 @@
set(spec_file_list
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/6502/data/languages/6502.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/68000/data/languages/68020.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/68000/data/languages/68030.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/68000/data/languages/68040.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/68000/data/languages/coldfire.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/6805/data/languages/6805.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/6805/data/languages/6809.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8048/data/languages/8048.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8051/data/languages/80251.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8051/data/languages/80390.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8051/data/languages/8051.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8051/data/languages/mx51.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/8085/data/languages/8085.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/AARCH64/data/languages/AARCH64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/AARCH64/data/languages/AARCH64BE.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM4_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM4_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM4t_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM4t_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM5_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM5_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM5t_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM5t_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM6_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM6_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM7_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM7_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr32a.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8e.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8eind.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8xmega.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/CP1600/data/languages/CP1600.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/CR16/data/languages/CR16B.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/CR16/data/languages/CR16C.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/DATA/data/languages/data-be-64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/DATA/data/languages/data-le-64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Dalvik/data/languages/Dalvik.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS08/data/languages/HC05.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS08/data/languages/HC08.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS08/data/languages/HCS08.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS12/data/languages/HCS12.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/JVM/data/languages/JVM.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/M8C/data/languages/m8c.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MCS96/data/languages/MCS96.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips32R6be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips32R6le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips32be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips32le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips64be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MIPS/data/languages/mips64le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PA-RISC/data/languages/pa-risc32be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/PIC24E.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/PIC24F.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/PIC24H.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/dsPIC30F.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/dsPIC33C.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/dsPIC33E.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/dsPIC33F.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic12c5xx.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic16.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic16c5x.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic16f.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic17c7xx.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PIC/data/languages/pic18.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_4xx_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_4xx_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_quicciii_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_quicciii_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_altivec_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_altivec_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_altivec_vle_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_isa_vle_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_64_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/RISCV/data/languages/riscv.ilp32d.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/RISCV/data/languages/riscv.lp64d.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Sparc/data/languages/SparcV9_32.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Sparc/data/languages/SparcV9_64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/SuperH/data/languages/sh-1.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/SuperH/data/languages/sh-2.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/SuperH/data/languages/sh-2a.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/SuperH4/data/languages/SuperH4_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/SuperH4/data/languages/SuperH4_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/TI_MSP430/data/languages/TI_MSP430.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/TI_MSP430/data/languages/TI_MSP430X.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy64_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy64_be_harvard.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy64_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_be_posStack.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_builder_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_builder_be_align2.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_builder_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_builder_le_align2.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_wsz_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_wsz_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/V850/data/languages/V850.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Z80/data/languages/z180.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Z80/data/languages/z80.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/tricore/data/languages/tricore.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/x86/data/languages/x86-64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/x86/data/languages/x86.slaspec"
)
Submodule src deleted from 5b07797cb8
+107
View File
@@ -0,0 +1,107 @@
# Ghidra Source code
This project uses CMake's [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.html) module to set up the Ghidra source tree. This means we can apply [patches](../patches) that live only in this repo for small changes to features like packaging or running tests.
By default, CMake pulls a stable version of Ghidra. You may use a more recent commit by specifying `-DSLEIGH_GHIDRA_RELEASE_TYPE=HEAD` during CMake configuration.
See the `SLEIGH_GHIDRA_*` CMake cache variable comments for more details on how to customize your Ghidra source checkout.
## Advanced Usage Notes
Always reference the [CMake Documentation](https://cmake.org/cmake/help/latest/) for explanation of features and cache variable usages/effects.
### Using your own Ghidra checkout
This method is useful for developing new features on top of the latest commits in Ghidra's default branch. If the commit(s) at the tip of Ghidra's default branch are not supported by this repo, we welcome pull requests to update support and pin that commit.
**Arbitrary Ghidra checkouts are not officially supported.**
If you want to use your own Ghidra source checkout, then set the following during CMake configuration:
* `-DSLEIGH_GHIDRA_RELEASE_TYPE=HEAD` if using commits on Ghidra's default branch (`master`) or any branch that may be incompatible with the current stable version.
* `-DFETCHCONTENT_SOURCE_DIR_GHIDRASOURCE=<path to your own Ghidra source>`. Remember, no existing [patches](../patches/HEAD) will be applied to your own source directory.
```bash
git clone https://github.com/NationalSecurityAgency/ghidra src/ghidra
cmake -B build-dev-head -S . \
-DSLEIGH_GHIDRA_RELEASE_TYPE=HEAD \
-DFETCHCONTENT_SOURCE_DIR_GHIDRASOURCE="$(pwd)/src/ghidra"
```
### Reusing Downloaded Ghidra Source
If you want to share a single Ghidra source checkout/clone for multiple build directories, the [_FetchContent Base Directory_](https://cmake.org/cmake/help/latest/module/FetchContent.html#variable:FETCHCONTENT_BASE_DIR) (`FETCHCONTENT_BASE_DIR`) should encode the build generator name and be located outside of the build directory (the name would look something like `cmake_fc_ghidra_${SLEIGH_GHIDRA_RELEASE_TYPE}_${CMAKE_GENERATOR}`).
Initially, this means that every new build generator used for building the project will have to re-download the ghidra source tree, but any subsequent run with an already-initialize generator should be faster and skip the download.
```bash
$ cmake -B build-release -S . -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DFETCHCONTENT_BASE_DIR=./src/cmake_fc_ghidra_stable_Ninja
-- Using Ghidra version 10.0.4 at commit 5b07797
-- Populating ghidrasource
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/me/sleigh/src/cmake_fc_ghidra_stable_Ninja/ghidrasource-subbuild
[1/9] Creating directories for 'ghidrasource-populate'
[1/9] Performing download step (git clone) for 'ghidrasource-populate'
Cloning into 'ghidrasource-src'...
remote: Enumerating objects: 129964, done.
remote: Counting objects: 100% (4238/4238), done.
remote: Compressing objects: 100% (1889/1889), done.
remote: Total 129964 (delta 2078), reused 3993 (delta 2038), pack-reused 125726
Receiving objects: 100% (129964/129964), 172.50 MiB | 15.10 MiB/s, done.
Resolving deltas: 100% (79637/79637), done.
HEAD is now at 5b07797cb Updated 10.0.4 Change History
[2/9] Performing update step for 'ghidrasource-populate'
[4/9] No patch step for 'ghidrasource-populate'
[5/9] No configure step for 'ghidrasource-populate'
[6/9] No build step for 'ghidrasource-populate'
[7/9] No install step for 'ghidrasource-populate'
[8/9] No test step for 'ghidrasource-populate'
[9/9] Completed 'ghidrasource-populate'
-- Ghidra source located at '/Users/me/sleigh/src/cmake_fc_ghidra_stable_Ninja/ghidrasource-src'
-- The C compiler identification is AppleClang 13.0.0.13000029
-- The CXX compiler identification is AppleClang 13.0.0.13000029
...
$ cmake -B build-debug -S . -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DFETCHCONTENT_BASE_DIR=./src/cmake_fc_ghidra_stable_Ninja
-- Using Ghidra version 10.0.4 at commit 5b07797
-- Populating ghidrasource
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/me/sleigh/src/cmake_fc_ghidra_stable_Ninja/ghidrasource-subbuild
[0/7] Performing update step for 'ghidrasource-populate'
[2/7] No patch step for 'ghidrasource-populate'
[3/7] No configure step for 'ghidrasource-populate'
[4/7] No build step for 'ghidrasource-populate'
[5/7] No install step for 'ghidrasource-populate'
[6/7] No test step for 'ghidrasource-populate'
[7/7] Completed 'ghidrasource-populate'
-- Ghidra source located at '/Users/me/sleigh/src/cmake_fc_ghidra_stable_Ninja/ghidrasource-src'
-- The C compiler identification is AppleClang 13.0.0.13000029
-- The CXX compiler identification is AppleClang 13.0.0.13000029
...
```
The above also works when using `HEAD` commit of Ghidra.
```bash
$ cmake -B build-head-release -S . -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DSLEIGH_GHIDRA_RELEASE_TYPE=HEAD \
-DFETCHCONTENT_BASE_DIR=./src/cmake_fc_ghidra_HEAD_Ninja
...
$ cmake -B build-head-debug -S . -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DSLEIGH_GHIDRA_RELEASE_TYPE=HEAD \
-DFETCHCONTENT_BASE_DIR=./src/cmake_fc_ghidra_HEAD_Ninja
...
```
This setup is nice if you want to clear the project build directories but don't want to re-download Ghidra source code every time. However, to be safe, you should remove these directories if you change the Ghidra git commit SHA of stable or HEAD.
+54
View File
@@ -0,0 +1,54 @@
# ---- Setup Ghidra Source code ----
# Set up Ghidra repo human-readable version settings
set(SLEIGH_GHIDRA_RELEASE_TYPE "stable" CACHE
STRING "Ghidra release type to use. 'HEAD' is used for active development purposes."
)
# This is just helper for CMake UIs. CMake does not enforce that the value matches one of those listed.
set_property(CACHE SLEIGH_GHIDRA_RELEASE_TYPE PROPERTY STRINGS "stable" "HEAD")
# **** Setup pinned git info ****
# Ghidra pinned stable version commit
set(ghidra_version "10.0.4")
set(ghidra_git_tag "5b07797cb859d8801ca3a1e08bda1321ca3ce002")
# pinned stable patches list
set(ghidra_patches "")
# Ghidra pinned commits used for pinning last known working HEAD commit
if("${SLEIGH_GHIDRA_RELEASE_TYPE}" STREQUAL HEAD)
# TODO: Try to remember to look at Ghidra/application.properties
# TODO: CMake only likes numeric characters in the version string....
set(ghidra_version "10.1")
set(ghidra_git_tag "55b8fcf7d4aeaca37ffb5c947340915d69c84224")
set(ghidra_patches
PATCH_COMMAND git am --ignore-space-change --ignore-whitespace --no-gpg-sign
"${CMAKE_CURRENT_SOURCE_DIR}/patches/HEAD/0001-Fix-arg-parsing-in-sleigh-C-test-runner.patch"
)
endif()
string(SUBSTRING "${ghidra_git_tag}" 0 7 ghidra_short_commit)
message(STATUS "Using Ghidra version ${ghidra_version} at commit ${ghidra_short_commit}")
include(FetchContent)
# Verbose fetch content updates
set(FETCHCONTENT_QUIET OFF)
# Write out source directory with identifiable version info
FetchContent_Declare(GhidraSource
GIT_REPOSITORY https://github.com/NationalSecurityAgency/ghidra
GIT_TAG ${ghidra_git_tag}
GIT_PROGRESS TRUE
${ghidra_patches}
)
FetchContent_MakeAvailable(GhidraSource)
message(STATUS "Ghidra source located at '${ghidrasource_SOURCE_DIR}'")
# Sanity check on Ghidra source code checkout
set(library_root "${ghidrasource_SOURCE_DIR}/Ghidra/Features/Decompiler/src/decompile/cpp")
if(NOT EXISTS "${library_root}/sleigh.hh")
message(FATAL_ERROR "The Ghidra source directory has not been initialized correctly. Could not find '${library_root}'")
endif()