2#include <Library/LibrarySettings.hpp>
4#include <score/application/ApplicationContext.hpp>
6#include <QCoreApplication>
13#include <llvm/ADT/StringMap.h>
14#include <llvm/ADT/StringRef.h>
16#if LLVM_VERSION_MAJOR >= 17
17#include <llvm/TargetParser/Host.h>
18#include <llvm/TargetParser/Triple.h>
20#include <llvm/Support/Host.h>
27#if __has_include(<llvm/Config/llvm-config-64.h>)
28#include <llvm/Config/llvm-config-64.h>
29#elif __has_include(<llvm/Config/llvm-config.h>)
30#include <llvm/Config/llvm-config.h>
33#if defined(__has_feature)
34#if __has_feature(address_sanitizer) && !defined(__SANITIZE_ADDRESS__)
35#define __SANITIZE_ADDRESS__ 1
39#if defined(SCORE_FHS_BUILD)
40#define SCORE_USE_DISTRO_SYSROOT 1
42#if defined(SCORE_DEPLOYMENT_BUILD)
43#define SCORE_USE_DISTRO_SYSROOT 0
45#define SCORE_USE_DISTRO_SYSROOT 1
49#include <JitCpp/JitOptions.hpp>
51#include <score_git_info.hpp>
56static inline std::string locateSDK()
58 if(QString sdk = qgetenv(
"SCORE_JIT_SDK"); !sdk.isEmpty())
59 return sdk.toStdString();
62 QString path = ctx.getSDKPath();
64 if(QString libPath = QStringLiteral(
"%1/%2/usr").arg(path).arg(SCORE_TAG_NO_V);
65 QDir(libPath +
"/include/c++").exists())
67 return libPath.toStdString();
70 if(QString libPath = path +
"/usr"; QDir(libPath +
"/include/c++").exists())
72 return libPath.toStdString();
75 auto appFolder = QCoreApplication::instance()->applicationDirPath();
83 return d.absolutePath().toStdString();
85#elif defined(__linux__)
90 return d.absolutePath().toStdString();
92#elif defined(__APPLE__)
96 if(d.cd(
"Frameworks"))
98 if(d.cd(
"Score.Framework"))
100 return d.absolutePath().toStdString();
103 auto framework = QString(appFolder +
"/Score.Framework");
104 if(QDir{}.exists(framework))
105 return framework.toStdString();
107 return "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/"
108 "Developer/SDKs/MacOSX.sdk/usr";
113#if defined(__APPLE__)
114 return "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/"
115 "Developer/SDKs/MacOSX.sdk/usr";
117 if(QFileInfo(
"/usr/include/c++").isDir())
123 return ctx.getSDKPath().toStdString();
141 static constexpr bool deploying =
true;
143 static constexpr bool deploying =
false;
150 ret.path = locateSDK();
152 ret.sdk_kind = located_sdk::none;
153 if(ret.path.starts_with(
"/usr") || ret.path.starts_with(
"/Applications"))
154 ret.sdk_kind = located_sdk::official;
156 ret.sdk_kind = located_sdk::platform;
162 if(ret.sdk_kind == located_sdk::platform
163 && QDir(QString::fromStdString(ret.path)).exists(
"lib/cmake/score/prototype.cpp.in"))
164 ret.sdk_kind = located_sdk::official;
167 QDir dir(QString::fromStdString(ret.path));
169 ret.sdk_kind = located_sdk::none;
171 if(!dir.cd(
"include") || !dir.cd(
"c++"))
173 qDebug() <<
"Unable to locate standard headers, fallback to /usr";
176 if(!dir.cd(
"include") || !dir.cd(
"c++"))
178 qDebug() <<
"Unable to locate any standard headers, install C++ development "
180 throw std::runtime_error(
"Unable to compile");
182 ret.sdk_kind = located_sdk::platform;
195static inline std::string locateOrcRuntime()
197 if(QString p = qgetenv(
"SCORE_JIT_ORC_RUNTIME"); !p.isEmpty())
198 return p.toStdString();
200 auto sdk = locateSDKWithFallback();
204 const QString base = QString::fromStdString(sdk.path);
205 const QString parent = QFileInfo(base).absolutePath();
206 const QStringList roots{base, parent,
207 parent +
"/llvm", parent +
"/llvm-libs",
208 base +
"/llvm", base +
"/llvm-libs"};
209 for(
const QString& root : roots)
212 const QString clangLibs = root +
"/lib/clang";
213 if(!QDir(clangLibs).exists())
216 clangLibs, {
"liborc_rt*.a"}, QDir::Files, QDirIterator::Subdirectories);
218 return it.next().toStdString();
229static inline std::string locateBuiltinsRuntime()
231 if(QString p = qgetenv(
"SCORE_JIT_BUILTINS"); !p.isEmpty())
232 return p.toStdString();
234 auto sdk = locateSDKWithFallback();
238 const QString base = QString::fromStdString(sdk.path);
239 const QString parent = QFileInfo(base).absolutePath();
240 const QStringList roots{base, parent,
241 parent +
"/llvm", parent +
"/llvm-libs",
242 base +
"/llvm", base +
"/llvm-libs"};
244 for(
const QString& root : roots)
246 const QString clangLibs = root +
"/lib/clang";
247 if(!QDir(clangLibs).exists())
250 clangLibs, {
"libclang_rt.builtins*.a"}, QDir::Files,
251 QDirIterator::Subdirectories);
254 const QString f = it.next();
255 if(f.contains(
"/windows/") || f.contains(
"\\windows\\"))
256 return f.toStdString();
257 if(fallback.isEmpty())
261 return fallback.toStdString();
270static inline std::string locateMingwRuntimeLib(
const char* env,
const char* name)
272 if(QString p = qgetenv(env); !p.isEmpty())
273 return p.toStdString();
275 auto sdk = locateSDKWithFallback();
279 const QString base = QString::fromStdString(sdk.path);
280 const QString parent = QFileInfo(base).absolutePath();
281 const QStringList roots{base, parent,
282 parent +
"/llvm", parent +
"/llvm-libs",
283 base +
"/llvm", base +
"/llvm-libs"};
284 const QString lib = QString::fromUtf8(name);
285 for(
const QString& root : roots)
288 for(
const QString& p :
289 {QString(root +
"/lib/" + lib),
290 QString(root +
"/x86_64-w64-mingw32/lib/" + lib)})
292 return p.toStdString();
297static inline std::string locateMingwexRuntime()
299 return locateMingwRuntimeLib(
"SCORE_JIT_MINGWEX",
"libmingwex.a");
302static inline std::string locateUcrtImportLib()
304 return locateMingwRuntimeLib(
"SCORE_JIT_UCRT",
"libucrt.a");
308populateCompileOptions(std::vector<std::string>& args, CompilerOptions opts)
310 args.push_back(
"-triple");
311 const std::string processTriple = llvm::sys::getProcessTriple();
312 args.push_back(processTriple);
322 if(llvm::Triple(processTriple).isOSBinFormatCOFF())
324 args.push_back(
"-mcmodel=large");
338 args.push_back(
"-D_UCRT");
346 args.push_back(
"-D__USE_MINGW_ANSI_STDIO=0");
347 args.push_back(
"-fno-use-init-array");
348 args.push_back(
"-funwind-tables=2");
349 args.push_back(
"-fno-sized-deallocation");
352 args.push_back(
"-target-cpu");
353 args.push_back(llvm::sys::getHostCPUName().lower());
356 llvm::StringMap<bool> HostFeatures;
357#if LLVM_VERSION_MAJOR < 19
358 bool ok = llvm::sys::getHostCPUFeatures(HostFeatures);
360 constexpr bool ok =
true;
361 HostFeatures = llvm::sys::getHostCPUFeatures();
365 for(
const llvm::StringMapEntry<bool>& F : HostFeatures)
367 args.push_back(
"-target-feature");
368 args.push_back((F.second ?
"+" :
"-") + F.first().str());
379 args.push_back(
"-std=gnu++23");
380 args.push_back(
"-disable-free");
381 args.push_back(
"-fdeprecated-macro");
382 args.push_back(
"-fmath-errno");
387 args.push_back(
"-mthread-model");
388 args.push_back(
"posix");
390 args.push_back(
"-mconstructor-aliases");
395 args.push_back(
"-fno-use-cxa-atexit");
399 args.push_back(
"-fno-signed-zeros");
400 args.push_back(
"-mreassociate");
401 args.push_back(
"-freciprocal-math");
402 args.push_back(
"-fno-rounding-math");
405 args.push_back(
"-ffp-contract=fast");
407#if !defined(__linux__)
410 args.push_back(
"-Ofast");
411 args.push_back(
"-menable-no-infs");
412 args.push_back(
"-menable-no-nans");
413 args.push_back(
"-ffinite-math-only");
414 args.push_back(
"-ffast-math");
416 args.push_back(
"-O3");
417 args.push_back(
"-fno-builtin");
421 args.push_back(
"-mno-stack-arg-probe");
423 args.push_back(
"-fgnuc-version=4.2.1");
425#if defined(__APPLE__)
426 args.push_back(
"-fmax-type-align=16");
434 args.push_back(
"-fblocks");
444 args.push_back(
"-Wno-elaborated-enum-base");
446 args.push_back(
"-mrelocation-model");
447 args.push_back(
"pic");
448 args.push_back(
"-pic-level");
453 args.push_back(
"-fvisibility=hidden");
455 args.push_back(
"-fvisibility-inlines-hidden");
463#if LLVM_VERSION_MAJOR >= 22
464 const bool useNativePlatform = !locateOrcRuntime().empty();
466 const bool useNativePlatform =
false;
473 if(!useNativePlatform || !llvm::Triple(processTriple).isOSBinFormatMachO())
475 args.push_back(
"-ftls-model=local-exec");
476 args.push_back(
"-femulated-tls");
483 args.push_back(
"-ftls-model=global-dynamic");
487 args.push_back(
"-mrelax-all");
488 args.push_back(
"-disable-llvm-verifier");
489 args.push_back(
"-discard-value-names");
490#if defined(__SANITIZE_ADDRESS__)
511 args.push_back(
"-fno-assume-sane-operator-new");
513 args.push_back(
"-stack-protector");
515 if(opts.NoExceptions)
517 args.push_back(
"-fno-rtti");
521#if LLVM_VERSION_MAJOR <= 13
522 args.push_back(
"-munwind-tables");
525 args.push_back(
"-fcxx-exceptions");
526 args.push_back(
"-fexceptions");
527 args.push_back(
"-fexternc-nounwind");
529 args.push_back(
"-exception-model=seh");
532 args.push_back(
"-faddrsig");
535 args.push_back(
"-vectorize-loops");
536 args.push_back(
"-vectorize-slp");
539static inline void populateDefinitions(std::vector<std::string>& args)
541#if defined(__APPLE__)
543 args.push_back(
"-DMOODYCAMEL_MAYBE_ALIGN_TO_CACHELINE=");
545#define XSTR(s) STR(s)
548#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
549 args.push_back(
"-DBOOST_ASIO_ENABLE_BUFFER_DEBUGGING");
551#if defined(BOOST_ASIO_HAS_STD_INVOKE_RESULT)
553 "-DBOOST_ASIO_HAS_STD_INVOKE_RESULT=" XSTR(BOOST_ASIO_HAS_STD_INVOKE_RESULT));
555#if defined(BOOST_MATH_DISABLE_FLOAT128)
556 args.push_back(
"-DBOOST_MATH_DISABLE_FLOAT128=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
558#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
559 args.push_back(
"-DBOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING");
561#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
562 args.push_back(
"-DBOOST_MULTI_INDEX_ENABLE_SAFE_MODE");
564#if defined(BOOST_NO_RTTI)
565 args.push_back(
"-DBOOST_NO_RTTI=" XSTR(BOOST_NO_RTTI));
567#if defined(FMT_SHARED)
568 args.push_back(
"-DFMT_SHARED=" XSTR(FMT_SHARED));
576#if defined(FMT_HEADER_ONLY)
577 args.push_back(
"-DFMT_HEADER_ONLY=" XSTR(FMT_HEADER_ONLY));
579#if defined(FMT_STATIC_THOUSANDS_SEPARATOR)
581 "-DFMT_STATIC_THOUSANDS_SEPARATOR=" XSTR(FMT_STATIC_THOUSANDS_SEPARATOR));
583#if defined(FMT_USE_FLOAT128)
584 args.push_back(
"-DFMT_USE_FLOAT128=" XSTR(FMT_USE_FLOAT128));
586#if defined(FMT_USE_INT128)
587 args.push_back(
"-DFMT_USE_INT128=" XSTR(FMT_USE_INT128));
589#if defined(FMT_USE_LONG_DOUBLE)
590 args.push_back(
"-DFMT_USE_LONG_DOUBLE=" XSTR(FMT_USE_LONG_DOUBLE));
592#if defined(LIBREMIDI_ALSA)
593 args.push_back(
"-DLIBREMIDI_ALSA");
595#if defined(LIBREMIDI_HAS_JACK_GET_VERSION)
596 args.push_back(
"-DLIBREMIDI_HAS_JACK_GET_VERSION");
598#if defined(LIBREMIDI_HAS_UDEV)
599 args.push_back(
"-DLIBREMIDI_HAS_UDEV");
601#if defined(LIBREMIDI_JACK)
602 args.push_back(
"-DLIBREMIDI_JACK");
604#if defined(LIBREMIDI_KEYBOARD)
605 args.push_back(
"-DLIBREMIDI_KEYBOARD");
607#if defined(LIBREMIDI_PIPEWIRE)
608 args.push_back(
"-DLIBREMIDI_PIPEWIRE");
610#if defined(LIBREMIDI_PIPEWIRE_UMP)
611 args.push_back(
"-DLIBREMIDI_PIPEWIRE_UMP");
613#if defined(LIBREMIDI_USE_BOOST)
614 args.push_back(
"-DLIBREMIDI_USE_BOOST");
616#if defined(LIBREMIDI_WEAKJACK)
617 args.push_back(
"-DLIBREMIDI_WEAKJACK");
619#if defined(QT_CORE_LIB)
620 args.push_back(
"-DQT_CORE_LIB");
622#if defined(QT_DISABLE_DEPRECATED_BEFORE)
623 args.push_back(
"-DQT_DISABLE_DEPRECATED_BEFORE=" XSTR(QT_DISABLE_DEPRECATED_BEFORE));
625#if defined(QT_GUI_LIB)
626 args.push_back(
"-DQT_GUI_LIB");
628#if defined(QT_NETWORK_LIB)
629 args.push_back(
"-DQT_NETWORK_LIB");
631#if defined(QT_NO_JAVA_STYLE_ITERATORS)
632 args.push_back(
"-DQT_NO_JAVA_STYLE_ITERATORS");
634#if defined(QT_NO_KEYWORDS)
635 args.push_back(
"-DQT_NO_KEYWORDS");
637#if defined(QT_NO_LINKED_LIST)
638 args.push_back(
"-DQT_NO_LINKED_LIST");
640#if defined(QT_NO_NARROWING_CONVERSIONS_IN_CONNECT)
641 args.push_back(
"-DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT");
643#if defined(QT_NO_USING_NAMESPACE)
644 args.push_back(
"-DQT_NO_USING_NAMESPACE");
646#if defined(QT_OPENGL_LIB)
647 args.push_back(
"-DQT_OPENGL_LIB");
649#if defined(QT_QMLINTEGRATION_LIB)
650 args.push_back(
"-DQT_QMLINTEGRATION_LIB");
652#if defined(QT_QML_LIB)
653 args.push_back(
"-DQT_QML_LIB");
655#if defined(QT_SERIALPORT_LIB)
656 args.push_back(
"-DQT_SERIALPORT_LIB");
658#if defined(QT_SHADERTOOLS_LIB)
659 args.push_back(
"-DQT_SHADERTOOLS_LIB");
661#if defined(QT_STATEMACHINE_LIB)
662 args.push_back(
"-DQT_STATEMACHINE_LIB");
664#if defined(QT_USE_QSTRINGBUILDER)
665 args.push_back(
"-DQT_USE_QSTRINGBUILDER");
667#if defined(QT_WEBSOCKETS_LIB)
668 args.push_back(
"-DQT_WEBSOCKETS_LIB");
670#if defined(QT_WIDGETS_LIB)
671 args.push_back(
"-DQT_WIDGETS_LIB");
673#if defined(RAPIDJSON_HAS_STDSTRING)
674 args.push_back(
"-DRAPIDJSON_HAS_STDSTRING=" XSTR(RAPIDJSON_HAS_STDSTRING));
676#if defined(SCORE_DEBUG)
677 args.push_back(
"-DSCORE_DEBUG");
679#if defined(SCORE_LIB_BASE)
680 args.push_back(
"-DSCORE_LIB_BASE");
682#if defined(SCORE_LIB_DEVICE)
683 args.push_back(
"-DSCORE_LIB_DEVICE");
685#if defined(SCORE_LIB_INSPECTOR)
686 args.push_back(
"-DSCORE_LIB_INSPECTOR");
688#if defined(SCORE_LIB_LOCALTREE)
689 args.push_back(
"-DSCORE_LIB_LOCALTREE");
691#if defined(SCORE_LIB_PROCESS)
692 args.push_back(
"-DSCORE_LIB_PROCESS");
694#if defined(SCORE_LIB_STATE)
695 args.push_back(
"-DSCORE_LIB_STATE");
697#if defined(SCORE_PLUGIN_AUDIO)
698 args.push_back(
"-DSCORE_PLUGIN_AUDIO");
700#if defined(SCORE_PLUGIN_AUTOMATION)
701 args.push_back(
"-DSCORE_PLUGIN_AUTOMATION");
703#if defined(SCORE_PLUGIN_AVND)
704 args.push_back(
"-DSCORE_PLUGIN_AVND");
706#if defined(SCORE_PLUGIN_CURVE)
707 args.push_back(
"-DSCORE_PLUGIN_CURVE");
709#if defined(SCORE_PLUGIN_DATAFLOW)
710 args.push_back(
"-DSCORE_PLUGIN_DATAFLOW");
712#if defined(SCORE_PLUGIN_DEVICEEXPLORER)
713 args.push_back(
"-DSCORE_PLUGIN_DEVICEEXPLORER");
715#if defined(SCORE_PLUGIN_ENGINE)
716 args.push_back(
"-DSCORE_PLUGIN_ENGINE");
718#if defined(SCORE_PLUGIN_GFX)
719 args.push_back(
"-DSCORE_PLUGIN_GFX");
721#if defined(SCORE_PLUGIN_LIBRARY)
722 args.push_back(
"-DSCORE_PLUGIN_LIBRARY");
724#if defined(SCORE_PLUGIN_MEDIA)
725 args.push_back(
"-DSCORE_PLUGIN_MEDIA");
727#if defined(SCORE_PLUGIN_SCENARIO)
728 args.push_back(
"-DSCORE_PLUGIN_SCENARIO");
730#if defined(SCORE_PLUGIN_TRANSPORT)
731 args.push_back(
"-DSCORE_PLUGIN_TRANSPORT");
733#if defined(SERVUS_USE_AVAHI_CLIENT)
734 args.push_back(
"-DSERVUS_USE_AVAHI_CLIENT");
736#if defined(SPDLOG_COMPILED_LIB)
737 args.push_back(
"-DSPDLOG_COMPILED_LIB=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
739#if defined(SPDLOG_DEBUG_ON)
740 args.push_back(
"-DSPDLOG_DEBUG_ON=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
742#if defined(SPDLOG_FMT_EXTERNAL)
743 args.push_back(
"-DSPDLOG_FMT_EXTERNAL=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
745#if defined(SPDLOG_NO_DATETIME)
746 args.push_back(
"-DSPDLOG_NO_DATETIME=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
748#if defined(SPDLOG_NO_NAME)
749 args.push_back(
"-DSPDLOG_NO_NAME=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
751#if defined(SPDLOG_NO_THREAD_ID)
752 args.push_back(
"-DSPDLOG_NO_THREAD_ID=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
754#if defined(SPDLOG_SHARED_LIB)
755 args.push_back(
"-DSPDLOG_SHARED_LIB=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
757#if defined(SPDLOG_TRACE_ON)
758 args.push_back(
"-DSPDLOG_TRACE_ON=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
760#if defined(TINYSPLINE_DOUBLE_PRECISION)
761 args.push_back(
"-DTINYSPLINE_DOUBLE_PRECISION");
764#if defined(SCORE_DEBUG)
765 args.push_back(
"-DSCORE_DEBUG");
769 args.push_back(
"-D_GNU_SOURCE=1");
770 args.push_back(
"-D__STDC_CONSTANT_MACROS");
771 args.push_back(
"-D__STDC_FORMAT_MACROS");
772 args.push_back(
"-D__STDC_LIMIT_MACROS");
773#if defined(FFTW_SINGLE_ONLY)
774 args.push_back(
"-DFFTW_SINGLE_ONLY");
775#elif defined(FFTW_DOUBLE_ONLY)
776 args.push_back(
"-DFFTW_DOUBLE_ONLY");
780static inline auto getPotentialTriples()
782 std::vector<QString> triples;
783 triples.push_back(LLVM_DEFAULT_TARGET_TRIPLE);
784 triples.push_back(LLVM_HOST_TRIPLE);
785#if defined(__x86_64__)
786 triples.push_back(
"x86_64-pc-linux-gnu");
787 triples.push_back(
"x86_64-unknown-linux-gnu");
788#elif defined(__i686__)
789 triples.push_back(
"i686-pc-linux-gnu");
790#elif defined(__i586__)
791 triples.push_back(
"i586-pc-linux-gnu");
792#elif defined(__i486__)
793 triples.push_back(
"i486-pc-linux-gnu");
794#elif defined(__i386__)
795 triples.push_back(
"i386-pc-linux-gnu");
796#elif defined(__arm__)
797 triples.push_back(
"armv8-none-linux-gnueabi");
798 triples.push_back(
"armv8-pc-linux-gnueabi");
799 triples.push_back(
"armv8-none-linux-gnu");
800 triples.push_back(
"armv8-pc-linux-gnu");
801 triples.push_back(
"armv7-none-linux-gnueabi");
802 triples.push_back(
"armv7-pc-linux-gnueabi");
803 triples.push_back(
"armv7-none-linux-gnu");
804 triples.push_back(
"armv7-pc-linux-gnu");
805 triples.push_back(
"armv6-none-linux-gnueabi");
806 triples.push_back(
"armv6-pc-linux-gnueabi");
807 triples.push_back(
"armv6-none-linux-gnu");
808 triples.push_back(
"armv6-pc-linux-gnu");
809#elif defined(__aarch64__)
810 triples.push_back(
"aarch64-none-linux-gnueabi");
811 triples.push_back(
"aarch64-pc-linux-gnueabi");
812 triples.push_back(
"aarch64-unknown-linux-gnueabi");
813 triples.push_back(
"aarch64-none-linux-gnu");
814 triples.push_back(
"aarch64-pc-linux-gnu");
815 triples.push_back(
"aarch64-unknown-linux-gnu");
816 triples.push_back(
"aarch64-redhat-linux");
860static inline void populateIncludeDirs(std::vector<std::string>& args)
862 auto sdk_location = locateSDKWithFallback();
863 auto& sdk = sdk_location.path;
864 auto qsdk = QString::fromStdString(sdk);
866 qDebug() <<
"SDK located: " << qsdk;
867 std::string llvm_lib_version = SCORE_LLVM_VERSION;
868#if defined(__APPLE__) && SCORE_FHS_BUILD
869 llvm_lib_version =
"13.0.0";
872 QDir resDir = QString(qsdk +
"/lib/clang");
873 auto entries = resDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
874 if(!entries.empty() && !entries.contains(SCORE_LLVM_VERSION))
875 llvm_lib_version = entries.front().toStdString();
877#if defined(__APPLE__) && SCORE_FHS_BUILD
878 std::string appleSharedSdk
879 =
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
881 args.push_back(
"-resource-dir");
882 args.push_back(appleSharedSdk +
"/lib/clang/" + llvm_lib_version);
884 args.push_back(
"-resource-dir");
885 args.push_back(sdk +
"/lib/clang/" + llvm_lib_version);
888#if defined(_LIBCPP_VERSION)
889 args.push_back(
"-stdlib=libc++");
890 args.push_back(
"-internal-isystem");
892#if defined(__APPLE__) && SCORE_FHS_BUILD
893 args.push_back(appleSharedSdk +
"/include/c++/v1");
895 args.push_back(sdk +
"/include/c++/v1");
902 const QDir incdir(qsdk +
"/include");
903 for(
const auto& d : incdir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
905 if(QFileInfo::exists(qsdk +
"/include/" + d +
"/c++/v1/__config_site"))
907 args.push_back(
"-internal-isystem");
908 args.push_back(sdk +
"/include/" + d.toStdString() +
"/c++/v1");
914#elif defined(_GLIBCXX_RELEASE)
918 const auto libstdcpp_major = QString::number(_GLIBCXX_RELEASE);
920 QDir cpp_dir{
"/usr/include/c++"};
922 QDirIterator cpp_it{cpp_dir};
923 while(cpp_it.hasNext())
926 auto ver = cpp_it.fileName();
927 if(!ver.isEmpty() && ver.startsWith(libstdcpp_major))
929 auto gcc = ver.toStdString();
932 args.push_back(
"-internal-isystem");
933 args.push_back(
"/usr/include/c++/" + gcc);
936 for(
auto& triple : getPotentialTriples())
938 if(cpp_dir.exists(triple))
941 args.push_back(
"-internal-isystem");
942 args.push_back(
"/usr/include/c++/" + gcc +
"/" + triple.toStdString());
953#if defined(__APPLE__) && SCORE_FHS_BUILD
954 args.push_back(
"-internal-isystem");
955 args.push_back(appleSharedSdk +
"/lib/clang/" + llvm_lib_version +
"/include");
956 args.push_back(
"-internal-externc-isystem");
958 "/Applications/Xcode.app/Contents/Developer//Platforms/MacOSX.platform/Developer/"
959 "SDKs/MacOSX.sdk/usr/include");
961 args.push_back(
"-internal-isystem");
962 args.push_back(sdk +
"/lib/clang/" + llvm_lib_version +
"/include");
963 args.push_back(
"-internal-externc-isystem");
964 args.push_back(sdk +
"/include");
967#if defined(__APPLE__)
972 if(QFileInfo{qsdk +
"/include/macos-sdks"}.isDir())
973 args.push_back(
"-isystem" + sdk +
"/include/macos-sdks");
985 auto include = [&](
const std::string& path) {
986 std::string path_to_include = sdk +
"/include/" + path;
987 auto qpath = QString::fromStdString(path_to_include);
988 if(!QFileInfo{qpath}.isDir())
990 qDebug() <<
"Trying to include non-existent path: " << qpath;
994 args.push_back(
"-isystem" + sdk +
"/include/" + path);
998#if defined(__linux__)
1000#if defined(__x86_64__)
1001 include(
"x86_64-linux-gnu");
1003 include(
"aarch64-linux-gnu");
1008 std::string qt_folder =
"qt";
1009 if(QFile::exists(qsdk +
"/include/qt6/QtCore"))
1012 QDirIterator qtVersionFolder{
1013 qsdk +
"/include/" + QString::fromStdString(qt_folder) +
"/QtCore",
1015 QDir::Filter::Dirs | QDir::Filter::NoDotAndDotDot,
1017 std::string qt_version = QT_VERSION_STR;
1018 if(qtVersionFolder.hasNext())
1020 QDir sub = qtVersionFolder.next();
1021 qt_version = sub.dirName().toStdString();
1023 include(qt_folder +
"");
1024 include(qt_folder +
"/QtCore");
1025 include(qt_folder +
"/QtCore/" + qt_version);
1026 include(qt_folder +
"/QtCore/" + qt_version +
"/QtCore");
1027 include(qt_folder +
"/QtGui");
1028 include(qt_folder +
"/QtGui/" + qt_version);
1029 include(qt_folder +
"/QtGui/" + qt_version +
"/QtGui");
1030 include(qt_folder +
"/QtWidgets");
1031 include(qt_folder +
"/QtWidgets/" + qt_version);
1032 include(qt_folder +
"/QtWidgets/" + qt_version +
"/QtWidgets");
1033 include(qt_folder +
"/QtQml");
1034 include(qt_folder +
"/QtQml/" + qt_version);
1035 include(qt_folder +
"/QtQml/" + qt_version +
"/QtQml");
1036 include(qt_folder +
"/QtQuick");
1037 include(qt_folder +
"/QtQuick/" + qt_version);
1038 include(qt_folder +
"/QtQuick/" + qt_version +
"/QtQuick");
1039 include(qt_folder +
"/QtXml");
1040 include(qt_folder +
"/QtNetwork");
1041 include(qt_folder +
"/QtSvg");
1042 include(qt_folder +
"/QtSql");
1043 include(qt_folder +
"/QtOpenGL");
1044 include(qt_folder +
"/QtShaderTools");
1045 include(qt_folder +
"/QtShaderTools/" + qt_version);
1046 include(qt_folder +
"/QtShaderTools/" + qt_version +
"/QtShaderTools");
1047 include(qt_folder +
"/QtSerialPort");
1049 if(sdk_location.sdk_kind == located_sdk::official && sdk_location.deploying)
1055 auto thirdparty_include_dirs = {
1056 "/3rdparty/libossia/3rdparty/boost_1_88_0",
1057 "/3rdparty/libossia/3rdparty/nano-signal-slot/include",
1058 "/3rdparty/libossia/3rdparty/spdlog/include",
1059 "/3rdparty/libossia/3rdparty/dr_libs",
1060 "/3rdparty/libossia/3rdparty/Flicks",
1061 "/3rdparty/libossia/3rdparty/fmt/include",
1062 "/3rdparty/libossia/3rdparty/magic_enum/include",
1063 "/3rdparty/libossia/3rdparty/readerwriterqueue",
1064 "/3rdparty/libossia/3rdparty/concurrentqueue",
1065 "/3rdparty/libossia/3rdparty/SmallFunction/smallfun/include",
1066 "/3rdparty/libossia/3rdparty/websocketpp",
1067 "/3rdparty/libossia/3rdparty/rapidjson/include",
1068 "/3rdparty/libossia/3rdparty/libremidi/include",
1069 "/3rdparty/libossia/3rdparty/oscpack",
1070 "/3rdparty/libossia/3rdparty/rnd/include",
1071 "/3rdparty/libossia/3rdparty/span/include",
1072 "/3rdparty/libossia/3rdparty/tuplet/include",
1073 "/3rdparty/libossia/3rdparty/unordered_dense/include",
1074 "/3rdparty/libossia/3rdparty/multi_index/include",
1075 "/3rdparty/libossia/3rdparty/verdigris/src",
1076 "/3rdparty/libossia/3rdparty/weakjack",
1078 for(
auto path : thirdparty_include_dirs)
1080 args.push_back(
"-isystem" + std::string(SCORE_ROOT_SOURCE_DIR) + path);
1082 auto src_include_dirs
1083 = {
"/3rdparty/libossia/src",
1084 "/3rdparty/avendish/include",
1086 "/src/plugins/score-lib-state",
1087 "/src/plugins/score-lib-device",
1088 "/src/plugins/score-lib-process",
1089 "/src/plugins/score-lib-inspector",
1090 "/src/plugins/score-plugin-avnd",
1091 "/src/plugins/score-plugin-gfx",
1092 "/src/plugins/score-plugin-jit",
1093 "/src/plugins/score-plugin-nodal",
1094 "/src/plugins/score-plugin-remotecontrol",
1095 "/src/plugins/score-plugin-audio",
1096 "/src/plugins/score-plugin-curve",
1097 "/src/plugins/score-plugin-dataflow",
1098 "/src/plugins/score-plugin-engine",
1099 "/src/plugins/score-plugin-scenario",
1100 "/src/plugins/score-plugin-library",
1101 "/src/plugins/score-plugin-deviceexplorer",
1102 "/src/plugins/score-plugin-media",
1103 "/src/plugins/score-plugin-loop",
1104 "/src/plugins/score-plugin-midi",
1105 "/src/plugins/score-plugin-protocols",
1106 "/src/plugins/score-plugin-recording",
1107 "/src/plugins/score-plugin-automation",
1108 "/src/plugins/score-plugin-js",
1109 "/src/plugins/score-plugin-mapping"};
1111 for(
auto path : src_include_dirs)
1113 args.push_back(
"-I" + std::string(SCORE_ROOT_SOURCE_DIR) + path);
1119 "/src/plugins/score-lib-state",
1120 "/src/plugins/score-lib-device",
1121 "/src/plugins/score-lib-process",
1122 "/src/plugins/score-lib-inspector",
1123 "/src/plugins/score-plugin-avnd",
1124 "/src/plugins/score-plugin-gfx",
1125 "/src/plugins/score-plugin-jit",
1126 "/src/plugins/score-plugin-nodal",
1127 "/src/plugins/score-plugin-remotecontrol",
1128 "/src/plugins/score-plugin-audio",
1129 "/src/plugins/score-plugin-curve",
1130 "/src/plugins/score-plugin-dataflow",
1131 "/src/plugins/score-plugin-engine",
1132 "/src/plugins/score-plugin-scenario",
1133 "/src/plugins/score-plugin-library",
1134 "/src/plugins/score-plugin-deviceexplorer",
1135 "/src/plugins/score-plugin-media",
1136 "/src/plugins/score-plugin-loop",
1137 "/src/plugins/score-plugin-midi",
1138 "/src/plugins/score-plugin-protocols",
1139 "/src/plugins/score-plugin-recording",
1140 "/src/plugins/score-plugin-automation",
1141 "/src/plugins/score-plugin-js",
1142 "/src/plugins/score-plugin-mapping",
1143 "/3rdparty/libossia/src"};
1145 for(
auto path : src_build_dirs)
1147 args.push_back(
"-I" + std::string(SCORE_ROOT_BINARY_DIR) + path);
Definition LibrarySettings.hpp:46
Definition JitPlatform.hpp:129
T & settings() const
Access a specific Settings model instance.
Definition ApplicationContext.hpp:41