From be4c71f74be2a236baa9c1fd8d39d2879d34dadf Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 11 Dec 2023 18:30:09 +0100 Subject: [PATCH 1/7] Default to arm64 + x86_64 universal binaries for wxOSX Using i386 by default isn't useful any more -- but using arm64 is. --- configure | 6 ++---- configure.ac | 8 +++----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/configure b/configure index 30f90e8582..66a86bbb24 100755 --- a/configure +++ b/configure @@ -22839,10 +22839,8 @@ $as_echo "$as_me: WARNING: --enable-macosx_arch is ignored when --enable-univers if test "x$wxUSE_UNIVERSAL_BINARY" != xyes; then OSX_ARCH_OPTS=$wxUSE_UNIVERSAL_BINARY - else OSX_ARCH_OPTS="i386" - if test "$wxUSE_OSX_COCOA" = 1; then - OSX_ARCH_OPTS="$OSX_ARCH_OPTS,x86_64" - fi + else + OSX_ARCH_OPTS=arm64,x86_64 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for architectures to use in universal binary" >&5 diff --git a/configure.ac b/configure.ac index d8919d3cc9..0d153fd654 100644 --- a/configure.ac +++ b/configure.ac @@ -1160,11 +1160,9 @@ if test "x$wxUSE_UNIVERSAL_BINARY" != xno ; then if test "x$wxUSE_UNIVERSAL_BINARY" != xyes; then OSX_ARCH_OPTS=$wxUSE_UNIVERSAL_BINARY - else dnl Use all architectures supported - OSX_ARCH_OPTS="i386" - if test "$wxUSE_OSX_COCOA" = 1; then - OSX_ARCH_OPTS="$OSX_ARCH_OPTS,x86_64" - fi + else + dnl Default architectures for the universal binaries. + OSX_ARCH_OPTS=arm64,x86_64 fi AC_MSG_CHECKING([for architectures to use in universal binary]) From 209ce24b85764371a237192977a29f335063ffa5 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 11 Dec 2023 18:38:22 +0100 Subject: [PATCH 2/7] Recommend using parallel make when building wxWidgets This should help at least some people spend less time waiting. --- docs/gtk/install.md | 19 +++++++++++++++++-- docs/osx/install.md | 14 ++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/docs/gtk/install.md b/docs/gtk/install.md index 4e96a10591..039daa6f25 100644 --- a/docs/gtk/install.md +++ b/docs/gtk/install.md @@ -18,13 +18,28 @@ the following in wxWidgets directory: $ cd buildgtk $ ../configure --with-gtk $ make + +It is recommended to use `-jN` option with the last command, where `N` is a +number of the processors in your system (which can be checked using `nproc` +command if you are not sure), as this will dramatically speed up the build +on modern systems. So in practice you should use a command like this: + + $ make -j16 + +You may also prefer to add `-s` option to avoid normal output from make and/or +redirect it you to a log file for further inspection. + + +If you want to install wxWidgets, please also run + $ sudo make install $ sudo ldconfig (if you get "ldconfig: command not found", try using `/sbin/ldconfig`) -If you don't do the `make install` part, you can still use the libraries from -the `buildgtk` directory, but they may not be available to other users. +but note that this part is optional and you can use the libraries from +the `buildgtk` directory by running `.../buildgtk/wx-config` script using its +full path instead of just using `wx-config`. Note that by default, GTK 3 is used. GTK 2 can be specified with `--with-gtk=2` configure option. diff --git a/docs/osx/install.md b/docs/osx/install.md index 2dfb91a3bf..36d00f2e23 100644 --- a/docs/osx/install.md +++ b/docs/osx/install.md @@ -9,11 +9,11 @@ Most OS X developers should start by downloading and installing Xcode from the App Store. It is a free IDE from Apple that provides all of the tools you need for working with wxWidgets. -After Xcode is installed, download wxWidgets-{version}.tar.bz2 and then +After Xcode is installed, download `wxWidgets-{version}.tar.bz2` and then double-click on it to unpack it to create a wxWidgets directory. Next use Terminal (under Applications, Utilities, Terminal) to access a command -prompt. Use cd to change directories to your wxWidgets directory and execute +prompt. Use `cd` to change directories to your wxWidgets directory and execute the following sets of commands from the wxWidgets directory. mkdir build-cocoa-debug @@ -21,6 +21,16 @@ the following sets of commands from the wxWidgets directory. ../configure --enable-debug make +It is recommended to use `-jN` option with the last command, where `N` is a +number of the processors in your system (which can be checked using `sysctl -n +hw.ncpu` command if you are not sure), as this will dramatically speed up the +build on modern systems. So in practice you should use a command like this: + + make -j16 + +You may also prefer to add `-s` option to avoid normal output from make and/or +redirect it you to a log file for further inspection. + Build the samples and demos cd samples; make;cd .. From 8d8ee12683f97ca5663a27dfd5da4d13674af5f1 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 11 Dec 2023 18:43:20 +0100 Subject: [PATCH 3/7] Recommend building just "minimal" sample Don't tell people to build all the samples and demos because this takes time and some of them are badly outdated. Do tell them to build and run the minimal one to check that things work as intended. Also remove links to the wiki from wxOSX instructions, there is not much useful from non-archaeological point of view there. --- docs/gtk/install.md | 9 ++++++++- docs/osx/install.md | 22 +++++++++------------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/docs/gtk/install.md b/docs/gtk/install.md index 039daa6f25..bbf57edd31 100644 --- a/docs/gtk/install.md +++ b/docs/gtk/install.md @@ -29,8 +29,15 @@ on modern systems. So in practice you should use a command like this: You may also prefer to add `-s` option to avoid normal output from make and/or redirect it you to a log file for further inspection. +You should build at least the smallest possible wxWidgets sample to verify that +everything is working as intended, by doing -If you want to install wxWidgets, please also run + $ cd samples/minimal + $ make + +and try running it using `./minimal` command from the same directory. + +After confirming that it works, you may want to install wxWidgets by running $ sudo make install $ sudo ldconfig diff --git a/docs/osx/install.md b/docs/osx/install.md index 36d00f2e23..f8a9788cfe 100644 --- a/docs/osx/install.md +++ b/docs/osx/install.md @@ -31,23 +31,19 @@ build on modern systems. So in practice you should use a command like this: You may also prefer to add `-s` option to avoid normal output from make and/or redirect it you to a log file for further inspection. -Build the samples and demos +You should build at least the smallest possible wxWidgets sample to verify that +everything is working as intended, by doing + + cd samples/minimal + make + +and then running `minimal.app` from this directory from Finder. + +If you'd like to, you can also build all the other samples and demos cd samples; make;cd .. cd demos; make;cd .. -After the compilation completes, use Finder to run the samples and demos -* Go to build-cocoa-debug/samples to experiment with the Cocoa samples. -* Go to build-cocoa-debug/demos to experiment with the Cocoa demos. -* Double-click on the executables which have an icon showing three small squares. -* The source code for the samples is in wxWidgets/samples -* The source code for the demos is in wxWidgets/demos - -More information about building on macOS is available in the wxWiki. -Here are two useful links - * https://wiki.wxwidgets.org/Guides_%26_Tutorials - * https://wiki.wxwidgets.org/Development:_wxMac - Advanced topics {#osx_advanced} =============== From 1d9fe9022406f59e825e6d97b8d42708ef9f57c0 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 11 Dec 2023 18:49:29 +0100 Subject: [PATCH 4/7] Add section about building release Mac libraries This doesn't seem to be documented anywhere else, but is rather important to know. --- docs/osx/install.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/osx/install.md b/docs/osx/install.md index f8a9788cfe..10143a2dc1 100644 --- a/docs/osx/install.md +++ b/docs/osx/install.md @@ -48,6 +48,24 @@ If you'd like to, you can also build all the other samples and demos Advanced topics {#osx_advanced} =============== +Building library for distribution +--------------------------------- + +When building library for the distribution with your application, you shouldn't +use `--enable-debug` option above but you may want to use `--disable-sys-libs` +option to ensure that it has no dependencies on the other libraries available +on the current system as they might not be present on all systems where the +application is used. + +It is also often desirable to build the final version of the application as +"universal binary", i.e. a combination of binaries for several different +architectures. In this case, you should build wxWidgets as universal binary +too, using `--enable-universal_binary` option. By default, this option enables +building for the usually wanted set of architectures (currently ARM and Intel) +but you may override this by listing the architectures you want to use +explicitly, separating them with commas. + + Installing library {#osx_install} ------------------ From 30994678c4f68e2827d0efc380799875b99b0652 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 12 Dec 2023 20:10:40 +0100 Subject: [PATCH 5/7] Reduce the degree of make parallelism in examples And add a warning to not do this if it's not supported. --- docs/gtk/install.md | 5 ++++- docs/osx/install.md | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/gtk/install.md b/docs/gtk/install.md index bbf57edd31..cd30f6813c 100644 --- a/docs/gtk/install.md +++ b/docs/gtk/install.md @@ -24,7 +24,10 @@ number of the processors in your system (which can be checked using `nproc` command if you are not sure), as this will dramatically speed up the build on modern systems. So in practice you should use a command like this: - $ make -j16 + $ make -j8 + +(but don't use it unless you actually have 8 CPUs and enough memory for that +many parallel compiler invocations). You may also prefer to add `-s` option to avoid normal output from make and/or redirect it you to a log file for further inspection. diff --git a/docs/osx/install.md b/docs/osx/install.md index 10143a2dc1..3ffaa899ef 100644 --- a/docs/osx/install.md +++ b/docs/osx/install.md @@ -26,7 +26,10 @@ number of the processors in your system (which can be checked using `sysctl -n hw.ncpu` command if you are not sure), as this will dramatically speed up the build on modern systems. So in practice you should use a command like this: - make -j16 + make -j8 + +(but don't use it unless you actually have 8 CPUs and enough memory for that +many parallel compiler invocations). You may also prefer to add `-s` option to avoid normal output from make and/or redirect it you to a log file for further inspection. From de86a70f4ee67043349dbfe9270cf4607c594bad Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 14 Dec 2023 16:29:18 +0100 Subject: [PATCH 6/7] Use symbolic constant for macOS 10.12 version No real changes, just use a constant instead of a hardcoded number in a version check. --- src/osx/cocoa/window.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm index d8e863bce1..7204c617e3 100644 --- a/src/osx/cocoa/window.mm +++ b/src/osx/cocoa/window.mm @@ -917,7 +917,7 @@ static void SetDrawingEnabledIfFrozenRecursive(wxWidgetCocoaImpl *impl, bool ena [super viewDidMoveToWindow]; } -#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 101200 +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_12 - (void) viewWillDraw { if ( WX_IS_MACOS_AVAILABLE(11, 0) ) From 7adcc8f954c1a273d12f92a317565cc2ba75f373 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 19 Dec 2023 02:11:06 +0100 Subject: [PATCH 7/7] Don't use arm64 for universal binaries by default under macOS 10 This architecture is supported since macOS 11. --- configure.ac | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 0d153fd654..f00975fd0b 100644 --- a/configure.ac +++ b/configure.ac @@ -1161,8 +1161,14 @@ if test "x$wxUSE_UNIVERSAL_BINARY" != xno ; then if test "x$wxUSE_UNIVERSAL_BINARY" != xyes; then OSX_ARCH_OPTS=$wxUSE_UNIVERSAL_BINARY else - dnl Default architectures for the universal binaries. - OSX_ARCH_OPTS=arm64,x86_64 + dnl Use default architectures for the universal binaries: x86_64 is + dnl currently supported everywhere... + OSX_ARCH_OPTS=x86_64 + + dnl ... and non-ancient macOS versions also support ARM. + if [ `sw_vers -productVersion | sed 's/\..*//'` -gt 10 ]; then + OSX_ARCH_OPTS=arm64,$OSX_ARCH_OPTS + fi fi AC_MSG_CHECKING([for architectures to use in universal binary])