summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTony Theodore <tonyt@logyst.com>2018-03-26 08:35:36 (GMT)
committerTony Theodore <tonyt@logyst.com>2018-03-26 12:58:43 (GMT)
commit29280b8ba931814ce083f9b8fa3912e4ab252462 (patch)
treeeb4dfd73484d1fefa2fc6b2f373b56cc21e72eaf /src
parent063cd91e190686bd1ce0d4232b9351baddf4230d (diff)
downloadmxe-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.patch186
-rw-r--r--src/pe-parse.mk29
-rw-r--r--src/pe-util.mk48
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