Skip to content

Commit

Permalink
Merge pull request #151 from c3rb3ru5d3d53c/130-cmake-deps
Browse files Browse the repository at this point in the history
130 Find Packages
c3rb3ru5d3d53c authored Mar 2, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
2 parents 80055a5 + 763464c commit 8e2de3f
Showing 9 changed files with 167 additions and 150 deletions.
7 changes: 6 additions & 1 deletion .github/workflows/cmake.yml
Original file line number Diff line number Diff line change
@@ -57,10 +57,15 @@ jobs:
with:
version: 9

- name: Build Deps
run: |
cmake -B deps/build -S deps
cmake --build deps/build --config ${{ matrix.build-type }} --parallel 4
- name: Build
run: |
cmake -B build ${{ matrix.extra-cmake-flags }}
cmake --build build --config ${{ matrix.build-type }} --parallel
cmake --build build --config ${{ matrix.build-type }} --parallel 4
cmake --install build --prefix build/install --config ${{ matrix.build-type }}
# - name: Test
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
docs
*~
build/**
deps/build/**
dist/**
samples/**
windows/**
144 changes: 3 additions & 141 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -37,155 +37,17 @@ if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
endif()

if(MSVC)
add_definitions(-DNOMINMAX)
# HACK: be compatible with the ExternalProject's that are built in Release mode
string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
endif()

include(ExternalProject)
include(ProcessorCount)
ProcessorCount(N)

if(CMAKE_GENERATOR MATCHES "Visual Studio")
# https://stackoverflow.com/a/70102570/1806760
set(EXTERNAL_BUILD_COMMAND "")
else()
set(EXTERNAL_BUILD_COMMAND cmake --build . --parallel ${N})
endif()

file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/tests/tests.py
DESTINATION ${CMAKE_BINARY_DIR}
)

set(CAPSTONE_ROOT "${CMAKE_BINARY_DIR}/capstone/")
set(CAPSTONE_INCLUDE_DIRS "${CAPSTONE_ROOT}/include/")
set(CAPSTONE_GIT_URL "https://github.com/capstone-engine/capstone.git")
set(CAPSTONE_GIT_TAG "4.0.2")

ExternalProject_Add(
capstone
PREFIX "${CAPSTONE_ROOT}"
INSTALL_DIR "${CAPSTONE_ROOT}"
GIT_REPOSITORY "${CAPSTONE_GIT_URL}"
GIT_TAG "${CAPSTONE_GIT_TAG}"
GIT_SHALLOW ON
BUILD_COMMAND ${EXTERNAL_BUILD_COMMAND}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DCAPSTONE_BUILD_SHARED=OFF
-DCAPSTONE_BUILD_TESTS=OFF
-DCAPSTONE_MIPS_SUPPORT=OFF
-DCAPSTONE_ARM_SUPPORT=OFF
-DCAPSTONE_ARM64_SUPPORT=OFF
-DCAPSTONE_M68K_SUPPORT=OFF
-DCAPSTONE_TMS320C64X_SUPPORT=OFF
-DCAPSTONE_M680X_SUPPORT=OFF
-DCAPSTONE_EVM_SUPPORT=OFF
-DCAPSTONE_PPC_SUPPORT=OFF
-DCAPSTONE_SPARC_SUPPORT=OFF
-DCAPSTONE_SYSZ_SUPPORT=OFF
-DCAPSTONE_XCORE_SUPPORT=OFF
-DCAPSTONE_X86_SUPPORT=ON
-DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
-DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL}
-DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO}
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_FLAGS_MINSIZEREL=${CMAKE_CXX_FLAGS_MINSIZEREL}
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
)

add_library(capstone_static STATIC IMPORTED)
set_target_properties(capstone_static PROPERTIES
IMPORTED_LOCATION ${CAPSTONE_ROOT}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}capstone${CMAKE_STATIC_LIBRARY_SUFFIX}
)
add_dependencies(capstone_static capstone)
file(MAKE_DIRECTORY ${CAPSTONE_INCLUDE_DIRS})
target_include_directories(capstone_static INTERFACE ${CAPSTONE_INCLUDE_DIRS})

set(TLSH_GIT_URL "https://github.com/mrexodia/tlsh.git")
set(TLSH_ROOT "${CMAKE_BINARY_DIR}/tlsh/")
set(TLSH_INCLUDE_DIRS "${TLSH_ROOT}/src/tlsh/include/")
set(TLSH_GIT_TAG "24d5c0b7fa2ed4d77d9c5dd0c7e1cbf4cd31b42f")

set(TLSH_CMAKE_ARGS
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
)

ExternalProject_Add(
tlsh
PREFIX "${TLSH_ROOT}"
INSTALL_DIR "${TLSH_ROOT}"
GIT_REPOSITORY "${TLSH_GIT_URL}"
GIT_TAG "${TLSH_GIT_TAG}"
GIT_SHALLOW ON
BUILD_COMMAND ${EXTERNAL_BUILD_COMMAND}
CMAKE_ARGS ${TLSH_CMAKE_ARGS}
)

add_library(tlsh_static STATIC IMPORTED)
set_target_properties(
tlsh_static PROPERTIES IMPORTED_LOCATION
${TLSH_ROOT}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}tlsh${CMAKE_STATIC_LIBRARY_SUFFIX}
)
add_dependencies(tlsh_static tlsh)
if(WIN32)
target_compile_definitions(tlsh_static INTERFACE TLSH_WINDOWS)
endif()
file(MAKE_DIRECTORY ${TLSH_INCLUDE_DIRS})
target_include_directories(tlsh_static INTERFACE ${TLSH_INCLUDE_DIRS})

set(LIEF_PREFIX "${CMAKE_BINARY_DIR}/LIEF/")
set(LIEF_INSTALL_DIR "${LIEF_PREFIX}")
set(LIEF_INCLUDE_DIRS "${LIEF_PREFIX}/include/")
set(LIEF_GIT_URL "https://github.com/lief-project/LIEF.git")
set(LIEF_VERSION "0.12.2")

set(LIEF_CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DCMAKE_BUILD_TYPE=Release
-DLIEF_DOC=off
-DLIEF_PYTHON_API=off
-DLIEF_EXAMPLES=off
-DLIEF_PE=on
-DLIEF_ELF=on
-DLIEF_MACHO=off
-DLIEF_OAT=off
-DLIEF_DEX=off
-DLIEF_VDEX=off
-DLIEF_ART=off
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
)

ExternalProject_Add(LIEF
PREFIX ${LIEF_PREFIX}
GIT_REPOSITORY ${LIEF_GIT_URL}
GIT_TAG ${LIEF_VERSION}
BUILD_COMMAND ${EXTERNAL_BUILD_COMMAND}
INSTALL_DIR ${LIEF_INSTALL_DIR}
CMAKE_ARGS ${LIEF_CMAKE_ARGS}
)

add_library(lief_static STATIC IMPORTED)
set_target_properties(lief_static PROPERTIES
IMPORTED_LOCATION ${LIEF_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}LIEF${CMAKE_STATIC_LIBRARY_SUFFIX}
)
add_dependencies(lief_static LIEF)
file(MAKE_DIRECTORY ${LIEF_INCLUDE_DIRS})
target_include_directories(lief_static INTERFACE ${LIEF_INCLUDE_DIRS})
find_package(CAPSTONE REQUIRED)
find_package(TLSH REQUIRED)
find_package(LIEF REQUIRED)

add_library(binlex
src/args.cpp
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -50,6 +50,7 @@ uninstall:

clean:
rm -rf build/
rm -rf deps/build/
rm -rf dist/
rm -rf pybinlex.egg-info/
rm -f *.so
18 changes: 10 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -84,14 +84,15 @@ Once you have installed, cloned and changed your directory to the project direct

### From Source

If you want to compile and install via `make install` run the following commands:
If you want to compile and install use `cmake` with the following commands:

```bash
make threads=4
sudo make install
cmake -B deps/build -S deps
cmake --build deps/build --config Release --parallel 8
cmake -B build -DBUILD_PYTHON_BINDINGS=ON
cmake --build build --config Release --parallel 8

# Test your Install
binlex -m auto -i tests/elf/elf.x86
build/binlex -m auto -i tests/elf/elf.x86
```

### Binary Releases
@@ -109,9 +110,10 @@ Additionally, another option is to build Debian binary packages for and install
To build packages use `cpack`, which comes with `cmake`.

```bash
make threads=4
make pkg # builds binary packages
make dist # builds source packages
cmake -B deps/build -S deps
cmake --build deps/build --config Release --parallel 8
cmake -B build -DBUILD_PYTHON_BINDINGS=ON
cmake --build build --config Release --parallel 8
sudo apt install ./build/binlex_1.1.1_amd64.deb
binlex -m elf:x86 -i tests/elf/elf.x86
```
10 changes: 10 additions & 0 deletions cmake/FindCAPSTONE.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
set(CAPSTONE_ROOT "${CMAKE_SOURCE_DIR}/deps/build/capstone")
set(CAPSTONE_INCLUDE_DIRS "${CAPSTONE_ROOT}/include")

add_library(capstone_static STATIC IMPORTED)
set_target_properties(capstone_static PROPERTIES
IMPORTED_LOCATION ${CAPSTONE_ROOT}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}capstone${CMAKE_STATIC_LIBRARY_SUFFIX}
)
add_dependencies(capstone_static capstone)

target_include_directories(capstone_static INTERFACE ${CAPSTONE_INCLUDE_DIRS})
9 changes: 9 additions & 0 deletions cmake/FindLIEF.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
set(LIEF_PREFIX "${CMAKE_SOURCE_DIR}/deps/build/LIEF")
set(LIEF_INCLUDE_DIRS "${LIEF_PREFIX}/include")

add_library(lief_static STATIC IMPORTED)
set_target_properties(lief_static PROPERTIES
IMPORTED_LOCATION ${LIEF_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}LIEF${CMAKE_STATIC_LIBRARY_SUFFIX}
)
add_dependencies(lief_static LIEF)
target_include_directories(lief_static INTERFACE ${LIEF_INCLUDE_DIRS})
15 changes: 15 additions & 0 deletions cmake/FindTLSH.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
set(TLSH_ROOT "${CMAKE_SOURCE_DIR}/deps/build/tlsh")
set(TLSH_INCLUDE_DIRS "${TLSH_ROOT}/src/tlsh/include")

add_library(tlsh_static STATIC IMPORTED)
set_target_properties(
tlsh_static PROPERTIES IMPORTED_LOCATION
${TLSH_ROOT}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}tlsh${CMAKE_STATIC_LIBRARY_SUFFIX}
)
add_dependencies(tlsh_static tlsh)

target_include_directories(tlsh_static INTERFACE ${TLSH_INCLUDE_DIRS})

if(WIN32)
target_compile_definitions(tlsh_static INTERFACE TLSH_WINDOWS)
endif()
112 changes: 112 additions & 0 deletions deps/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
cmake_minimum_required(VERSION 3.5)

include(ExternalProject)

if(MSVC)
add_definitions(-DNOMINMAX)
# HACK: be compatible with the ExternalProject's that are built in Release mode
string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
endif()

set(CAPSTONE_ROOT "${CMAKE_BINARY_DIR}/capstone/")
set(CAPSTONE_INCLUDE_DIRS "${CAPSTONE_ROOT}/include/")
set(CAPSTONE_GIT_URL "https://github.com/capstone-engine/capstone.git")
set(CAPSTONE_GIT_TAG "4.0.2")

ExternalProject_Add(
capstone
PREFIX "${CAPSTONE_ROOT}"
INSTALL_DIR "${CAPSTONE_ROOT}"
GIT_REPOSITORY "${CAPSTONE_GIT_URL}"
GIT_TAG "${CAPSTONE_GIT_TAG}"
GIT_SHALLOW ON
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DCAPSTONE_BUILD_SHARED=OFF
-DCAPSTONE_BUILD_TESTS=OFF
-DCAPSTONE_MIPS_SUPPORT=OFF
-DCAPSTONE_ARM_SUPPORT=OFF
-DCAPSTONE_ARM64_SUPPORT=OFF
-DCAPSTONE_M68K_SUPPORT=OFF
-DCAPSTONE_TMS320C64X_SUPPORT=OFF
-DCAPSTONE_M680X_SUPPORT=OFF
-DCAPSTONE_EVM_SUPPORT=OFF
-DCAPSTONE_PPC_SUPPORT=OFF
-DCAPSTONE_SPARC_SUPPORT=OFF
-DCAPSTONE_SYSZ_SUPPORT=OFF
-DCAPSTONE_XCORE_SUPPORT=OFF
-DCAPSTONE_X86_SUPPORT=ON
-DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
-DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL}
-DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO}
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_FLAGS_MINSIZEREL=${CMAKE_CXX_FLAGS_MINSIZEREL}
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
)
file(MAKE_DIRECTORY ${CAPSTONE_INCLUDE_DIRS})

set(TLSH_GIT_URL "https://github.com/mrexodia/tlsh.git")
set(TLSH_ROOT "${CMAKE_BINARY_DIR}/tlsh")
set(TLSH_INCLUDE_DIRS "${TLSH_ROOT}/src/tlsh/include")
set(TLSH_GIT_TAG "24d5c0b7fa2ed4d77d9c5dd0c7e1cbf4cd31b42f")

set(TLSH_CMAKE_ARGS
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
)

ExternalProject_Add(
tlsh
PREFIX "${TLSH_ROOT}"
INSTALL_DIR "${TLSH_ROOT}"
GIT_REPOSITORY "${TLSH_GIT_URL}"
GIT_TAG "${TLSH_GIT_TAG}"
GIT_SHALLOW ON
CMAKE_ARGS ${TLSH_CMAKE_ARGS}
)

file(MAKE_DIRECTORY ${TLSH_INCLUDE_DIRS})

set(LIEF_PREFIX "${CMAKE_BINARY_DIR}/LIEF")
set(LIEF_INSTALL_DIR "${LIEF_PREFIX}")
set(LIEF_INCLUDE_DIRS "${LIEF_PREFIX}/include")
set(LIEF_GIT_URL "https://github.com/lief-project/LIEF.git")
set(LIEF_VERSION "0.12.2")

set(LIEF_CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DCMAKE_BUILD_TYPE=Release
-DLIEF_DOC=off
-DLIEF_PYTHON_API=off
-DLIEF_EXAMPLES=off
-DLIEF_PE=on
-DLIEF_ELF=on
-DLIEF_MACHO=off
-DLIEF_OAT=off
-DLIEF_DEX=off
-DLIEF_VDEX=off
-DLIEF_ART=off
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
)

ExternalProject_Add(LIEF
PREFIX ${LIEF_PREFIX}
GIT_REPOSITORY ${LIEF_GIT_URL}
GIT_TAG ${LIEF_VERSION}
INSTALL_DIR ${LIEF_INSTALL_DIR}
CMAKE_ARGS ${LIEF_CMAKE_ARGS}
)

file(MAKE_DIRECTORY ${LIEF_INCLUDE_DIRS})

0 comments on commit 8e2de3f

Please sign in to comment.