diff options
author | Tony Theodore <tonyt@logyst.com> | 2018-03-26 08:35:36 (GMT) |
---|---|---|
committer | Tony Theodore <tonyt@logyst.com> | 2018-03-26 12:58:43 (GMT) |
commit | 29280b8ba931814ce083f9b8fa3912e4ab252462 (patch) | |
tree | eb4dfd73484d1fefa2fc6b2f373b56cc21e72eaf /src | |
parent | 063cd91e190686bd1ce0d4232b9351baddf4230d (diff) | |
download | mxe-29280b8ba931814ce083f9b8fa3912e4ab252462.zip mxe-29280b8ba931814ce083f9b8fa3912e4ab252462.tar.gz mxe-29280b8ba931814ce083f9b8fa3912e4ab252462.tar.bz2 |
add pkgs pe-parse and pe-util (for peldd binary)
Diffstat (limited to 'src')
-rw-r--r-- | src/pe-parse-1-fixes.patch | 186 | ||||
-rw-r--r-- | src/pe-parse.mk | 29 | ||||
-rw-r--r-- | src/pe-util.mk | 48 |
3 files changed, 263 insertions, 0 deletions
diff --git a/src/pe-parse-1-fixes.patch b/src/pe-parse-1-fixes.patch new file mode 100644 index 0000000..aa4ca90 --- /dev/null +++ b/src/pe-parse-1-fixes.patch @@ -0,0 +1,186 @@ +This file is part of MXE. See LICENSE.md for licensing information. + +Contains ad hoc patches for cross building. + +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Tony Theodore <tonyt@logyst.com> +Date: Mon, 26 Mar 2018 18:25:08 +1100 +Subject: [PATCH 1/3] mingw-w64 fixes + + - `WIN32` is user-defined, `_WIN32` is pre-defined by toolchain[1] + - use gcc options instead of MSVC + - `-fPIC` is redundant on mingw + - don't error on `old-style-cast` + +[1] https://msdn.microsoft.com/en-us/library/b0084kay.aspx + +diff --git a/cmake/compilation_flags.cmake b/cmake/compilation_flags.cmake +index 1111111..2222222 100644 +--- a/cmake/compilation_flags.cmake ++++ b/cmake/compilation_flags.cmake +@@ -1,4 +1,4 @@ +-if (WIN32) ++if (MSVC) + list(APPEND DEFAULT_CXX_FLAGS /W4 /analyze) + + if (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") +@@ -13,8 +13,13 @@ else () + set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_EXTENSIONS OFF) + ++ if (MINGW) ++ list(APPEND DEFAULT_CXX_FLAGS -Wno-error=old-style-cast) ++ else () ++ list(APPEND DEFAULT_CXX_FLAGS -fPIC) ++ endif () ++ + list(APPEND DEFAULT_CXX_FLAGS +- -fPIC + + -pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization + -Wformat=2 -Winit-self -Wlong-long -Wmissing-declarations -Wmissing-include-dirs -Wcomment +diff --git a/examples/peaddrconv/CMakeLists.txt b/examples/peaddrconv/CMakeLists.txt +index 1111111..2222222 100644 +--- a/examples/peaddrconv/CMakeLists.txt ++++ b/examples/peaddrconv/CMakeLists.txt +@@ -1,7 +1,7 @@ + cmake_minimum_required(VERSION 3.1) + project(peaddrconv) + +-if (WIN32) ++if (MSVC) + list(APPEND PEADDRCONV_CXXFLAGS /W4 /analyze) + + if (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") +diff --git a/pe-parser-library/src/buffer.cpp b/pe-parser-library/src/buffer.cpp +index 1111111..2222222 100644 +--- a/pe-parser-library/src/buffer.cpp ++++ b/pe-parser-library/src/buffer.cpp +@@ -28,7 +28,7 @@ THE SOFTWARE. + // keep this header above "windows.h" because it contains many types + #include <parser-library/parse.h> + +-#ifdef WIN32 ++#ifdef _WIN32 + + #define WIN32_LEAN_AND_MEAN + #define VC_EXTRALEAN +@@ -76,7 +76,7 @@ extern std::uint32_t err; + extern std::string err_loc; + + struct buffer_detail { +-#ifdef WIN32 ++#ifdef _WIN32 + HANDLE file; + HANDLE sec; + #else +@@ -157,7 +157,7 @@ bool readQword(bounded_buffer *b, std::uint32_t offset, std::uint64_t &out) { + } + + bounded_buffer *readFileToFileBuffer(const char *filePath) { +-#ifdef WIN32 ++#ifdef _WIN32 + HANDLE h = CreateFileA(filePath, + GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, +@@ -205,7 +205,7 @@ bounded_buffer *readFileToFileBuffer(const char *filePath) { + p->detail = d; + + // only where we have mmap / open / etc +-#ifdef WIN32 ++#ifdef _WIN32 + p->detail->file = h; + + HANDLE hMap = CreateFileMapping(h, nullptr, PAGE_READONLY, 0, 0, nullptr); +@@ -296,7 +296,7 @@ void deleteBuffer(bounded_buffer *b) { + } + + if (!b->copy) { +-#ifdef WIN32 ++#ifdef _WIN32 + UnmapViewOfFile(b->buf); + CloseHandle(b->detail->sec); + CloseHandle(b->detail->file); + +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Tony Theodore <tonyt@logyst.com> +Date: Mon, 26 Mar 2018 18:31:58 +1100 +Subject: [PATCH 2/3] add option to build shared libs + + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1111111..2222222 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -13,8 +13,10 @@ endif () + include(cmake/compilation_flags.cmake) + list(APPEND GLOBAL_CXXFLAGS ${DEFAULT_CXX_FLAGS}) + ++option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF) + add_subdirectory(pe-parser-library) + add_subdirectory(dump-pe) + + message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") ++message(STATUS "Build Shared: ${BUILD_SHARED_LIBS}") + message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}") +diff --git a/pe-parser-library/CMakeLists.txt b/pe-parser-library/CMakeLists.txt +index 1111111..2222222 100644 +--- a/pe-parser-library/CMakeLists.txt ++++ b/pe-parser-library/CMakeLists.txt +@@ -11,10 +11,14 @@ list(APPEND PEPARSERLIB_SOURCEFILES + src/parse.cpp + ) + +-add_library(${PROJECT_NAME} STATIC ${PEPARSERLIB_SOURCEFILES}) ++add_library(${PROJECT_NAME} ${PEPARSERLIB_SOURCEFILES}) + target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) + target_compile_options(${PROJECT_NAME} PRIVATE ${GLOBAL_CXXFLAGS}) + +-install(TARGETS ${PROJECT_NAME} DESTINATION "lib") ++install(TARGETS ${PROJECT_NAME} ++ RUNTIME DESTINATION "bin" ++ LIBRARY DESTINATION "lib" ++ ARCHIVE DESTINATION "lib" ++) + install(FILES "cmake/peparse-config.cmake" DESTINATION "lib/cmake/peparse") + install(DIRECTORY "include/parser-library" DESTINATION "include") +diff --git a/pe-parser-library/cmake/peparse-config.cmake b/pe-parser-library/cmake/peparse-config.cmake +index 1111111..2222222 100644 +--- a/pe-parser-library/cmake/peparse-config.cmake ++++ b/pe-parser-library/cmake/peparse-config.cmake +@@ -1,5 +1,5 @@ + find_path(PEPARSE_INCLUDE_DIR "parser-library/parse.h") +-find_library(PEPARSE_LIBRARIES NAMES "libpe-parser-library.a") ++find_library(PEPARSE_LIBRARIES NAMES "libpe-parser-library") + + include(FindPackageHandleStandardArgs) +-find_package_handle_standard_args(libproxy DEFAULT_MSG PEPARSE_INCLUDE_DIR PEPARSE_LIBRARIES) ++find_package_handle_standard_args(peparse DEFAULT_MSG PEPARSE_INCLUDE_DIR PEPARSE_LIBRARIES) + +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Tony Theodore <tonyt@logyst.com> +Date: Mon, 26 Mar 2018 18:32:23 +1100 +Subject: [PATCH 3/3] add option to disable example + + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1111111..2222222 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -14,9 +14,15 @@ include(cmake/compilation_flags.cmake) + list(APPEND GLOBAL_CXXFLAGS ${DEFAULT_CXX_FLAGS}) + + option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF) ++option(BUILD_EXAMPLES "Build Examples" ON) ++ + add_subdirectory(pe-parser-library) +-add_subdirectory(dump-pe) ++ ++if (BUILD_EXAMPLES) ++ add_subdirectory(dump-pe) ++endif () + + message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") + message(STATUS "Build Shared: ${BUILD_SHARED_LIBS}") ++message(STATUS "Build Examples: ${BUILD_EXAMPLES}") + message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}") diff --git a/src/pe-parse.mk b/src/pe-parse.mk new file mode 100644 index 0000000..2257e29 --- /dev/null +++ b/src/pe-parse.mk @@ -0,0 +1,29 @@ +# This file is part of MXE. See LICENSE.md for licensing information. + +PKG := pe-parse +$(PKG)_WEBSITE := https://github.com/trailofbits/pe-parse +$(PKG)_DESCR := Principled, lightweight C/C++ PE parser +$(PKG)_IGNORE := +$(PKG)_VERSION := 752f526 +$(PKG)_CHECKSUM := 0a8733fa5bb7e4a077237c869c55b3e5d185f93c7c7d48664f2ebeead1091b47 +$(PKG)_GH_CONF := trailofbits/pe-parse/branches/master +$(PKG)_TARGETS := $(BUILD) $(MXE_TARGETS) +$(PKG)_DEPS := cc + +# unpack in pe-util for native and cross build +$(PKG)_DEPS_$(BUILD) := +$(PKG)_BUILD_$(BUILD) := + +define $(PKG)_BUILD + # build and install the cross-library + cd '$(BUILD_DIR)' && $(TARGET)-cmake '$(SOURCE_DIR)' \ + -DBUILD_EXAMPLES=OFF + $(MAKE) -C '$(BUILD_DIR)' -j '$(JOBS)' + $(MAKE) -C '$(BUILD_DIR)' -j 1 install + + # test cmake find_package() example + mkdir '$(BUILD_DIR).cmake' + cd '$(BUILD_DIR).cmake' && $(TARGET)-cmake '$(SOURCE_DIR)/examples/peaddrconv' + $(MAKE) -C '$(BUILD_DIR).cmake' -j '$(JOBS)' + $(INSTALL) -m755 '$(BUILD_DIR).cmake/peaddrconv.exe' '$(PREFIX)/$(TARGET)/bin/test-$(PKG).exe' +endef diff --git a/src/pe-util.mk b/src/pe-util.mk new file mode 100644 index 0000000..221909f --- /dev/null +++ b/src/pe-util.mk @@ -0,0 +1,48 @@ +# This file is part of MXE. See LICENSE.md for licensing information. + +PKG := pe-util +$(PKG)_WEBSITE := https://github.com/gsauthof/pe-util +$(PKG)_DESCR := List shared object dependencies of a portable executable (PE) +$(PKG)_IGNORE := +$(PKG)_VERSION := 04f9475 +$(PKG)_CHECKSUM := d3f9f713fa9af3d43d3a25b803525752ac75353b2da343af0b82a4fcd318b78a +$(PKG)_GH_CONF := gsauthof/pe-util/branches/master +$(PKG)_TARGETS := $(BUILD) $(MXE_TARGETS) +$(PKG)_DEPS := cc boost pe-parse +$(PKG)_DEPS_$(BUILD) := boost cmake pe-parse + +define $(PKG)_PRE_CONFIGURE + # expects pe-parse in source tree as git submodule + $(call PREPARE_PKG_SOURCE,pe-parse,$(BUILD_DIR)) + rm -rf '$(SOURCE_DIR)/pe-parse' + mv '$(BUILD_DIR)/$(pe-parse_SUBDIR)' '$(SOURCE_DIR)/pe-parse' +endef + +define $(PKG)_BUILD + $($(PKG)_PRE_CONFIGURE) + # install peldd.exe - handy utility (even for static) + cd '$(BUILD_DIR)' && $(TARGET)-cmake '$(SOURCE_DIR)' + $(MAKE) -C '$(BUILD_DIR)' -j '$(JOBS)' + $(MAKE) -C '$(BUILD_DIR)' -j 1 install + + # install prefixed wrapper with default paths + $(if $(BUILD_SHARED), + (echo '#!/bin/sh'; \ + echo 'exec "$(PREFIX)/$(BUILD)/bin/peldd" \ + --clear-path \ + --path "$(PREFIX)/$(TARGET)/bin" \ + "$$@"') \ + > '$(PREFIX)/bin/$(TARGET)-peldd' + chmod 0755 '$(PREFIX)/bin/$(TARGET)-peldd' + ) +endef + +define $(PKG)_BUILD_$(BUILD) + $($(PKG)_PRE_CONFIGURE) + # build and install the binary + cd '$(BUILD_DIR)' && cmake '$(SOURCE_DIR)' \ + -DCMAKE_INSTALL_PREFIX='$(PREFIX)/$(TARGET)' \ + -DCMAKE_CXX_FLAGS='-I$(PREFIX)/$(TARGET)/include' + $(MAKE) -C '$(BUILD_DIR)' -j '$(JOBS)' + $(MAKE) -C '$(BUILD_DIR)' -j 1 install +endef |