From 041b5b850472bb99f57e8d2bcd6e52b74bd89cb6 Mon Sep 17 00:00:00 2001 From: CLARATION Date: Sat, 20 Jun 2026 23:18:52 -0700 Subject: [PATCH] feat(windows): build support --- CMakeLists.txt | 143 +++++++++++++++++++++++++------- Makefile | 10 ++- resources/app.rc | 6 ++ resources/main.exe.manifest | 9 -- resources/palera1n.exe.manifest | 21 +++++ resources/palera1n.ico | Bin 0 -> 4286 bytes src/wx/AppFrame.cpp | 4 + 7 files changed, 151 insertions(+), 42 deletions(-) create mode 100644 resources/app.rc delete mode 100644 resources/main.exe.manifest create mode 100644 resources/palera1n.exe.manifest create mode 100644 resources/palera1n.ico diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c8411b..0c2fc37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,11 @@ set(CMAKE_OSX_ARCHITECTURES "arm64") set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(DEPS_PREFIX ${CMAKE_BINARY_DIR}/deps) +if(MINGW) + set(DEPS_PREFIX /mingw64) +else() + set(DEPS_PREFIX ${CMAKE_SOURCE_DIR}/deps) +endif() # ========================= # wxWidgets @@ -82,6 +86,9 @@ if(APPLE AND WITH_GUI) MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/resources/Info.plist MACOSX_BUNDLE_ICON_FILE palera1n.icns ) +elseif(MINGW OR MSYS AND WITH_GUI) + set(APP_MANIFEST_RC ${CMAKE_SOURCE_DIR}/resources/app.rc) + add_executable(palera1n WIN32 ${SOURCES} ${APP_MANIFEST_RC}) else() add_executable(palera1n ${SOURCES}) endif() @@ -119,13 +126,14 @@ if(WITH_GUI) if(WITH_STATIC) include(ExternalProject) - find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config REQUIRED) + find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config) set(PKG_ENV env PKG_CONFIG=${PKG_CONFIG_EXECUTABLE} PKG_CONFIG_PATH=${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig PKG_CONFIG_LIBDIR=${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig + PKG_CONFIG_PATH_CUSTOM=${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig CPPFLAGS=-I${DEPS_PREFIX}/include LDFLAGS=-L${DEPS_PREFIX}/lib @@ -138,6 +146,22 @@ if(WITH_GUI) mbedtls_LIBS=-lmbedtls\ -lmbedx509\ -lmbedcrypto ) + if(MINGW OR MSYS) + set(IMD_AUTOTOOLS_ARGS + --disable-static + --enable-shared + ) + else() + set(IMD_AUTOTOOLS_ARGS + --enable-static + --disable-shared + ) + set(MBEDUTILS_ARGS + --with-mbedtls + ) + endif() + + if(NOT MINGW AND NOT MSYS) # ========================= # mbedTLS # ========================= @@ -156,8 +180,9 @@ if(WITH_GUI) INSTALL_DIR ${DEPS_PREFIX} ) + endif() - if(LINUX) + if(LINUX OR MINGW OR MSYS) # ========================= # libusb # ========================= @@ -168,6 +193,8 @@ if(WITH_GUI) CONFIGURE_COMMAND ${PKG_ENV} + sh + -l ./autogen.sh --prefix=${DEPS_PREFIX} --disable-udev @@ -188,10 +215,11 @@ if(WITH_GUI) CONFIGURE_COMMAND ${PKG_ENV} + sh + -l ./autogen.sh --prefix=${DEPS_PREFIX} - --enable-static - --disable-shared + ${IMD_AUTOTOOLS_ARGS} BUILD_COMMAND make -j INSTALL_COMMAND make install @@ -208,10 +236,11 @@ if(WITH_GUI) CONFIGURE_COMMAND ${PKG_ENV} + sh + -l ./autogen.sh --prefix=${DEPS_PREFIX} - --enable-static - --disable-shared + ${IMD_AUTOTOOLS_ARGS} BUILD_COMMAND make -j INSTALL_COMMAND make install @@ -230,10 +259,11 @@ if(WITH_GUI) CONFIGURE_COMMAND ${PKG_ENV} + sh + -l ./autogen.sh --prefix=${DEPS_PREFIX} - --enable-static - --disable-shared + ${IMD_AUTOTOOLS_ARGS} --without-systemd BUILD_COMMAND make -j @@ -248,13 +278,16 @@ if(WITH_GUI) # ========================= set(LIBIMOBILEDEVICE_DEPS - mbedtls_ep libplist_ep libusbmuxd_ep limd_glue_ep ) - if(LINUX) + if(NOT MINGW AND NOT MSYS) + list(APPEND LIBIMOBILEDEVICE_DEPS mbedtls_ep) + endif() + + if(LINUX OR MINGW OR MSYS) list(APPEND LIBIMOBILEDEVICE_DEPS libusb_ep) endif() @@ -263,13 +296,16 @@ if(WITH_GUI) GIT_TAG ed0d66d0341562731bb19928dfe48155509fa7a7 UPDATE_COMMAND "" + PATCH_COMMAND patch -p1 < ${CMAKE_SOURCE_DIR}/patches/libimobiledevice/0001-include-windows-header.patch + CONFIGURE_COMMAND ${PKG_ENV} + sh + -l ./autogen.sh --prefix=${DEPS_PREFIX} - --with-mbedtls - --enable-static - --disable-shared + ${MBEDUTILS_ARGS} + ${IMD_AUTOTOOLS_ARGS} --disable-wireless-pairing BUILD_COMMAND make -j @@ -301,10 +337,11 @@ if(WITH_GUI) CONFIGURE_COMMAND ${PKG_ENV} + sh + -l ./autogen.sh --prefix=${DEPS_PREFIX} - --enable-static - --disable-shared + ${IMD_AUTOTOOLS_ARGS} BUILD_COMMAND make -j INSTALL_COMMAND make install @@ -313,7 +350,17 @@ if(WITH_GUI) DEPENDS libplist_ep libusbmuxd_ep limd_glue_ep ) - set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0") + add_dependencies(palera1n + libplist_ep + limd_glue_ep + libusbmuxd_ep + libimobiledevice_ep + libirecovery_ep + ) + + if(NOT MINGW AND NOT MSYS) + add_dependencies(palera1n mbedtls_ep) + endif() target_include_directories(palera1n PRIVATE ${DEPS_PREFIX}/include @@ -331,23 +378,55 @@ if(WITH_GUI) ) endif() - target_link_libraries(palera1n PRIVATE - ${DEPS_PREFIX}/lib/libimobiledevice-1.0.a - ${DEPS_PREFIX}/lib/libirecovery-1.0.a - ${DEPS_PREFIX}/lib/libusbmuxd-2.0.a - ${DEPS_PREFIX}/lib/libplist-2.0.a - ${DEPS_PREFIX}/lib/libimobiledevice-glue-1.0.a - ${DEPS_PREFIX}/lib/libmbedtls.a - ${DEPS_PREFIX}/lib/libmbedx509.a - ${DEPS_PREFIX}/lib/libmbedcrypto.a - ) - - if(LINUX) + if(MINGW OR MSYS) target_link_libraries(palera1n PRIVATE - ${DEPS_PREFIX}/lib/libusb-1.0.a + imobiledevice-1.0 + irecovery-1.0 + usbmuxd-2.0 + plist-2.0 + imobiledevice-glue-1.0 + usb-1.0 + ) + + set(DLLS + libcrypto-3-x64.dll + libssl-3-x64.dll + libstdc++-6.dll + libgcc_s_seh-1.dll + libwinpthread-1.dll + libimobiledevice-1.0.dll + libimobiledevice-glue-1.0.dll + libirecovery-1.0.dll + libplist-2.0.dll + libusbmuxd-2.0.dll + libusb-1.0.dll ) - endif() + foreach(DLL ${DLLS}) + add_custom_command(TARGET palera1n POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "C:/tools/msys64/mingw64/bin/${DLL}" + $ + ) + endforeach() + else() + target_link_libraries(palera1n PRIVATE + ${DEPS_PREFIX}/lib/libimobiledevice-1.0.a + ${DEPS_PREFIX}/lib/libirecovery-1.0.a + ${DEPS_PREFIX}/lib/libusbmuxd-2.0.a + ${DEPS_PREFIX}/lib/libplist-2.0.a + ${DEPS_PREFIX}/lib/libimobiledevice-glue-1.0.a + ${DEPS_PREFIX}/lib/libmbedtls.a + ${DEPS_PREFIX}/lib/libmbedx509.a + ${DEPS_PREFIX}/lib/libmbedcrypto.a + ) + + if(LINUX) + target_link_libraries(palera1n PRIVATE + ${DEPS_PREFIX}/lib/libusb-1.0.a + ) + endif() + endif() else() find_package(PkgConfig REQUIRED) @@ -372,7 +451,7 @@ if(WITH_GUI) target_compile_options(palera1n PRIVATE ${IMD_CFLAGS_OTHER} - ${IRECOVERY_INCLUDE_DIRS} + ${IRECOVERY_CFLAGS_OTHER} ${PLIST_CFLAGS_OTHER} ${USBMUXD_CFLAGS_OTHER} ) diff --git a/Makefile b/Makefile index 0504682..26650e1 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ palera1n: payloads -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \ -DWITH_GUI=$(WITH_GUI) \ -DWITH_STATIC=$(WITH_STATIC) && \ - cmake --build build -- -j4 + cmake --build build palera1n_xcode: payloads @cmake -S . -B build \ @@ -29,5 +29,13 @@ palera1n_xcode: payloads -DWITH_GUI=$(WITH_GUI) \ -DWITH_STATIC=$(WITH_STATIC) +palera1n_mingw: payloads + @cmake -S . -B build \ + -G "MinGW Makefiles" \ + -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \ + -DWITH_GUI=$(WITH_GUI) \ + -DWITH_STATIC=$(WITH_STATIC) && \ + cmake --build build + clean: @rm -rf build diff --git a/resources/app.rc b/resources/app.rc new file mode 100644 index 0000000..6695528 --- /dev/null +++ b/resources/app.rc @@ -0,0 +1,6 @@ +#include + +MAINICON ICON "palera1n.ico" + +#define RT_MANIFEST 24 +1 RT_MANIFEST "palera1n.exe.manifest" \ No newline at end of file diff --git a/resources/main.exe.manifest b/resources/main.exe.manifest deleted file mode 100644 index 3107f64..0000000 --- a/resources/main.exe.manifest +++ /dev/null @@ -1,9 +0,0 @@ - - - - - true - PerMonitorV2 - - - \ No newline at end of file diff --git a/resources/palera1n.exe.manifest b/resources/palera1n.exe.manifest new file mode 100644 index 0000000..5bbe480 --- /dev/null +++ b/resources/palera1n.exe.manifest @@ -0,0 +1,21 @@ + + + + + + + + + \ No newline at end of file diff --git a/resources/palera1n.ico b/resources/palera1n.ico new file mode 100644 index 0000000000000000000000000000000000000000..60eef499cab57685787cb0a66a945025db43a472 GIT binary patch literal 4286 zcmchb$95Fy9mVB0@XBj1{TP0*8AcIBP(VUCOC77Lx>ASgoMUx$4kC|8!vGQ>fmmJN zYT;wg9Iq|TrGxtLyZ`uo&B(}K_~-9`AF=-)as72<r(-iL^Ydx$AcBmxT3Mihl)7L{BHwUUW?rG`e;mi_$pwNJEtKGJ7jfh$VE;Ie?SmW?_aaortWmmqnI4vzgH`5W z10nAoLc$3`q6Z<#hmhZokfI=>2apIykTl|aj3W|=A)pwL#V{nF0nrzulJNO55PUg! zym>g?c^o_PI3Rb2+|AuA*0wU_FO$DQ{tEe&YlR+GsdWV0JJca`&nYyo3!30X&@UmZ zs4%nu!fFtTPlfB)i<1Kn9LEw)j%A#l1mJKOa5&>s3MZ!-93E$|caXu>UIq`h(^y$g zVR1DDg|)V&QW~X`t-IDZ59^$ZEvU{tD9%I3t`mO7_8=f-L||2_=r%j(wR7Wq5y9qk|+3E|nbk!l%ni ze7(NLw{PF@_3PK6hYQx>%a>1_yDaABJ!ETGxUXY&A&9%PK}<{sF*X$-J3w{-KacB( z8K;PbPdL{noFhs*h9Ms#EFB^!93bG?AND{lq7V5m9-lGx-*ENi%aDC@bAy|kZ_NEQ zJ=yvAj6|Y}*;x-3mo&^R=w$1doYpZurDJST$1f8a?u={XbFanSNXA@9L|lj)F76g5 z_ly%!)d9nQg0Ofr^pG_aJn6P@{`4_EzJJfyukfAh@87?Ze>2R%C%Yc(0mCR^ZqAGQ zCQn3~ZsF{NRAQX^j_UnO6`Ph$!)X#wdJmEc^(1@18~_lg&ZkcWHMg{VRw(h2kL z#iN#mm(QQz;=}u4yx(uW|AGJc^JiRMUch;3;Ql?|F#aK*vET9)j7=!`Wn9M3V={gk zm66Z;IX6_sk8GMs`ngjj?p6`0F#QBPNa$|Fc@}o6dAuV3!|(5K&Az)~?d{m@9=N)? zrl%`BeewbiA9%60YWLue{14+-8Nbb!$@k;Vm_)vWVo61@sG?Ay@>EtuKCSXxQIL(x z$VBKREDn8`83Qk$KEm&BU*ij7{r2rEJ>2rYuphpDyXF~G#`>}gTk9%!0sHTsj_DbV z@!#@CC;a3~_<2+$Uqr0$Z^qL|WAOlT-XWegf+yg7e{51auz2et=$7VO8TkDtJ?a7jJ%jiude;3wpTZF8aWkjPYz#PhC(P5M=% z^Ft3$x;4Ch@fdGe2fG*TnS1_dfC$g&2+zl$TcigW-Xn!|P?-ajIZ)Y$GR7Id%^w~2 z;TN0V%~0fYY?0f^Qw22JR5OoegRd>VZ)VV_&_^MPo@LMBBfO^GzI=fX+z0Jq8cFdK zDOo^F6nTH~!+$En#X9V<7auGu+(|NX;HL)(W8{yHGylCTl}Ei>po(a8OXQc(q*`sN zRYa>%K&zfdtCmBvnns&Ce>%9$0r_t@4>it6k$WPqahJ(H#C#I(Fn-oS#xZ+wV@=^s zl5uz1kBLe0Cq#<+oQLBbnfD_Z_ZDt*FiHLd`DVY2TE9A!)i>#*Mi2aM(X;5mBHu!r{nqK!(CwJK zZ&lH6mCte9VE!KJa5_UB>dFA2YLl zOihW*1NYC6ZIWLj+oI~IQ;mKDO{&#vpiOnUb@DCr=%Y^$1J+|;Wznz3(JvY3=XG>> zezX%lGyE zev|wbTDE#kbf_+U^ys7Cu3^Ah4A_^0S{j2&6#YT~y{wFGN<=&EMZ@qg2Oj3YGn`5J zRK)47h>cZ=HIOhp?V|^qU#A-6H;1wYEqZ99K{flgYVon%YtcgsJ^JVmJunCC#{u`l zpb|r$=SDxLpqCcWNqEtUx={*-y^?g^D`2;Zu_V2v1ah3qQ1=2;iD zvmQP4$-kBDp+Pn2p+ygE-oZNUIyz00yMX(Ed-31=?vMCweuw;K#0fL#K%RG(sNmvV Z-h-1JFV-IjSeW+?`G5ZZfdBXFe*r&q%@6

SetAppearance(wxApp::Appearance::Dark); + #endif + auto* frame = new MainFrame(); frame->Show(true); return true;