Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[vcpkg baseline][libmem] Remove embedded llvm and use port dependency instead #43311

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
237 changes: 121 additions & 116 deletions ports/libmem/0001-CMakeLists.patch
Original file line number Diff line number Diff line change
@@ -1,116 +1,121 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 534057a..049805a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.22.1)

-include(ExternalProject)
+set(CMAKE_CXX_STANDARD 17)

project(libmem
LANGUAGES
@@ -49,6 +49,7 @@ message(STATUS
message(STATUS "CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}")
message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")

+if(0)
# External dependencies
set(EXTERNAL_DEPENDENCIES_DIR "${PROJECT_SOURCE_DIR}/external")
set(CAPSTONE_DIR "${EXTERNAL_DEPENDENCIES_DIR}/capstone")
@@ -67,6 +68,7 @@ add_library(keystone STATIC IMPORTED)
set_target_properties(keystone PROPERTIES IMPORTED_LOCATION ${KEYSTONE_IMPORT_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}keystone${CMAKE_STATIC_LIBRARY_SUFFIX})
# End of external dependencies

+endif()
set(LIBMEM_DIR "${PROJECT_SOURCE_DIR}")
set(LIBMEM_INC "${LIBMEM_DIR}/include")
set(INTERNAL_DIR "${LIBMEM_DIR}/internal")
@@ -89,24 +91,21 @@ elseif(${CMAKE_SYSTEM_NAME} STREQUAL FreeBSD)
endif()
file(GLOB LIBMEM_SRC ${LIBMEM_ARCH_SRC} "${LIBMEM_DIR}/src/freebsd/*.c" "${LIBMEM_DIR}/src/freebsd/ptrace/*.c" "${LIBMEM_DIR}/src/common/*.c" "${LIBMEM_DIR}/src/common/*.cpp" "${INTERNAL_DIR}/posixutils/*.c" "${INTERNAL_DIR}/elfutils/*.c" "${INTERNAL_DIR}/demangler/*.cpp")
endif()
+find_package(PkgConfig)
+pkg_check_modules(keystone REQUIRED keystone)
+find_package(capstone CONFIG REQUIRED)
set(LIBMEM_DEPS
- capstone
- keystone
- llvm
+ capstone::capstone
+ "${keystone_LINK_LIBRARIES}"
)
-
-if (LIBMEM_BUILD_STATIC)
- add_library(libmem STATIC ${LIBMEM_SRC})
-else()
- add_library(libmem SHARED ${LIBMEM_SRC})
-endif()
+file(GLOB_RECURSE LLVM_DEM_SRC "${LIBMEM_DIR}/external/llvm/lib/*.cpp")
+add_library(libmem ${LIBMEM_SRC} ${LLVM_DEM_SRC})
target_include_directories(libmem PRIVATE "${LIBMEM_DIR}/src" "${INTERNAL_DIR}" "${COMMON_DIR}")

include_directories(${PROJECT_SOURCE_DIR}
${LIBMEM_INC}
- ${CAPSTONE_INC}
- ${KEYSTONE_INC}
- ${LLVM_INC}
+ "${keystone_INCLUDE_DIRS}"
+ "${LIBMEM_DIR}/external/llvm/include"
)

if (LIBMEM_BUILD_TESTS)
@@ -116,10 +115,6 @@ endif()

set_target_properties(libmem PROPERTIES POSITION_INDEPENDENT_CODE True INCLUDES ${LIBMEM_INC})
target_compile_definitions(libmem PUBLIC LM_EXPORT)
-add_dependencies(libmem
- capstone-engine
- keystone-engine
-)

if(${CMAKE_SYSTEM_NAME} STREQUAL Windows OR ${CMAKE_SYSTEM_NAME} STREQUAL CYGWIN)
set(LIBMEM_DEPS
@@ -152,7 +147,7 @@ else()
endif()

target_link_libraries(libmem ${LIBMEM_DEPS})
-if(LIBMEM_BUILD_STATIC)
+if(0)
# Create a bundled static library containing all dependencies (to mimic the shared library behavior)
set_target_properties(libmem PROPERTIES OUTPUT_NAME "libmem_partial")
set(libmem_bundle_files "$<TARGET_FILE:libmem>")
@@ -193,7 +188,7 @@ if(LIBMEM_BUILD_STATIC)
endif()
endif()

-if(${CMAKE_SYSTEM_NAME} STREQUAL Windows OR ${CMAKE_SYSTEM_NAME} STREQUAL CYGWIN)
+if(0)
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL CYGWIN)
cmake_path(SET CMAKE_INSTALL_PREFIX "$ENV{ProgramFiles}")
else()
@@ -202,14 +197,17 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL Windows OR ${CMAKE_SYSTEM_NAME} STREQUAL CYGWIN
endif()
set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/libmem")
execute_process(COMMAND mkdir "${CMAKE_INSTALL_PREFIX}")
-else()
set(CMAKE_INSTALL_PREFIX "/usr")
endif()

-install(TARGETS libmem
- LIBRARY DESTINATION lib)
-
-install(TARGETS libmem
- RUNTIME DESTINATION lib)
-
install(DIRECTORY ${LIBMEM_INC}/libmem DESTINATION include)
+install(TARGETS libmem EXPORT libmem-target
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+ RUNTIME DESTINATION bin
+)
+install(EXPORT libmem-target NAMESPACE libmem:: DESTINATION "share/libmem")
+include(CMakePackageConfigHelpers)
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/libmem-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/libmem-config.cmake" @ONLY)
+write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/libmem-config-version.cmake" VERSION 5.0.4 COMPATIBILITY SameMajorVersion)
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libmem-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/libmem-config-version.cmake" DESTINATION "share/libmem")
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 534057a..049805a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.22.1)

-include(ExternalProject)
+set(CMAKE_CXX_STANDARD 17)

project(libmem
LANGUAGES
@@ -49,6 +49,7 @@ message(STATUS
message(STATUS "CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}")
message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")

+if(0)
# External dependencies
set(EXTERNAL_DEPENDENCIES_DIR "${PROJECT_SOURCE_DIR}/external")
set(CAPSTONE_DIR "${EXTERNAL_DEPENDENCIES_DIR}/capstone")
@@ -66,6 +67,7 @@ set_target_properties(capstone PROPERTIES IMPORTED_LOCATION ${CAPSTONE_IMPORT_DI
add_library(keystone STATIC IMPORTED)
set_target_properties(keystone PROPERTIES IMPORTED_LOCATION ${KEYSTONE_IMPORT_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}keystone${CMAKE_STATIC_LIBRARY_SUFFIX})
# End of external dependencies
+endif()

set(LIBMEM_DIR "${PROJECT_SOURCE_DIR}")
set(LIBMEM_INC "${LIBMEM_DIR}/include")
@@ -89,10 +91,17 @@ elseif(${CMAKE_SYSTEM_NAME} STREQUAL FreeBSD)
endif()
file(GLOB LIBMEM_SRC ${LIBMEM_ARCH_SRC} "${LIBMEM_DIR}/src/freebsd/*.c" "${LIBMEM_DIR}/src/freebsd/ptrace/*.c" "${LIBMEM_DIR}/src/common/*.c" "${LIBMEM_DIR}/src/common/*.cpp" "${INTERNAL_DIR}/posixutils/*.c" "${INTERNAL_DIR}/elfutils/*.c" "${INTERNAL_DIR}/demangler/*.cpp")
endif()
+find_package(PkgConfig)
+pkg_check_modules(keystone REQUIRED IMPORTED_TARGET keystone)
+find_package(capstone CONFIG REQUIRED)
+find_package(LLVM CONFIG REQUIRED)
+target_compile_definitions(LLVMDemangle INTERFACE ${LLVM_DEFINITIONS})
+target_include_directories(LLVMDemangle INTERFACE ${LLVM_INCLUDE_DIRS})
+
set(LIBMEM_DEPS
- capstone
- keystone
- llvm
+ capstone::capstone
+ PkgConfig::keystone
+ LLVMDemangle
)

if (LIBMEM_BUILD_STATIC)
@@ -104,9 +113,6 @@ target_include_directories(libmem PRIVATE "${LIBMEM_DIR}/src" "${INTERNAL_DIR}"

include_directories(${PROJECT_SOURCE_DIR}
${LIBMEM_INC}
- ${CAPSTONE_INC}
- ${KEYSTONE_INC}
- ${LLVM_INC}
)

if (LIBMEM_BUILD_TESTS)
@@ -116,10 +122,6 @@ endif()

set_target_properties(libmem PROPERTIES POSITION_INDEPENDENT_CODE True INCLUDES ${LIBMEM_INC})
target_compile_definitions(libmem PUBLIC LM_EXPORT)
-add_dependencies(libmem
- capstone-engine
- keystone-engine
-)

if(${CMAKE_SYSTEM_NAME} STREQUAL Windows OR ${CMAKE_SYSTEM_NAME} STREQUAL CYGWIN)
set(LIBMEM_DEPS
@@ -152,7 +154,7 @@ else()
endif()

target_link_libraries(libmem ${LIBMEM_DEPS})
-if(LIBMEM_BUILD_STATIC)
+if(0)
# Create a bundled static library containing all dependencies (to mimic the shared library behavior)
set_target_properties(libmem PROPERTIES OUTPUT_NAME "libmem_partial")
set(libmem_bundle_files "$<TARGET_FILE:libmem>")
@@ -193,7 +195,7 @@ if(LIBMEM_BUILD_STATIC)
endif()
endif()

-if(${CMAKE_SYSTEM_NAME} STREQUAL Windows OR ${CMAKE_SYSTEM_NAME} STREQUAL CYGWIN)
+if(0)
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL CYGWIN)
cmake_path(SET CMAKE_INSTALL_PREFIX "$ENV{ProgramFiles}")
else()
@@ -202,14 +204,25 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL Windows OR ${CMAKE_SYSTEM_NAME} STREQUAL CYGWIN
endif()
set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/libmem")
execute_process(COMMAND mkdir "${CMAKE_INSTALL_PREFIX}")
-else()
set(CMAKE_INSTALL_PREFIX "/usr")
endif()

-install(TARGETS libmem
- LIBRARY DESTINATION lib)
-
-install(TARGETS libmem
- RUNTIME DESTINATION lib)
-
install(DIRECTORY ${LIBMEM_INC}/libmem DESTINATION include)
+install(TARGETS libmem EXPORT libmem-targets
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+ RUNTIME DESTINATION bin
+)
+install(EXPORT libmem-targets NAMESPACE libmem:: DESTINATION "share/libmem")
+include(CMakePackageConfigHelpers)
+configure_package_config_file(
+ "${CMAKE_CURRENT_LIST_DIR}/libmem-config.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/libmem-config.cmake"
+ INSTALL_DESTINATION "share/libmem"
+)
+write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/libmem-config-version.cmake" VERSION 5.0.4 COMPATIBILITY SameMajorVersion)
+install(FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/libmem-config.cmake"
+ "${CMAKE_CURRENT_BINARY_DIR}/libmem-config-version.cmake"
+ DESTINATION "share/libmem"
+)
10 changes: 8 additions & 2 deletions ports/libmem/libmem-config.cmake.in
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)

find_dependency(capstone CONFIG)
include("${CMAKE_CURRENT_LIST_DIR}/libmem-target.cmake")
check_required_components(libmem)

find_dependency(PkgConfig)
pkg_check_modules(keystone REQUIRED IMPORTED_TARGET keystone)

find_dependency(LLVM CONFIG)

include("${CMAKE_CURRENT_LIST_DIR}/libmem-targets.cmake")
4 changes: 4 additions & 0 deletions ports/libmem/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,13 @@ vcpkg_from_github(
file(REMOVE "${SOURCE_PATH}/PreLoad.cmake")
file(COPY "${CMAKE_CURRENT_LIST_DIR}/libmem-config.cmake.in" DESTINATION "${SOURCE_PATH}")
vcpkg_find_acquire_program(PKGCONFIG)
string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" LIBMEM_BUILD_STATIC)
vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
-DLIBMEM_BUILD_TESTS=OFF
-DLIBMEM_DEEP_TESTS=OFF
-DLIBMEM_BUILD_STATIC=${LIBMEM_BUILD_STATIC}
"-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}"
)
vcpkg_cmake_install()
Expand Down
5 changes: 5 additions & 0 deletions ports/libmem/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
{
"name": "libmem",
"version": "5.0.4",
"port-version": 2,
"description": "Advanced Game Hacking Library for C, Modern C++, Rust and Python (Windows/Linux/FreeBSD) (Process/Memory Hacking) (Hooking/Detouring) (Cross Platform) (x86/x64/ARM/ARM64) (DLL/SO Injection) (Internal/External) (Assembler/Disassembler)",
"homepage": "https://github.com/rdbo/libmem",
"license": "AGPL-3.0-only",
"supports": "(!xbox & windows) | ((linux | freebsd) & (x86 | x64))",
"dependencies": [
"capstone",
"keystone",
{
"name": "llvm",
"default-features": false
},
{
"name": "vcpkg-cmake",
"host": true
Expand Down
4 changes: 3 additions & 1 deletion scripts/azure-pipelines/azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
fail()

# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
#
Expand All @@ -12,7 +14,7 @@ parameters:
- name: tripletPattern
displayName: 'Enable triplets which contain this substring'
type: string
default: '-'
default: '_'

jobs:
- template: windows/azure-pipelines.yml
Expand Down
12 changes: 10 additions & 2 deletions scripts/ci.baseline.txt
Original file line number Diff line number Diff line change
Expand Up @@ -536,8 +536,6 @@ libdc1394:arm64-android=fail
libflac:arm-neon-android=fail
libfreenect2:arm64-windows=fail
libfreenect2:arm64-windows-static-md=fail
# inline assembly requires more registers than available
libgcrypt:x64-android=fail
# error: call to undeclared function 'mktime_z'
libgnutls:arm-neon-android=fail
libgnutls:arm64-android=fail
Expand Down Expand Up @@ -579,6 +577,16 @@ libmariadb:x64-windows-static-md=skip
libmaxminddb:arm64-android=fail
libmaxminddb:arm-neon-android=fail
libmaxminddb:x64-android=fail
# libmem embedded lib llvm, fixing in https://github.com/microsoft/vcpkg/pull/43311
libmem:arm64-uwp =skip
libmem:arm64-windows =skip
libmem:arm64-windows-static-md =skip
libmem:x64-linux =skip
libmem:x64-uwp =skip
libmem:x64-windows =skip
libmem:x64-windows-static =skip
libmem:x64-windows-static-md =skip
libmem:x86-windows =skip
# libmesh installs tons of problematic files that conflict with other ports (boost, eigen, etc)
libmesh:x64-linux=skip
libmikmod:arm-neon-android=fail
Expand Down
2 changes: 1 addition & 1 deletion versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -4790,7 +4790,7 @@
},
"libmem": {
"baseline": "5.0.4",
"port-version": 0
"port-version": 2
},
"libmesh": {
"baseline": "1.5.0",
Expand Down
10 changes: 10 additions & 0 deletions versions/l-/libmem.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
{
"versions": [
{
"git-tree": "cf4ee8b8768d991b6fe6d62f4abebd2f24e05a62",
"version": "5.0.4",
"port-version": 2
},
{
"git-tree": "e2f84592970ebe7a3daee5da032c04020cff2496",
"version": "5.0.4",
"port-version": 1
},
{
"git-tree": "1f851ca1aa9ecd0a88c38d20b44a6b09b3ce0d9f",
"version": "5.0.4",
Expand Down