Open AdelKS opened 1 month ago
interesting! NB: zero experience with meson here
1) are Makefile
, addons.make
and config.make
"generated" and required? if not perhaps remove them from the repository to make it as clean as possible;
2) is the meson
-ificiation (as you put it) of addons something that might be automatable? CMake faces the same problem; 1000+ public addons and countless private ones have an addon_config.mk
(potentionally platform-tailored) and won't suddenly sport fresh config files. can meson take the list in addons.make
check for presence in $OF_ROOT/addons
, and produce things as needed by meson? perhaps it's a role for Project Generator, which could generate a meson.build
, but it would be nice to be able to add/reload thing without resetting everything (a bit like QTCreator allows with .qbs
, which gets re-parsed on save, including scanning dependencies). i understand the general idea of avoiding build-locking, but even for complex projects, i haven't been unable to re-generate build files on different platforms. in essence i view the build/IDE files as ephemeral/transitionary, and rely on src+addons.make to provide me Makefiles or .xcodeproj or whatever.
3) the test did not work — ended like this (M1, macOS14.5):
openFrameworks| Project name: openFrameworks
openFrameworks| Project version: 0.12.0
openFrameworks| C++ compiler for the host machine: c++ (clang 15.0.0 "Apple clang version 15.0.0 (clang-1500.3.9.4)")
openFrameworks| C++ linker for the host machine: c++ ld64 1053.12
openFrameworks| Run-time dependency assimp found: YES 5.4.3
openFrameworks| Run-time dependency Boost found: YES 1.86.0 (/opt/homebrew)
openFrameworks| Run-time dependency cairo found: YES 1.18.2
openFrameworks| Run-time dependency egl found: NO (tried pkgconfig, framework and cmake)
subprojects/openFrameworks/meson.build:227:2: ERROR: Dependency "egl" not found, tried pkgconfig, framework and cmake
A full log can be found at /Users/****/Downloads/test/interactive-physarum/build/meson-logs/meson-log.txt
NB: tried running PG over you test repo and a copy of your ofxGamePad fork and got here: so yes, from a meson point of view you don't need to include the OIS source, but current ofxAddon ecosystem won't find it.
(and yes, the point of something like meson is to not rely on ofxAddon — write a meson.build and get the dependency! but just to be sure nothing here is to be construed as negative — it is very important to explore/discuss build systems and what facilitates usage; i'm really looking at it with the question of "how could OF transparently migrate" while maintaining a core principle which is "garanteed results on the supported platforms in harsh conditions" (think workshop with disparate machines or admin restrictions), where as long as you have a C++17 toolchain, you can download an OF.gzip in a writable directory and get compiling (NB: on linux you might have to get distro-sanctionned packages, which presumes sudo-rights)).
thinking a bit more about PG's role: meson-ification in addons' cases currently means: having a local copy of an addon, start with addon_config.mk and from there gathering source and accumulating flags and libs, perhaps platform-conditional. the problem is the same with all build tools. so i guess a question is: what is the ideal "addon descriptor" (really: a package description) that could translate to different build systems? ideally we'd support CMake, meson, etc, but don't expect addon writers to know about them all — so perhaps think of a kind of universal addon description (what addon_config.mk ends up being, even for non-Make projects such as Xcode).
Hey, Thanks for your feedback !
are Makefile, addons.make and config.make "generated" and required? if not perhaps remove them from the repository to make it as clean as possible;
No they are not needed, it's like cmake
: it generates a "build folder tree" that ninja
understands. I will remove them to showcase that they are not needed anymore as you suggested.
is the meson-ificiation (as you put it) of addons something that might be automatable?
There's nothing magical with meson
, this probably applies to any build system, so perhaps this is the "universal addon description" you mention: it needs to know where to look for headers (include folders), what sources to compile (a full list of individual files, not a folder), and what dependencies are needed. Of course there's more to a build system..
So now, if I go back to the meson alternative:
1- If we consider a future where meson is used, then a meson.build
template could definitely be offered for add-on makers to simply fill up with that information.
2- So, for the purpose of automatically generating meson
files to ease transition from addon_config.mk
. I went to have a look in the addons
folder, and they all look like they have their sources in an src
folder that happens to also be the include
folder. So I can imagine one could write a script to take the template and fill up the sources array and the project's name in it, and everything else should look similar (like this meson file)
the test did not work — ended like this (M1, macOS14.5):
Can you tell me what headers in the libs/openFrameworks
folder don't apply to Mac ? So I can update the meson.build
file to have platform conditional dependencies and headers. I actually have never used openFrameworks
before to understand it deeply. Because basically the issue here with your platform is that meson
is trying to find linux
specific dependencies.
"garanteed results on the supported platforms in harsh conditions" (think workshop with disparate machines or admin restrictions
Meson is really fitting in these situations with the approach with subprojects and wraps: where the needed dependencies can simply be downloaded automatically by meson instead of relying on what the distro provides. When you run this snippet
git clone https://github.com/AdelKS/interactive-physarum.git --depth=1
cd interactive-physarum
meson setup build
you will see that subprojects get automatically and recursively pulled by meson: openFrameworks, kissfft, libtess2 . The projects that can be downloaded automatically by meson are listed here (called wrapdb), and allegedly every meson
ified ofx addon. Basically any project that uses either meson or cmake can be pulled directly and built from source, where to pull it from is described in a .wrap
file in the subprojects
folder. But many projects do not use meson
nor cmake
, and if your code depends on them, you will need to install them through other means or write a meson.build
file for them to "mesonify" them. The later is what the wrapdb actually is: community maintained meson.build files for different projects.
So in your case for example let's say OIS
is not available with "homebrew", I will add a .wrap
file in the ofxGamepad
repo to describe how to use it when the dependency isn't available in the host, since it uses cmake it will just work :tm:
2- So, for the purpose of automatically generating meson files to ease transition from addon_config.mk. I went to have a look in the addons folder, and they all look like they have their sources in an src folder that happens to also be the include folder. So I can imagine one could write a script to take the template and fill up the sources array and the project's name in it, and everything else should look similar
indeed source (.h/.cpp) in src
is the common starting point, but addon_config.mk can provide much more info — see this as an example — but basically it configure flags, can include libs, and other features — see the howto and how that all ties into ofxaddons.com
Can you tell me what headers in the libs/openFrameworks folder don't apply to Mac ?
hmm i am not an apothecary expert so i'm not sure how to guide you correctly there (probably look into what kind of insight is implemented in apothecary around the platform?). as a reference here are the macOS "builtin" libraries that are shipped from apothecary (either provided in the bin releases, or via the script download_libs), so they can perhaps be considered "always required"?
FreeImage curl freetype json openssl tess2
boost glew libpng pixman uriparser
brotli fmod glfw pugixml utf8
cairo fmt glm rtAudio zlib
(because another design point is not to rely on homebrew on macOS, which is something that can be re-discussed, but again it's thinking about hostile workshop environments where you have 30 minutes to setup 16 machines for people unfamiliar with the command line. on linux it's more lax and download_libs.sh
will call the native package manager to install missing OS-level dependencies, but that's not a panacea sometimes version problems occur, especially on rolling releases like Arch).
But we can distinguish 2 distinct clusters of issues — the platform-specific treatment of providing libraries (which can get hairy when dealing with iOS or rPI), and the method of packaging/discovering/acquiring 3rd-party functionalities as supported by the ofxaddon ecosystem and Project Generator (which also solves producing projects files for a bunch of IDEs).
NB: for sure, a problem addon_config
does not solve is resolving it's own dependencies — let's say a want to wrap something complex like libpqxx (the postgresql c++ interface): as an addon author i inherit the problem of delivering the library — source? (easy for header-only; but often more complex if flags are needed)... so precompiled libs per platform? (have to do it! for 10-12 different platforms!) so, then... instructions to install separately? depending on the task, it can get complicated quickly. so addon's self-dependencies would obviously gain from any build tool support. but it's another layer down the onion...
Somehow I could build without these
brotli
fmod
fmt
pixman
zlib
Some changes:
Don't think it will make my example compile for you, but it should go a little bit further. That's how I believe we can handle everything using meson.
(the packages you mention not needing are not used by "empty" projects but will be needed on a case-by-case (for instance fmod for audio stuff).
but getting further!
| Call Stack (most recent call first):
| /opt/homebrew/Cellar/cmake/3.30.3/share/cmake/Modules/FindPkgConfig.cmake:873 (_pkg_check_modules_internal)
| test/CMakeLists.txt:32 (pkg_check_modules)
| -- Configuring incomplete, errors occurred!
kissfft| CMake configuration: FAILED
subprojects/openFrameworks/meson.build:226:2: ERROR: Failed to configure the CMake subproject: The following required packages were not found:
- fftw3
for fun, did brew install fftw
then got further (although i guess meson should find fftw by itself?)
openFrameworks| Run-time dependency libudev found: NO (tried pkgconfig, framework and cmake)
subprojects/openFrameworks/meson.build:231:2: ERROR: Dependency "libudev" not found, tried pkgconfig, framework and cmake
libudev
does not seem provided by brew.
the packages you mention not needing are not used by "empty" projects but will be needed on a case-by-case (for instance fmod for audio stuff
I probably did not make it clear, but for now I am focusing on making the "core" library be compilable, i.e. the source files in the libs
folder. There are many projects in the "addons" folder that one would need to tackle to achieve a full transition of this repository.
subprojects/openFrameworks/meson.build:226:2: ERROR: Failed to configure the CMake subproject: The following required packages were not found:
- fftw3
As you can see here, it's a cmake
subproject, kissfft
, downloaded by meson using the subprojects/kissfft.wrap
, that cannot find its fftw3
dependency. I was wondering why it needs FFTW and it turns out that its CMakeLists.txt
has tests enabled by default: the tests compares the results with FFTW, so it needs to pull FFTW. So I had to do this change to disable tests and therefore no pull FFTW.
Let's see where the next blocker is.
ok, still stuck at libudev
:
openFrameworks| Run-time dependency libudev found: NO (tried pkgconfig, framework and cmake)
subprojects/openFrameworks/meson.build:231:2: ERROR: Dependency "libudev" not found, tried pkgconfig, framework and cmake
i don't think that makes sense on macOS anyhow? (i'm not sure how to find what triggers the libudev
dependency?)
I think that’s a Linux only library and can be ignored.
Love seeing these explorations for build systems. Was trying out Conan and vcpkg today.
ok, still stuck at libudev
I moved the dependency('libudev')
in line 231 to the Linux specific if block here https://github.com/openframeworks/openFrameworks/pull/8137/commits/11c71a3c3fe9df1091b7db147c6cbe8439c4f222 (please have a look, meson.build files are very understandable).
You probably didn't get my latest changes, In your downstream local clone of interactive-physarum
you should do a git clean -ffdx
before doing meson setup build
so it will pull again the dependencies at their latest commit.
There's also the command meson subprojects update --reset
but sometimes it gets confused by force pushes or big changes in the dependencies.
Was trying out Conan and vcpkg today.
Would love to hear your feedback on them, never tried those either.
you should do a git clean -ffdx
got it! next up:
subprojects/openFrameworks/meson.build:236:11: ERROR: C++ header 'FreeImage.h' not found
note that (as far as i know, perhaps that changed recently) OF uses a customized FreeImage fork: https://github.com/danoli3/FreeImage
note that (as far as i know, perhaps that changed recently) OF uses a customized FreeImage fork: https://github.com/danoli3/FreeImage
Thanks! I couldn't put it in a wrap before because the original project doesn't use cmake
, but this fork does. Had to do some workarounds to use but it should work.
Next issue please :dagger:
| -- Configuring incomplete, errors occurred!
uriparser| CMake configuration: FAILED
subprojects/openFrameworks/meson.build:277:24: ERROR: Failed to configure the CMake subproject: Could NOT find GTest (missing: GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY) (Required is at least version "1.8.0")
@ofTheo a feature of Conan (that as far as i understand vcpkg does not support) is:
Conan supports pushing the libraries and binaries you build to an upstream. For this reason, if someone with the same profile settings as you pushes their prebuild libraries to the upstream (Conan centre, for example), Conan will simply download the prebuilt libraries instead of building from the source code.
which means the equivalent of the apothecary could be published as conan packages, and prebuilt as needed. officially supported platforms could be provided and pinned-to with version numbers, andthey would be assembled for "static" distribution on supported platforms, gathering the libs from conan and tarballing them for the equivalent of the current binary "semver" releases.
hosting a conan upstream is also possible, perhaps a way to envision addons as conan packages. one thing for sure though: a critical aspect is to think how addons themselves can resolve dependencies, to solve the lib-wrapper addon author problem of "should i provide source, or bin-per-platform, or git submodules, or a shell script, or README instructions to install manually". CMake seems to be establishing itself as a kind of universal dependency format (what i was mentionning above as a "generic" addon description file).
if Project Manager can read in addon_config.mk and spit out the corresponding CMakeLists.txt (perhaps localized to the PG user's platform, or in a generic platform-switched manner) it would pave the way to a transition. old addons would be supported via PG, and fresh addons would also sport a CMakeLists and be useable without PG.
Fixed. Next !
You can add me in Discord as adelks
if you want to handle this quicker.
OK meson setup
is done!
but now meson compile
errors... related to NSString / std::string confusion, so probably .mm or some other apple thing (the message "swift unavailable" shows up). this is what comes out after a re-do of 'meson compile', to isolate the problem:
INFO: autodetecting backend as ninja
INFO: calculating backend command to run: /opt/homebrew/bin/ninja
[4/127] Compiling C++ object subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_app_ofAppGLFWWindow.cpp.o
FAILED: subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_app_ofAppGLFWWindow.cpp.o
c++ -Isubprojects/openFrameworks/libopenFrameworks.dylib.p -Isubprojects/openFrameworks -I../subprojects/openFrameworks -I../subprojects/openFrameworks/libs/openFrameworks/3d -I../subprojects/openFrameworks/libs/openFrameworks/app -I../subprojects/openFrameworks/libs/openFrameworks/communication -I../subprojects/openFrameworks/libs/openFrameworks/events -I../subprojects/openFrameworks/libs/openFrameworks/gl -I../subprojects/openFrameworks/libs/openFrameworks/graphics -I../subprojects/openFrameworks/libs/openFrameworks/math -I../subprojects/openFrameworks/libs/openFrameworks/sound -I../subprojects/openFrameworks/libs/openFrameworks/types -I../subprojects/openFrameworks/libs/openFrameworks/utils -I../subprojects/openFrameworks/libs/openFrameworks/video -I../subprojects/openFrameworks/libs/openFrameworks -I../subprojects/libtess2/Include -Isubprojects/rtaudio-6.0.1 -I../subprojects/rtaudio-6.0.1 -I../subprojects/uriparser/include -Isubprojects/uriparser/__CMake_build -I../subprojects/uriparser/__CMake_build -Isubprojects/uriparser -I../subprojects/uriparser -Isubprojects/kissfft -I../subprojects/kissfft -Isubprojects/kissfft/__CMake_build -I../subprojects/kissfft/__CMake_build -I../subprojects/freeimage/Source/LibPNG -I../subprojects/freeimage/Source/ZLib -I../subprojects/freeimage/Source/LibWebP -I../subprojects/freeimage/Source/OpenEXR/Half -I../subprojects/freeimage/Source -I../subprojects/freeimage/Source/Metadata -I../subprojects/freeimage/Source/FreeImageToolkit -I../subprojects/freeimage/Source/LibJPEG -I../subprojects/freeimage/Source/LibTIFF4 -I../subprojects/freeimage/Source/LibOpenJPEG -Isubprojects/freeimage/__CMake_build -I../subprojects/freeimage/__CMake_build -Isubprojects/freeimage -I../subprojects/freeimage -I/opt/homebrew/include -I/opt/homebrew/Cellar/cairo/1.18.2/include/cairo -I/opt/homebrew/Cellar/fontconfig/2.15.0/include -I/opt/homebrew/opt/freetype/include/freetype2 -I/opt/homebrew/opt/libpng/include/libpng16 -I/opt/homebrew/Cellar/libxext/1.3.6/include -I/opt/homebrew/Cellar/libxrender/0.9.11/include -I/opt/homebrew/Cellar/libx11/1.8.10/include -I/opt/homebrew/Cellar/libxcb/1.17.0/include -I/opt/homebrew/Cellar/libxau/1.0.11/include -I/opt/homebrew/Cellar/libxdmcp/1.1.5/include -I/opt/homebrew/Cellar/pixman/0.42.2/include/pixman-1 -I/opt/homebrew/Cellar/xorgproto/2024.1/include -I/opt/homebrew/Cellar/glew/2.2.0_1/include -I/opt/homebrew/Cellar/glfw/3.4/include -I/opt/homebrew/Cellar/glm/1.0.1/include -I/opt/homebrew/Cellar/openssl@3/3.3.2/include -I/opt/homebrew/Cellar/mpg123/1.32.7/include -I/opt/homebrew/Cellar/nlohmann-json/3.11.3/include -I/opt/homebrew/Cellar/pugixml/1.14/include -I/opt/homebrew/Cellar/libsndfile/1.2.2/include -I/opt/homebrew/Cellar/flac/1.4.3/include -I/opt/homebrew/Cellar/libvorbis/1.3.7/include -I/opt/homebrew/Cellar/libogg/1.3.5/include -I/opt/homebrew/Cellar/opus/1.5.2/include/opus -I/opt/homebrew/include/utf8cpp -fdiagnostics-color=always -DNDEBUG -Wall -Winvalid-pch -std=c++20 -O3 -pipe -DDISABLE_PERF_MEASUREMENT -DOPJ_STATIC -DNO_LCMS -DNO_WINDOWS -Dkiss_fft_scalar=float -DKISS_FFT_SHARED -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenAL.framework -idirafter/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenAL.framework/Headers -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GLUT.framework -idirafter/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GLUT.framework/Headers -DBOOST_ALL_NO_LIB -MD -MQ subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_app_ofAppGLFWWindow.cpp.o -MF subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_app_ofAppGLFWWindow.cpp.o.d -o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_app_ofAppGLFWWindow.cpp.o -c ../subprojects/openFrameworks/libs/openFrameworks/app/ofAppGLFWWindow.cpp
In file included from ../subprojects/openFrameworks/libs/openFrameworks/app/ofAppGLFWWindow.cpp:26:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h:12:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:9:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:601:1: error: expected unqualified-id
@class NSString, Protocol;
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:603:9: error: unknown type name 'NSString'
typedef NSString * NSExceptionName NS_TYPED_EXTENSIBLE_ENUM;
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:604:9: error: unknown type name 'NSString'
typedef NSString * NSRunLoopMode NS_TYPED_EXTENSIBLE_ENUM;
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:606:19: error: unknown type name 'NSString'
FOUNDATION_EXPORT NSString *NSStringFromSelector(SEL aSelector);
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:607:44: error: unknown type name 'NSString'
FOUNDATION_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:609:19: error: unknown type name 'NSString'
FOUNDATION_EXPORT NSString *NSStringFromClass(Class aClass);
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:610:53: error: unknown type name 'NSString'
FOUNDATION_EXPORT Class _Nullable NSClassFromString(NSString *aClassName);
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:612:19: error: unknown type name 'NSString'
FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:612:50: error: unknown type name 'Protocol'
FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:613:19: error: unknown type name 'Protocol'
FOUNDATION_EXPORT Protocol * _Nullable NSProtocolFromString(NSString *namestr) API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:613:61: error: unknown type name 'NSString'
FOUNDATION_EXPORT Protocol * _Nullable NSProtocolFromString(NSString *namestr) API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:617:30: error: unknown type name 'NSString'
FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2) NS_NO_TAIL_CALL;
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:617:53: error: format argument not a string type
FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2) NS_NO_TAIL_CALL;
~~~~~~~~~~~~~~~~ ^ ~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:94:49: note: expanded from macro 'NS_FORMAT_FUNCTION'
#define NS_FORMAT_FUNCTION(F,A) __attribute__((format(__NSString__, F, A)))
^ ~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:618:31: error: unknown type name 'NSString'
FOUNDATION_EXPORT void NSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0) NS_NO_TAIL_CALL;
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:618:63: error: format argument not a string type
FOUNDATION_EXPORT void NSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0) NS_NO_TAIL_CALL;
~~~~~~~~~~~~~~~~ ^ ~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:94:49: note: expanded from macro 'NS_FORMAT_FUNCTION'
#define NS_FORMAT_FUNCTION(F,A) __attribute__((format(__NSString__, F, A)))
^ ~
In file included from ../subprojects/openFrameworks/libs/openFrameworks/app/ofAppGLFWWindow.cpp:26:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h:12:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:11:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSArray.h:5:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:7:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSZone.h:9:1: error: expected unqualified-id
@class NSString;
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSZone.h:19:63: error: unknown type name 'NSString'
FOUNDATION_EXPORT void NSSetZoneName(NSZone * _Nullable zone, NSString *name)NS_SWIFT_UNAVAILABLE("Zone-based memory management is unavailable");
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSZone.h:20:19: error: unknown type name 'NSString'
FOUNDATION_EXPORT NSString *NSZoneName(NSZone * _Nullable zone) NS_SWIFT_UNAVAILABLE("Zone-based memory management is unavailable");
^
In file included from ../subprojects/openFrameworks/libs/openFrameworks/app/ofAppGLFWWindow.cpp:26:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h:12:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:11:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSArray.h:5:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:9:1: error: expected unqualified-id
@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator;
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
[13/127] Compiling C++ object subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofShader.cpp.o
ninja: build stopped: subcommand failed.
How is this issue currently handled ? It looks like #include <Cocoa/Cocoa.h>
in ofAppGLFWWindow.cpp
is an Objective-C++
header. So on macos
openFrameworks is compiled as an Objective-C++
project ?
Okay I just tried something, please try again
In Xcode those files are compiled as objective-c / c++ I think we might have a rule in the makefiles that does the same.
OK making progress, now to the linker!
(just so you don't feel left hanging as this thread has a "chat" feel — i must now leave and will not get back to this space before monday noon EST)
[12/37] Linking target subprojects/openFrameworks/libopenFrameworks.dylib
FAILED: subprojects/openFrameworks/libopenFrameworks.dylib
c++ -o subprojects/openFrameworks/libopenFrameworks.dylib subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_3d_of3dPrimitives.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_3d_of3dUtils.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_3d_ofCamera.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_3d_ofEasyCam.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_3d_ofNode.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_app_ofAppGLFWWindow.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_app_ofAppNoWindow.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_app_ofAppRunner.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_app_ofBaseApp.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_app_ofMainLoop.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_communication_ofArduino.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_communication_ofSerial.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_events_ofEvents.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofBufferObject.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofCubeMap.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofFbo.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofGLRenderer.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofGLUtils.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofLight.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofMaterial.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofShader.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofShadow.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofTexture.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofVbo.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_gl_ofVboMesh.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_of3dGraphics.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_ofBitmapFont.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_ofCairoRenderer.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_ofGraphicsBaseTypes.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_ofGraphicsCairo.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_ofGraphics.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_ofImage.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_ofPath.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_ofPixels.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_ofRendererCollection.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_ofTessellator.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_graphics_ofTrueTypeFont.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_math_ofMath.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_math_ofMatrix3x3.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_math_ofMatrix4x4.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_math_ofQuaternion.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_math_ofVec2f.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_math_ofVec4f.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofFmodSoundPlayer.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofMediaFoundationSoundPlayer.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofOpenALSoundPlayer.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofRtAudioSoundStream.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofSoundBaseTypes.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofSoundBuffer.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofSoundPlayer.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofSoundStream.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_types_ofBaseTypes.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_types_ofColor.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_types_ofParameter.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_types_ofParameterGroup.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_types_ofRectangle.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_utils_ofFileUtils.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_utils_ofFpsCounter.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_utils_ofLog.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_utils_ofMatrixStack.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_utils_ofSystemUtils.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_utils_ofThread.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_utils_ofTimer.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_utils_ofTimerFps.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_utils_ofURLFileLoader.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_utils_ofUtils.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_utils_ofXml.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_video_ofDirectShowGrabber.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_video_ofDirectShowPlayer.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_video_ofMediaFoundationPlayer.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_video_ofVideoGrabber.cpp.o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_video_ofVideoPlayer.cpp.o -Wl,-dead_strip_dylibs -Wl,-headerpad_max_install_names -shared -install_name @rpath/libopenFrameworks.dylib -Wl,-rpath,@loader_path/../rtaudio-6.0.1 -Wl,-rpath,@loader_path/../uriparser -Wl,-rpath,@loader_path/../kissfft -Wl,-rpath,/opt/homebrew/Cellar/cairo/1.18.2/lib -Wl,-rpath,/opt/homebrew/Cellar/fontconfig/2.15.0/lib -Wl,-rpath,/opt/homebrew/opt/freetype/lib -Wl,-rpath,/opt/homebrew/Cellar/glew/2.2.0_1/lib -Wl,-rpath,/opt/homebrew/Cellar/glfw/3.4/lib -Wl,-rpath,/opt/homebrew/Cellar/openssl@3/3.3.2/lib -Wl,-rpath,/opt/homebrew/Cellar/mpg123/1.32.7/lib -Wl,-rpath,/opt/homebrew/Cellar/pugixml/1.14/lib -Wl,-rpath,/opt/homebrew/Cellar/libsndfile/1.2.2/lib -Wl,-rpath,/opt/homebrew/Cellar/jack/1.9.22_1/lib subprojects/libtess2/libtess2.a subprojects/rtaudio-6.0.1/librtaudio.7.dylib subprojects/uriparser/liburiparser.dylib subprojects/kissfft/libkissfft.dylib subprojects/freeimage/libFreeImage.a /opt/homebrew/Cellar/cairo/1.18.2/lib/libcairo.dylib /opt/homebrew/Cellar/fontconfig/2.15.0/lib/libfontconfig.dylib /opt/homebrew/opt/freetype/lib/libfreetype.dylib -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks -framework glut /opt/homebrew/Cellar/glew/2.2.0_1/lib/libGLEW.dylib /opt/homebrew/Cellar/glfw/3.4/lib/libglfw.dylib /opt/homebrew/Cellar/openssl@3/3.3.2/lib/libcrypto.dylib -lcurl /opt/homebrew/Cellar/mpg123/1.32.7/lib/libmpg123.dylib -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks -framework openal /opt/homebrew/Cellar/pugixml/1.14/lib/libpugixml.dylib /opt/homebrew/Cellar/libsndfile/1.2.2/lib/libsndfile.dylib -framework AppKit -framework Foundation
Undefined symbols for architecture arm64:
"ofAVFoundationPlayer::ofAVFoundationPlayer()", referenced from:
ofVideoPlayer::load(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>) in libs_openFrameworks_video_ofVideoPlayer.cpp.o
ofVideoPlayer::getPlayer() in libs_openFrameworks_video_ofVideoPlayer.cpp.o
ofVideoPlayer::loadAsync(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>) in libs_openFrameworks_video_ofVideoPlayer.cpp.o
"ofAVEngineSoundPlayer::ofAVEngineSoundPlayer()", referenced from:
ofSoundPlayer::ofSoundPlayer() in libs_openFrameworks_sound_ofSoundPlayer.cpp.o
"ofAVFoundationGrabber::ofAVFoundationGrabber()", referenced from:
ofVideoGrabber::getGrabber() in libs_openFrameworks_video_ofVideoGrabber.cpp.o
ofVideoGrabber::setup(int, int, bool) in libs_openFrameworks_video_ofVideoGrabber.cpp.o
ofVideoGrabber::listDevices() const in libs_openFrameworks_video_ofVideoGrabber.cpp.o
"_glAlphaFunc", referenced from:
ofGLRenderer::drawString(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glBindTexture", referenced from:
ofCubeMap::load(ofCubeMap::ofCubeMapSettings) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::load(ofCubeMap::ofCubeMapSettings) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
...
"_glBlendFunc", referenced from:
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::startSmoothing() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofPolyline_<glm::vec<3, float, (glm::qualifier)0>> const&) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glClear", referenced from:
ofCubeMap::_equiRectToCubeMap(unsigned int&, unsigned int, int, bool) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_equiRectToCubeMap(unsigned int&, unsigned int, int, bool) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_equiRectToCubeMap(unsigned int&, unsigned int, int, bool) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_equiRectToCubeMap(unsigned int&, unsigned int, int, bool) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_equiRectToCubeMap(unsigned int&, unsigned int, int, bool) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_equiRectToCubeMap(unsigned int&, unsigned int, int, bool) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofGLProgrammableRenderer::clear() in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
...
"_glClearColor", referenced from:
ofGLProgrammableRenderer::clear(float, float, float, float) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::clearAlpha() in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBackgroundColor(ofColor_<float> const&) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLRenderer::clear(float, float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::clearAlpha() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setBackgroundColor(ofColor_<float> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glColor4f", referenced from:
ofGLRenderer::setColor(float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setColor(float, float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glColorMask", referenced from:
ofGLProgrammableRenderer::clearAlpha() in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::clearAlpha() in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLRenderer::clearAlpha() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::clearAlpha() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glColorMaterial", referenced from:
ofGLRenderer::setColor(float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setColor(float, float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glColorPointer", referenced from:
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofVbo::bind() const in libs_openFrameworks_gl_ofVbo.cpp.o
"_glCopyTexSubImage2D", referenced from:
ofTexture::loadScreenData(int, int, int, int) in libs_openFrameworks_gl_ofTexture.cpp.o
"_glCullFace", referenced from:
ofShadow::beginDepth() in libs_openFrameworks_gl_ofShadow.cpp.o
ofShadow::beginDepth(unsigned int) in libs_openFrameworks_gl_ofShadow.cpp.o
"_glDeleteTextures", referenced from:
release(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
release(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::load(ofCubeMap::ofCubeMapSettings) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::load(ofCubeMap::ofCubeMapSettings) in libs_openFrameworks_gl_ofCubeMap.cpp.o
releaseFBO(int) in libs_openFrameworks_gl_ofShadow.cpp.o
release(unsigned int) in libs_openFrameworks_gl_ofTexture.cpp.o
release(unsigned int) in libs_openFrameworks_gl_ofTexture.cpp.o
...
"_glDepthFunc", referenced from:
ofCubeMap::drawCubeMap() in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_drawCubeStart(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_drawCubeEnd() in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::drawIrradiance() in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::drawPrefilteredCube(float) in libs_openFrameworks_gl_ofCubeMap.cpp.o
"_glDepthMask", referenced from:
ofBackgroundGradient(ofColor_<float> const&, ofColor_<float> const&, ofGradientMode) in libs_openFrameworks_graphics_ofGraphics.cpp.o
ofBackgroundGradient(ofColor_<float> const&, ofColor_<float> const&, ofGradientMode) in libs_openFrameworks_graphics_ofGraphics.cpp.o
ofDrawBitmapStringHighlight(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, int, int, ofColor_<unsigned char> const&, ofColor_<unsigned char> const&) in libs_openFrameworks_graphics_ofGraphics.cpp.o
ofDrawBitmapStringHighlight(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, int, int, ofColor_<unsigned char> const&, ofColor_<unsigned char> const&) in libs_openFrameworks_graphics_ofGraphics.cpp.o
"_glDisable", referenced from:
ofGLProgrammableRenderer::setDepthTest(bool) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::disablePointSprites() in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::disableAntiAliasing() in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLRenderer::bind(ofBaseMaterial const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setDepthTest(bool) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glDisableClientState", referenced from:
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setupGraphicDefaults() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setupGraphicDefaults() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setupGraphicDefaults() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofVbo::unbind() const in libs_openFrameworks_gl_ofVbo.cpp.o
ofVbo::unbind() const in libs_openFrameworks_gl_ofVbo.cpp.o
ofVbo::unbind() const in libs_openFrameworks_gl_ofVbo.cpp.o
...
"_glDrawArrays", referenced from:
ofGLProgrammableRenderer::draw(ofVbo const&, unsigned int, int, int) const in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofPolyline_<glm::vec<3, float, (glm::qualifier)0>> const&) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofVbo const&, unsigned int, int, int) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawLine(float, float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawRectangle(float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawTriangle(float, float, float, float, float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glDrawBuffer", referenced from:
ofFbo::allocate(ofFboSettings) in libs_openFrameworks_gl_ofFbo.cpp.o
ofGLProgrammableRenderer::bindForBlitting(ofFbo const&, ofFbo&, int) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLRenderer::bindForBlitting(ofFbo const&, ofFbo&, int) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofShadow::_allocateFbo() in libs_openFrameworks_gl_ofShadow.cpp.o
"_glDrawElements", referenced from:
ofGLProgrammableRenderer::drawElements(ofVbo const&, unsigned int, int, int) const in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawElements(ofVbo const&, unsigned int, int, int) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glEnable", referenced from:
ofCubeMap::load(ofCubeMap::ofCubeMapSettings) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofGLProgrammableRenderer::setDepthTest(bool) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setBlendMode(ofBlendMode) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
...
"_glEnableClientState", referenced from:
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofPolyline_<glm::vec<3, float, (glm::qualifier)0>> const&) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setupGraphicDefaults() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glFlush", referenced from:
ofAppGLFWWindow::draw() in libs_openFrameworks_app_ofAppGLFWWindow.cpp.o
"_glFrontFace", referenced from:
ofShadow::beginDepth() in libs_openFrameworks_gl_ofShadow.cpp.o
ofShadow::beginDepth(unsigned int) in libs_openFrameworks_gl_ofShadow.cpp.o
"_glGenTextures", referenced from:
ofCubeMap::load(ofCubeMap::ofCubeMapSettings) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createFloatCubeMap(unsigned int, int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_loadIrradianceMap(std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_loadPrefilterMap(std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createIrradianceMap(unsigned int, bool, std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createPrefilteredCubeMap(unsigned int, int, bool, std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
...
"_glGetBooleanv", referenced from:
ofBackgroundGradient(ofColor_<float> const&, ofColor_<float> const&, ofGradientMode) in libs_openFrameworks_graphics_ofGraphics.cpp.o
"_glGetError", referenced from:
ofGLProgrammableRenderer::setup(int, int) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofShader::setupShaderFromSource(ofShader::Source&&) in libs_openFrameworks_gl_ofShader.cpp.o
ofShader::setupShaderFromSource(ofShader::Source&&) in libs_openFrameworks_gl_ofShader.cpp.o
ofShader::checkProgramLinkStatus() in libs_openFrameworks_gl_ofShader.cpp.o
"_glGetFloatv", referenced from:
ofGLRenderer::begin(ofFbo const&, ofFboMode) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::pushView() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::pushView() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::getCurrentMatrix(ofMatrixMode) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::getCurrentMatrix(ofMatrixMode) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::getCurrentMatrix(ofMatrixMode) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::multMatrix(glm::mat<4, 4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glGetIntegerv", referenced from:
ofFbo::checkGLSupport() in libs_openFrameworks_gl_ofFbo.cpp.o
ofFbo::checkGLSupport() in libs_openFrameworks_gl_ofFbo.cpp.o
ofFbo::checkGLSupport() in libs_openFrameworks_gl_ofFbo.cpp.o
ofFbo::allocate(ofFboSettings) in libs_openFrameworks_gl_ofFbo.cpp.o
ofFbo::attachTexture(ofTexture&, unsigned int, unsigned int) in libs_openFrameworks_gl_ofFbo.cpp.o
ofFbo::updateTexture(int) in libs_openFrameworks_gl_ofFbo.cpp.o
ofGLRenderer::getNativeViewport() const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glGetString", referenced from:
ofAppGLFWWindow::setup(ofGLFWWindowSettings const&) in libs_openFrameworks_app_ofAppGLFWWindow.cpp.o
"_glGetTexImage", referenced from:
ofTexture::readToPixels(ofPixels_<unsigned char>&) const in libs_openFrameworks_gl_ofTexture.cpp.o
ofTexture::readToPixels(ofPixels_<unsigned short>&) const in libs_openFrameworks_gl_ofTexture.cpp.o
ofTexture::readToPixels(ofPixels_<float>&) const in libs_openFrameworks_gl_ofTexture.cpp.o
ofTexture::copyTo(ofBufferObject&) const in libs_openFrameworks_gl_ofTexture.cpp.o
"_glHint", referenced from:
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::startSmoothing() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofPolyline_<glm::vec<3, float, (glm::qualifier)0>> const&) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawLine(float, float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawRectangle(float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawTriangle(float, float, float, float, float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawCircle(float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glIsEnabled", referenced from:
ofGLRenderer::drawString(ofTrueTypeFont const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::enableLighting() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::getLightingEnabled() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glLightModelfv", referenced from:
ofGLRenderer::setGlobalAmbientColor(ofColor_<float> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glLightModeli", referenced from:
ofGLRenderer::enableSeparateSpecularLight() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::disableSeparateSpecularLight() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glLightf", referenced from:
ofGLRenderer::setLightSpotlightCutOff(int, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightSpotConcentration(int, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightAttenuation(int, float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightAttenuation(int, float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightAttenuation(int, float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glLightfv", referenced from:
ofGLRenderer::loadViewMatrix(glm::mat<4, 4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::loadViewMatrix(glm::mat<4, 4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::enableLighting() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::enableLighting() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightAmbientColor(int, ofColor_<float> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightDiffuseColor(int, ofColor_<float> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightSpecularColor(int, ofColor_<float> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glLineWidth", referenced from:
ofGLRenderer::setLineWidth(float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLineWidth(float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glLoadMatrixf", referenced from:
ofGLRenderer::begin(ofFbo const&, ofFboMode) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::loadMatrix(glm::mat<4, 4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::multMatrix(glm::mat<4, 4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::loadViewMatrix(glm::mat<4, 4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::enableLighting() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightPosition(int, glm::vec<4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightSpotDirection(int, glm::vec<4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glMaterialfv", referenced from:
ofGLRenderer::bind(ofBaseMaterial const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::bind(ofBaseMaterial const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::bind(ofBaseMaterial const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::bind(ofBaseMaterial const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::bind(ofBaseMaterial const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::unbind(ofBaseMaterial const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::unbind(ofBaseMaterial const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::unbind(ofBaseMaterial const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::unbind(ofBaseMaterial const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::unbind(ofBaseMaterial const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glMatrixMode", referenced from:
ofGLRenderer::begin(ofFbo const&, ofFboMode) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::matrixMode(ofMatrixMode) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::loadViewMatrix(glm::mat<4, 4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::loadViewMatrix(glm::mat<4, 4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::enableLighting() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::enableLighting() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightPosition(int, glm::vec<4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightPosition(int, glm::vec<4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glMultMatrixf", referenced from:
ofGLRenderer::multMatrix(glm::mat<4, 4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glNormalPointer", referenced from:
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofVbo::bind() const in libs_openFrameworks_gl_ofVbo.cpp.o
"_glPixelStorei", referenced from:
ofSetPixelStoreiAlignment(unsigned int, int, int, int) in libs_openFrameworks_gl_ofGLUtils.cpp.o
ofSetPixelStoreiAlignment(unsigned int, int, int, int) in libs_openFrameworks_gl_ofGLUtils.cpp.o
ofSetPixelStoreiAlignment(unsigned int, int, int, int) in libs_openFrameworks_gl_ofGLUtils.cpp.o
ofSetPixelStoreiAlignment(unsigned int, int) in libs_openFrameworks_gl_ofGLUtils.cpp.o
"_glPointSize", referenced from:
ofGLRenderer::setPointSize(float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glPolygonMode", referenced from:
ofGLProgrammableRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::drawInstanced(ofVboMesh const&, ofPolyRenderMode, int) const in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::drawInstanced(ofVboMesh const&, ofPolyRenderMode, int) const in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLProgrammableRenderer::setFillMode(ofFillFlag) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glPopAttrib", referenced from:
ofFbo::updateTexture(int) in libs_openFrameworks_gl_ofFbo.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::endSmoothing() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofPolyline_<glm::vec<3, float, (glm::qualifier)0>> const&) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawLine(float, float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawRectangle(float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawTriangle(float, float, float, float, float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glPopMatrix", referenced from:
ofGLRenderer::popMatrix() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::enableLighting() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightPosition(int, glm::vec<4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightSpotDirection(int, glm::vec<4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glPushAttrib", referenced from:
ofFbo::updateTexture(int) in libs_openFrameworks_gl_ofFbo.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::startSmoothing() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofPolyline_<glm::vec<3, float, (glm::qualifier)0>> const&) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawLine(float, float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawRectangle(float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawTriangle(float, float, float, float, float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glPushMatrix", referenced from:
ofGLRenderer::pushMatrix() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::enableLighting() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightPosition(int, glm::vec<4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::setLightSpotDirection(int, glm::vec<4, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glReadBuffer", referenced from:
ofFbo::updateTexture(int) in libs_openFrameworks_gl_ofFbo.cpp.o
ofGLProgrammableRenderer::bindForBlitting(ofFbo const&, ofFbo&, int) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLRenderer::bindForBlitting(ofFbo const&, ofFbo&, int) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofShadow::_allocateFbo() in libs_openFrameworks_gl_ofShadow.cpp.o
"_glReadPixels", referenced from:
ofFbo::copyTo(ofBufferObject&) const in libs_openFrameworks_gl_ofFbo.cpp.o
ofGLProgrammableRenderer::saveScreen(int, int, int, int, ofPixels_<unsigned char>&) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLRenderer::saveScreen(int, int, int, int, ofPixels_<unsigned char>&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glRotatef", referenced from:
ofGLRenderer::rotateDeg(float, float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::rotateXDeg(float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::rotateYDeg(float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::rotateZDeg(float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::rotateDeg(float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::rotateRad(float, float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::rotateXRad(float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glScalef", referenced from:
ofGLRenderer::scale(float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glShadeModel", referenced from:
ofGLRenderer::setSmoothLighting(bool) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glTexCoordPointer", referenced from:
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofVbo::bind() const in libs_openFrameworks_gl_ofVbo.cpp.o
"_glTexEnvf", referenced from:
ofTexture::allocate(ofTextureData const&, int, int) in libs_openFrameworks_gl_ofTexture.cpp.o
"_glTexEnvi", referenced from:
ofGLRenderer::enablePointSprites() in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glTexImage2D", referenced from:
ofCubeMap::load(ofCubeMap::ofCubeMapSettings) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
...
"_glTexParameterf", referenced from:
ofCubeMap::load(ofCubeMap::ofCubeMapSettings) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::load(ofCubeMap::ofCubeMapSettings) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::load(ofCubeMap::ofCubeMapSettings) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::load(ofCubeMap::ofCubeMapSettings) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofSetTextureWrap(float, float) in libs_openFrameworks_gl_ofTexture.cpp.o
ofSetTextureWrap(float, float) in libs_openFrameworks_gl_ofTexture.cpp.o
ofSetMinMagFilters(float, float) in libs_openFrameworks_gl_ofTexture.cpp.o
ofSetMinMagFilters(float, float) in libs_openFrameworks_gl_ofTexture.cpp.o
...
"_glTexParameterfv", referenced from:
ofShadow::_allocateFbo() in libs_openFrameworks_gl_ofShadow.cpp.o
ofShadow::_allocateFbo() in libs_openFrameworks_gl_ofShadow.cpp.o
"_glTexParameteri", referenced from:
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createCubeMap(unsigned int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createFloatCubeMap(unsigned int, int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createFloatCubeMap(unsigned int, int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createFloatCubeMap(unsigned int, int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createFloatCubeMap(unsigned int, int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createFloatCubeMap(unsigned int, int) in libs_openFrameworks_gl_ofCubeMap.cpp.o
...
"_glTexSubImage2D", referenced from:
ofCubeMap::_loadPrefilterMap(std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_loadPrefilterMap(std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_loadPrefilterMap(std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_loadPrefilterMap(std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_loadPrefilterMap(std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_loadPrefilterMap(std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createPrefilteredCubeMap(unsigned int, int, bool, std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createPrefilteredCubeMap(unsigned int, int, bool, std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createPrefilteredCubeMap(unsigned int, int, bool, std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createPrefilteredCubeMap(unsigned int, int, bool, std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createPrefilteredCubeMap(unsigned int, int, bool, std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
ofCubeMap::_createPrefilteredCubeMap(unsigned int, int, bool, std::__1::__fs::filesystem::path const&) in libs_openFrameworks_gl_ofCubeMap.cpp.o
...
"_glTranslatef", referenced from:
ofGLRenderer::translate(glm::vec<3, float, (glm::qualifier)0> const&) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::translate(float, float, float) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
"_glVertexPointer", referenced from:
ofGLRenderer::draw(ofMesh_<glm::vec<3, float, (glm::qualifier)0>, glm::vec<3, float, (glm::qualifier)0>, ofColor_<float>, glm::vec<2, float, (glm::qualifier)0>> const&, ofPolyRenderMode, bool, bool, bool) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::draw(ofPolyline_<glm::vec<3, float, (glm::qualifier)0>> const&) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawLine(float, float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawRectangle(float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawTriangle(float, float, float, float, float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawCircle(float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ofGLRenderer::drawEllipse(float, float, float, float, float) const in libs_openFrameworks_gl_ofGLRenderer.cpp.o
...
"_glViewport", referenced from:
ofGLProgrammableRenderer::viewport(float, float, float, float, bool) in libs_openFrameworks_gl_ofGLProgrammableRenderer.cpp.o
ofGLRenderer::viewport(float, float, float, float, bool) in libs_openFrameworks_gl_ofGLRenderer.cpp.o
ld: symbol(s) not found for architecture arm64
I added some dependencies, that should fix these errors. Let's see on Monday :dagger:
same linking error (but it's task 6/40 instead of 12/37, so something changed) link_error.txt
Okay, I added the Cocoa
framework as a linked against framework and I just discovered that I missed some .mm
source files.
there were some missing commas near:
subprojects/openFrameworks/meson.build:272:4: ERROR: Expecting rparen got string.
'libs/openFrameworks/video/ofAVFoundationGrabber.mm'
^
For a block that started at 270,18
sources += files(
^
fixed that but then stuck on:
subprojects/openFrameworks/meson.build:321:6: ERROR: No host machine compiler for 'subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm'
tried forcing clang++ with export CXX=clang++
and it seems to be picked up instead of g++ (don't know if g++ does objc++) but does not help with the ofAVEngineSoundPlayer.mm
error
Ah yeah, I added add_languages('objcpp', native: false)
in the darwin
(macos
) if block. That should fix it.
more objc++ compile fun:
it's about weak references which are related to retain-release and there is a note to enabling ARC Automatic Reference Counting — it means adding -fobjc-arc
but not sure where to stick that in the pipeline.
[1/6] Compiling Objective-C++ object subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofAVEngineSoundPlayer.mm.o
FAILED: subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofAVEngineSoundPlayer.mm.o
clang++ -Isubprojects/openFrameworks/libopenFrameworks.dylib.p -Isubprojects/openFrameworks -I../subprojects/openFrameworks -I../subprojects/openFrameworks/libs/openFrameworks/3d -I../subprojects/openFrameworks/libs/openFrameworks/app -I../subprojects/openFrameworks/libs/openFrameworks/communication -I../subprojects/openFrameworks/libs/openFrameworks/events -I../subprojects/openFrameworks/libs/openFrameworks/gl -I../subprojects/openFrameworks/libs/openFrameworks/graphics -I../subprojects/openFrameworks/libs/openFrameworks/math -I../subprojects/openFrameworks/libs/openFrameworks/sound -I../subprojects/openFrameworks/libs/openFrameworks/types -I../subprojects/openFrameworks/libs/openFrameworks/utils -I../subprojects/openFrameworks/libs/openFrameworks/video -I../subprojects/openFrameworks/libs/openFrameworks -I../subprojects/libtess2/Include -Isubprojects/rtaudio-6.0.1 -I../subprojects/rtaudio-6.0.1 -I../subprojects/uriparser/include -Isubprojects/uriparser/__CMake_build -I../subprojects/uriparser/__CMake_build -Isubprojects/uriparser -I../subprojects/uriparser -Isubprojects/kissfft -I../subprojects/kissfft -Isubprojects/kissfft/__CMake_build -I../subprojects/kissfft/__CMake_build -I../subprojects/freeimage/Source/LibPNG -I../subprojects/freeimage/Source/ZLib -I../subprojects/freeimage/Source/LibWebP -I../subprojects/freeimage/Source/OpenEXR/Half -I../subprojects/freeimage/Source -I../subprojects/freeimage/Source/Metadata -I../subprojects/freeimage/Source/FreeImageToolkit -I../subprojects/freeimage/Source/LibJPEG -I../subprojects/freeimage/Source/LibTIFF4 -I../subprojects/freeimage/Source/LibOpenJPEG -Isubprojects/freeimage/__CMake_build -I../subprojects/freeimage/__CMake_build -Isubprojects/freeimage -I../subprojects/freeimage -I/opt/homebrew/include -I/opt/homebrew/Cellar/cairo/1.18.2/include/cairo -I/opt/homebrew/Cellar/fontconfig/2.15.0/include -I/opt/homebrew/opt/freetype/include/freetype2 -I/opt/homebrew/opt/libpng/include/libpng16 -I/opt/homebrew/Cellar/libxext/1.3.6/include -I/opt/homebrew/Cellar/libxrender/0.9.11/include -I/opt/homebrew/Cellar/libx11/1.8.10/include -I/opt/homebrew/Cellar/libxcb/1.17.0/include -I/opt/homebrew/Cellar/libxau/1.0.11/include -I/opt/homebrew/Cellar/libxdmcp/1.1.5/include -I/opt/homebrew/Cellar/pixman/0.42.2/include/pixman-1 -I/opt/homebrew/Cellar/xorgproto/2024.1/include -I/opt/homebrew/Cellar/glew/2.2.0_1/include -I/opt/homebrew/Cellar/glfw/3.4/include -I/opt/homebrew/Cellar/glm/1.0.1/include -I/opt/homebrew/Cellar/openssl@3/3.3.2/include -I/opt/homebrew/Cellar/mpg123/1.32.7/include -I/opt/homebrew/Cellar/nlohmann-json/3.11.3/include -I/opt/homebrew/Cellar/pugixml/1.14/include -I/opt/homebrew/Cellar/libsndfile/1.2.2/include -I/opt/homebrew/Cellar/flac/1.4.3/include -I/opt/homebrew/Cellar/libvorbis/1.3.7/include -I/opt/homebrew/Cellar/libogg/1.3.5/include -I/opt/homebrew/Cellar/opus/1.5.2/include/opus -I/opt/homebrew/include/utf8cpp -fdiagnostics-color=always -DNDEBUG -Wall -Winvalid-pch -std=c++20 -O3 -DDISABLE_PERF_MEASUREMENT -DOPJ_STATIC -DNO_LCMS -DNO_WINDOWS -Dkiss_fft_scalar=float -DKISS_FFT_SHARED -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenAL.framework -idirafter/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenAL.framework/Headers -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GLUT.framework -idirafter/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/GLUT.framework/Headers -DBOOST_ALL_NO_LIB -MD -MQ subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofAVEngineSoundPlayer.mm.o -MF subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofAVEngineSoundPlayer.mm.o.d -o subprojects/openFrameworks/libopenFrameworks.dylib.p/libs_openFrameworks_sound_ofAVEngineSoundPlayer.mm.o -c ../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm
In file included from ../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:8:
In file included from ../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.h:11:
../subprojects/openFrameworks/libs/openFrameworks/utils/ofConstants.h:222:4: warning: "Please enable ARC (Automatic Reference Counting) at the project level" [-W#warnings]
#warning "Please enable ARC (Automatic Reference Counting) at the project level"
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:310:24: error: cannot create __weak reference in file using manual reference counting
__typeof(self) __weak weak_self = self;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:317:26: warning: unused variable 'isPlaying' [-Wunused-variable]
bool isPlaying = [weak_self isPlaying] || weak_self.bIsPlaying == YES;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:355:61: warning: implicit conversion from 'float' to 'int64_t' (aka 'long long') changes value from 0.033 to 0 [-Wliteral-conversion]
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.033f), dispatch_get_main_queue(), ^{
~~~~~~~~~~~~~ ^~~~~~
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:249:13: warning: unused variable 'error' [-Wunused-variable]
NSError * error = nil;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:371:16: warning: unused variable 'interruptionType' [-Wunused-variable]
NSUInteger interruptionType;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:372:11: warning: unused variable 'reasonValue' [-Wunused-variable]
UInt8 reasonValue;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:402:16: warning: unused variable 'interruptionType' [-Wunused-variable]
NSUInteger interruptionType;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:559:24: error: cannot create __weak reference in file using manual reference counting
__typeof(self) __weak weak_self = self;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:561:61: warning: implicit conversion from 'float' to 'int64_t' (aka 'long long') changes value from 0.017000001 to 0 [-Wliteral-conversion]
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.017f), dispatch_get_main_queue(), ^{
~~~~~~~~~~~~~ ^~~~~~
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:524:14: warning: unused variable 'error' [-Wunused-variable]
NSError *error;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:608:10: warning: variable 'engineRunning' set but not used [-Wunused-but-set-variable]
BOOL engineRunning = NO;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:685:1: warning: method possibly missing a [super dealloc] call [-Wobjc-missing-super-calls]
}
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:725:24: error: cannot create __weak reference in file using manual reference counting
__typeof(self) __weak weak_self = self;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:726:57: warning: implicit conversion from 'float' to 'int64_t' (aka 'long long') changes value from 0.30000001 to 0 [-Wliteral-conversion]
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3f), dispatch_get_main_queue(), ^{
~~~~~~~~~~~~~ ^~~~
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:792:24: error: cannot create __weak reference in file using manual reference counting
__typeof(self) __weak weak_self = self;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:859:28: error: cannot create __weak reference in file using manual reference counting
__typeof(self) __weak weak_self = self;
^
../subprojects/openFrameworks/libs/openFrameworks/sound/ofAVEngineSoundPlayer.mm:858:57: warning: implicit conversion from 'float' to 'int64_t' (aka 'long long') changes value from 0.30000001 to 0 [-Wliteral-conversion]
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3f), dispatch_get_main_queue(), ^{
~~~~~~~~~~~~~ ^~~~
13 warnings and 5 errors generated.
ninja: build stopped: subcommand failed.
I added it in the line add_project_arguments(['-ObjC++', '-fobjc-arc'], language: ['cpp', 'objcpp'])
, in that same if block, should work.
Loving to see the progress on all of this. I think realistically moving away from custom systems and towards more widely supported standards would be a healthy move.
Apothecary is a Herculean effort at this point and it's so refreshing on linux to run install_dependencies.sh and take care of 90% of the library needs of OF.
which means the equivalent of the apothecary could be published as conan packages, and prebuilt as needed. officially supported platforms could be provided and pinned-to with version numbers, andthey would be assembled for "static" distribution on supported platforms, gathering the libs from conan and tarballing them for the equivalent of the current binary "semver" releases.
Ah interesting @artificiel - I did try requesting static packages with Conan and they didn't exist for macOS but nice that they can be shared publicly if we did build them.
still had some errors and decided to actually look into meson.build
then...
🍾
attached is a modified OF build file (was missing some more frameworks and also .m support for the single pure objc file we have...) it's probably not perfect but it got past the problems meson.build.zip
now, unfortunately no compute shaders on macOS hah so your demo app can't run sorry about that. also not sure but it does not seem to find the data
stuff (but the directory is there). testlog.txt
some questions / refinements to further develop this proof of concept:
1) let's say we want to build examples/3d/3dprimitives
out of thin air, with a meson file, how would that look? (i tried a quick hack starting from the demo app meson.build but i don't know how to specify the OF dependency. (is OF pulled by the ofxGamePad? so would it only need a .wrap for OF?)
2) also on the toplevel meson.build, there are many settings like c++20 — should that be pulled from the dependencies, and OF would provide most? with the idea of making the project files as simple and streamlined as possible, containing nothing more than the absolute minimum requirements
3) i understand the meson argument for "no wildcard/scanning" rationale for the source tree, but for assets, having to provide a catalog for bin/data is a bit of a bummer, especially since it's runtime files and unrelated to compile time. is there a way not to have to specify the contents?
4) and (related to (1)) let's say we want to compile multiple projects (like all the examples) against a single copy of OF, how would that work?
🍾
Awesome ! I am happy you found it easy to hack.
So in the end you only needed Xcode
installed and no other dependency ? Everything was pulled by meson
?
now, unfortunately no compute shaders on macOS hah so your demo app can't run sorry about that
Did not know that it doesn't handle OpenGL compute shaders, but I suppose it can still cross-compile those GLSL shaders to Metal Shading Language. I was reading recently about how Qt handles multi-platform, with QSB and QShader.
also not sure but it does not seem to find the data stuff (but the directory is there)
It probably comes from differences on how OF handles loading relative paths in different platforms.
i don't know how to specify the OF dependency.
You can check the ofxGamepad project which depends directly on OF. But it's basically the same approach:
meson.build
contains a dependency('openFrameworks')
that is either satisfied by being installed in the host, or provided by the .wrap
in the subprojects
folder.executable()
and library()
meson calls.as simple and streamlined as possible, containing nothing more than the absolute minimum requirements
I just pulled that part from my own projects, this block can be entirely removed, except maybe cpp_std
which is by default on c++17. Those options apply only on compiling the source files of the meson project they belong to.
default_options : [
'cpp_std=c++20',
'buildtype=release',
'optimization=3',
'default_library=shared',
# 'prefer_static=true',
'b_ndebug=if-release',
'c_args=-pipe',
'cpp_args=-pipe',
# 'warning_level=3'
]
is there a way not to have to specify the contents?
The rationale still applies to those unfortunately (how to quickly track changes?). You can do this with some caveats.
Now let's question this approach:
data
folder at the same level of the executable. But you can e.g. give it a path of where the data folder is without moving, if we are talking about a use case were the exe is meant to be run directly from the build folder.meson install
to install the library or the compiled program. And in that case, yeah it applies (each file must explicitly be stated).and (related to (1)) let's say we want to compile multiple projects (like all the examples) against a single copy of OF, how would that work?
Two possibilities:
meson install
after meson compile
. In which case meson
will find the library as "host installed" using pkg-config
.MESON_PACKAGE_CACHE_DIR
env var which makes meson
put a copy of every subproject it downloads, and check that folder first before downloading a project from the internet. It doesn't work with git
wraps.An interesting extra information about shipping prebuilt libraries directly with wraps
ok thanks for all this! it helps and is great to see an OF binary out of meson/ninja. obviously as @ofTheo mentions the whole OF package/addon/PG system needs a refresh, and it's difficult to define the correct solution as while the philosophy of things can evolve, they still have to work unilaterally on day 1, be backwards-compatible, stay simple for beginners to get code compiled, ultimately be an improvement, and with less maintaining.
then once that's decided there is a CHUNK of work to be done... which must not be underestimated as in that kind of refactoring, 95% completion is a failure, and it's not really something that can be done progressively.
so let's keep this issue floating for quick reference as the various tendrils of thought weave and tighten around the subject matter.
Great initiative! I also have a proof of concept of a different way of building OF libraries (apothecary alternative) It doesn't have all the libraries yet but it is already building and deploying with github actions. https://github.com/dimitre/ofChalet
and some related discussion https://github.com/openframeworks/apothecary/issues/379
Hey,
I am well aware of #7524 but thought that maybe you'd like to see alternative build systems, in this case meson
Why a build system
Having a proper build system has the following advantages:
openFrameworks
packageable by distrosPotential disadvantages:
As I understand it,
openFrameworks
did in the end develop its homemade build system components (projectGenerator
andApothecary
?) and a way to embed Add-ons, either in-tree or out of tree. So it looks like a "build lock-in" always happens when a project grows big enough.Why
meson
Unfortunately I have no experience whatsoever with
cmake
so I cannot say anything out of my own experience, except that I decided to learn meson instead because it's way more readable and python-like. Otherwise:How to define a meson project
meson.build
file at the root of the project (required)meson.build
files in subfolders (optional)meson.build
fileThe usual process of making meson projects: fill the
meson.build
file at the root of the project.sources = files(...)
inc = include_directories(...)
/usr/include/openFrameworks/../foo.h
when installed usingmeson install
within a build folderdeps = [ dependency('foo'), dependency('bar), ...]
pkgconfig
file using the pkgconfig moduleHow to compile a meson project
This PR: proof-of-concept on the usage of
meson
build systemThis PR, on top of adding initial
meson
build system support toopenFrameworks
, comes with ameson
ified fork of a downstream "user" project to demo how it can be used. The project I chose is interactive-physarum from @Bleuje.Using a Linux distro with all the required
openFrameworks
dependencies installed, exceptlibtess2
andkissfft
,meson
will complain if some are missing. You can clone, pull some deps, compile and run the app without having openframeworks installed nor downloaded anywhere in the systemThe above
meson
ified itopenFrameworks
can potentially handle (out-of-tree) Add-onsopenFrameworks
hasn't been installed on the distro machine.libtess2
andkissfft
which have been "meson wrapped" as subprojectscmake
ormeson
.meson.build
for such projectslibtess2
it wasn't the case, and I wrote themeson.build
file for it myself (it's insubprojects/projectfiles/libtess2/meson.build
)Limitations of this POC PR
meson.build
code is far from being final#defines
and conditionally compiling some of the sources given the target needs to be done