Meson build system proof-of-concept
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:
- Makes
openFrameworkspackageable by distros - Makes life easier for its users
Potential disadvantages:
- Build system lock-in
- Users and devs need to learn the chosen build system
As I understand it, openFrameworks did in the end develop its homemade build system components (projectGenerator and Apothecary ?) 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:
- List of projects using it
- Short comparisons with other build systems.
- Supports Windows, Mac, Linux, Emscripten
- Emscripten is supported as a cross-compilation (I've already done it with a C++ project)
- I do not know about Android and how you are currently supporting Android
How to define a meson project
- With a
meson.buildfile at the root of the project (required)- can have
meson.buildfiles in subfolders (optional)
- can have
- Each source file to be compiled must explicitly be added manually to the
meson.buildfile - Has a python-like syntax but not a full programming language
The usual process of making meson projects: fill the meson.build file at the root of the project.
- Define the project, its language, version and default meson built-in build options
project('openFrameworks', 'cpp', version : '0.12.0', 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' # highly recommended # 'werror=true' # highly recommended ] ) `` - Make an array of the files to compile
-
sources = files(...)
-
- Define the folders that contain the headers of the project so it can be properly compiled
- using include_directories()
-
inc = include_directories(...)
- Make an array of the headers that are meant to be installed on the system
- Not useful for building but useful for packaging, so headers end up in
/usr/include/openFrameworks/../foo.hwhen installed usingmeson installwithin a build folder- using install_headers
- Not useful for building but useful for packaging, so headers end up in
- Make array of project dependencies
- using dependency()
-
deps = [ dependency('foo'), dependency('bar), ...]
- Define the library (when there is one)
- using library()
lib = library('openFrameworks', sources, include_directories: inc, dependencies: deps,
- using library()
- Handle how this project can be found and used by downstream projects
- When installed on the system: can generate a
pkgconfigfile using the pkgconfig modulepkg = import('pkgconfig') pkg.generate(lib) - When pulled directly as meson subproject through wraps
openframeworks_dep = declare_dependency(link_with: lib, include_directories: inc, dependencies: deps) meson.override_dependency('openFrameworks', openframeworks_dep)
- When installed on the system: can generate a
How to compile a meson project
# Create build folder within the source folder
meson setup build -D optionA=something -D optionB=somethingelse
# Go in the folder and compile
cd build && meson compile
This PR: proof-of-concept on the usage of meson build system
This PR, on top of adding initial meson build system support to openFrameworks, comes with a mesonified 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, except libtess2 and kissfft, 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 system
git clone https://github.com/AdelKS/interactive-physarum.git --depth=1
cd interactive-physarum
meson setup build
cd build
meson compile
meson test # used here to run the app (just so it can properly find the files it wants to load)
The above
- Uses an out-of-tree add-on ofxGamepad
- I forked it and
mesonified it- This showcases how
openFrameworkscan potentially handle (out-of-tree) Add-ons
- This showcases how
- I forked it and
- Can be entirely compiled even if
openFrameworkshasn't been installed on the distro machine.- Most of the dependencies currently are expected out of the host distro.
- Except
libtess2andkissfftwhich have been "meson wrapped" as subprojects- It demonstrates how external dependencies could be handled by meson to enable users to just compile the project they want without relying on their distro packaging its dependencies.
- Requires such projects to be using either
cmakeormeson. - Otherwise one needs to write a
meson.buildfor such projects- The community already did with many projects
- In the case of
libtess2it wasn't the case, and I wrote themeson.buildfile for it myself (it's insubprojects/projectfiles/libtess2/meson.build)
- Requires such projects to be using either
- It demonstrates how external dependencies could be handled by meson to enable users to just compile the project they want without relying on their distro packaging its dependencies.
- Except
- Most of the dependencies currently are expected out of the host distro.
Limitations of this POC PR
- I've only tested this project and only on Linux (on Gentoo and Archlinux).
- The
meson.buildcode is far from being final- Needs to be tested on all supported platforms
-
#definesand conditionally compiling some of the sources given the target needs to be done
interesting! NB: zero experience with meson here
-
are
Makefile,addons.makeandconfig.make"generated" and required? if not perhaps remove them from the repository to make it as clean as possible; -
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 anaddon_config.mk(potentionally platform-tailored) and won't suddenly sport fresh config files. can meson take the list inaddons.makecheck for presence in$OF_ROOT/addons, and produce things as needed by meson? perhaps it's a role for Project Generator, which could generate ameson.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. -
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 mesonified 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:
- added many dependencies that wrapdb already offered in this commit
- restricted some linux specific things
- added OIS wrap to ofxGamepad
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:
-
let's say we want to build
examples/3d/3dprimitivesout 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?) -
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
-
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?
-
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.buildcontains adependency('openFrameworks')that is either satisfied by being installed in the host, or provided by the.wrapin thesubprojectsfolder. - That dependency is fed to every
executable()andlibrary()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:
- I had to do move some runtime files over to the build folder in my case because the code expects a
datafolder 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. - In theory, one does
meson installto 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:
- Install OF on the host machine by doing
meson installaftermeson compile. In which casemesonwill find the library as "host installed" usingpkg-config. - Use
MESON_PACKAGE_CACHE_DIRenv var which makesmesonput a copy of every subproject it downloads, and check that folder first before downloading a project from the internet. It doesn't work withgitwraps.
An interesting extra information about shipping prebuilt libraries directly with wraps