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;
472 if(!useNativePlatform || llvm::Triple(processTriple).isOSBinFormatCOFF())
474 args.push_back(
"-ftls-model=local-exec");
475 args.push_back(
"-femulated-tls");
479 args.push_back(
"-mrelax-all");
480 args.push_back(
"-disable-llvm-verifier");
481 args.push_back(
"-discard-value-names");
482#if defined(__SANITIZE_ADDRESS__)
503 args.push_back(
"-fno-assume-sane-operator-new");
505 args.push_back(
"-stack-protector");
507 if(opts.NoExceptions)
509 args.push_back(
"-fno-rtti");
513#if LLVM_VERSION_MAJOR <= 13
514 args.push_back(
"-munwind-tables");
517 args.push_back(
"-fcxx-exceptions");
518 args.push_back(
"-fexceptions");
519 args.push_back(
"-fexternc-nounwind");
521 args.push_back(
"-exception-model=seh");
524 args.push_back(
"-faddrsig");
527 args.push_back(
"-vectorize-loops");
528 args.push_back(
"-vectorize-slp");
531static inline void populateDefinitions(std::vector<std::string>& args)
533#if defined(__APPLE__)
535 args.push_back(
"-DMOODYCAMEL_MAYBE_ALIGN_TO_CACHELINE=");
537#define XSTR(s) STR(s)
540#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
541 args.push_back(
"-DBOOST_ASIO_ENABLE_BUFFER_DEBUGGING");
543#if defined(BOOST_ASIO_HAS_STD_INVOKE_RESULT)
545 "-DBOOST_ASIO_HAS_STD_INVOKE_RESULT=" XSTR(BOOST_ASIO_HAS_STD_INVOKE_RESULT));
547#if defined(BOOST_MATH_DISABLE_FLOAT128)
548 args.push_back(
"-DBOOST_MATH_DISABLE_FLOAT128=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
550#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
551 args.push_back(
"-DBOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING");
553#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
554 args.push_back(
"-DBOOST_MULTI_INDEX_ENABLE_SAFE_MODE");
556#if defined(BOOST_NO_RTTI)
557 args.push_back(
"-DBOOST_NO_RTTI=" XSTR(BOOST_NO_RTTI));
559#if defined(FMT_SHARED)
560 args.push_back(
"-DFMT_SHARED=" XSTR(FMT_SHARED));
568#if defined(FMT_HEADER_ONLY)
569 args.push_back(
"-DFMT_HEADER_ONLY=" XSTR(FMT_HEADER_ONLY));
571#if defined(FMT_STATIC_THOUSANDS_SEPARATOR)
573 "-DFMT_STATIC_THOUSANDS_SEPARATOR=" XSTR(FMT_STATIC_THOUSANDS_SEPARATOR));
575#if defined(FMT_USE_FLOAT128)
576 args.push_back(
"-DFMT_USE_FLOAT128=" XSTR(FMT_USE_FLOAT128));
578#if defined(FMT_USE_INT128)
579 args.push_back(
"-DFMT_USE_INT128=" XSTR(FMT_USE_INT128));
581#if defined(FMT_USE_LONG_DOUBLE)
582 args.push_back(
"-DFMT_USE_LONG_DOUBLE=" XSTR(FMT_USE_LONG_DOUBLE));
584#if defined(LIBREMIDI_ALSA)
585 args.push_back(
"-DLIBREMIDI_ALSA");
587#if defined(LIBREMIDI_HAS_JACK_GET_VERSION)
588 args.push_back(
"-DLIBREMIDI_HAS_JACK_GET_VERSION");
590#if defined(LIBREMIDI_HAS_UDEV)
591 args.push_back(
"-DLIBREMIDI_HAS_UDEV");
593#if defined(LIBREMIDI_JACK)
594 args.push_back(
"-DLIBREMIDI_JACK");
596#if defined(LIBREMIDI_KEYBOARD)
597 args.push_back(
"-DLIBREMIDI_KEYBOARD");
599#if defined(LIBREMIDI_PIPEWIRE)
600 args.push_back(
"-DLIBREMIDI_PIPEWIRE");
602#if defined(LIBREMIDI_PIPEWIRE_UMP)
603 args.push_back(
"-DLIBREMIDI_PIPEWIRE_UMP");
605#if defined(LIBREMIDI_USE_BOOST)
606 args.push_back(
"-DLIBREMIDI_USE_BOOST");
608#if defined(LIBREMIDI_WEAKJACK)
609 args.push_back(
"-DLIBREMIDI_WEAKJACK");
611#if defined(QT_CORE_LIB)
612 args.push_back(
"-DQT_CORE_LIB");
614#if defined(QT_DISABLE_DEPRECATED_BEFORE)
615 args.push_back(
"-DQT_DISABLE_DEPRECATED_BEFORE=" XSTR(QT_DISABLE_DEPRECATED_BEFORE));
617#if defined(QT_GUI_LIB)
618 args.push_back(
"-DQT_GUI_LIB");
620#if defined(QT_NETWORK_LIB)
621 args.push_back(
"-DQT_NETWORK_LIB");
623#if defined(QT_NO_JAVA_STYLE_ITERATORS)
624 args.push_back(
"-DQT_NO_JAVA_STYLE_ITERATORS");
626#if defined(QT_NO_KEYWORDS)
627 args.push_back(
"-DQT_NO_KEYWORDS");
629#if defined(QT_NO_LINKED_LIST)
630 args.push_back(
"-DQT_NO_LINKED_LIST");
632#if defined(QT_NO_NARROWING_CONVERSIONS_IN_CONNECT)
633 args.push_back(
"-DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT");
635#if defined(QT_NO_USING_NAMESPACE)
636 args.push_back(
"-DQT_NO_USING_NAMESPACE");
638#if defined(QT_OPENGL_LIB)
639 args.push_back(
"-DQT_OPENGL_LIB");
641#if defined(QT_QMLINTEGRATION_LIB)
642 args.push_back(
"-DQT_QMLINTEGRATION_LIB");
644#if defined(QT_QML_LIB)
645 args.push_back(
"-DQT_QML_LIB");
647#if defined(QT_SERIALPORT_LIB)
648 args.push_back(
"-DQT_SERIALPORT_LIB");
650#if defined(QT_SHADERTOOLS_LIB)
651 args.push_back(
"-DQT_SHADERTOOLS_LIB");
653#if defined(QT_STATEMACHINE_LIB)
654 args.push_back(
"-DQT_STATEMACHINE_LIB");
656#if defined(QT_USE_QSTRINGBUILDER)
657 args.push_back(
"-DQT_USE_QSTRINGBUILDER");
659#if defined(QT_WEBSOCKETS_LIB)
660 args.push_back(
"-DQT_WEBSOCKETS_LIB");
662#if defined(QT_WIDGETS_LIB)
663 args.push_back(
"-DQT_WIDGETS_LIB");
665#if defined(RAPIDJSON_HAS_STDSTRING)
666 args.push_back(
"-DRAPIDJSON_HAS_STDSTRING=" XSTR(RAPIDJSON_HAS_STDSTRING));
668#if defined(SCORE_DEBUG)
669 args.push_back(
"-DSCORE_DEBUG");
671#if defined(SCORE_LIB_BASE)
672 args.push_back(
"-DSCORE_LIB_BASE");
674#if defined(SCORE_LIB_DEVICE)
675 args.push_back(
"-DSCORE_LIB_DEVICE");
677#if defined(SCORE_LIB_INSPECTOR)
678 args.push_back(
"-DSCORE_LIB_INSPECTOR");
680#if defined(SCORE_LIB_LOCALTREE)
681 args.push_back(
"-DSCORE_LIB_LOCALTREE");
683#if defined(SCORE_LIB_PROCESS)
684 args.push_back(
"-DSCORE_LIB_PROCESS");
686#if defined(SCORE_LIB_STATE)
687 args.push_back(
"-DSCORE_LIB_STATE");
689#if defined(SCORE_PLUGIN_AUDIO)
690 args.push_back(
"-DSCORE_PLUGIN_AUDIO");
692#if defined(SCORE_PLUGIN_AUTOMATION)
693 args.push_back(
"-DSCORE_PLUGIN_AUTOMATION");
695#if defined(SCORE_PLUGIN_AVND)
696 args.push_back(
"-DSCORE_PLUGIN_AVND");
698#if defined(SCORE_PLUGIN_CURVE)
699 args.push_back(
"-DSCORE_PLUGIN_CURVE");
701#if defined(SCORE_PLUGIN_DATAFLOW)
702 args.push_back(
"-DSCORE_PLUGIN_DATAFLOW");
704#if defined(SCORE_PLUGIN_DEVICEEXPLORER)
705 args.push_back(
"-DSCORE_PLUGIN_DEVICEEXPLORER");
707#if defined(SCORE_PLUGIN_ENGINE)
708 args.push_back(
"-DSCORE_PLUGIN_ENGINE");
710#if defined(SCORE_PLUGIN_GFX)
711 args.push_back(
"-DSCORE_PLUGIN_GFX");
713#if defined(SCORE_PLUGIN_LIBRARY)
714 args.push_back(
"-DSCORE_PLUGIN_LIBRARY");
716#if defined(SCORE_PLUGIN_MEDIA)
717 args.push_back(
"-DSCORE_PLUGIN_MEDIA");
719#if defined(SCORE_PLUGIN_SCENARIO)
720 args.push_back(
"-DSCORE_PLUGIN_SCENARIO");
722#if defined(SCORE_PLUGIN_TRANSPORT)
723 args.push_back(
"-DSCORE_PLUGIN_TRANSPORT");
725#if defined(SERVUS_USE_AVAHI_CLIENT)
726 args.push_back(
"-DSERVUS_USE_AVAHI_CLIENT");
728#if defined(SPDLOG_COMPILED_LIB)
729 args.push_back(
"-DSPDLOG_COMPILED_LIB=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
731#if defined(SPDLOG_DEBUG_ON)
732 args.push_back(
"-DSPDLOG_DEBUG_ON=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
734#if defined(SPDLOG_FMT_EXTERNAL)
735 args.push_back(
"-DSPDLOG_FMT_EXTERNAL=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
737#if defined(SPDLOG_NO_DATETIME)
738 args.push_back(
"-DSPDLOG_NO_DATETIME=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
740#if defined(SPDLOG_NO_NAME)
741 args.push_back(
"-DSPDLOG_NO_NAME=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
743#if defined(SPDLOG_NO_THREAD_ID)
744 args.push_back(
"-DSPDLOG_NO_THREAD_ID=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
746#if defined(SPDLOG_SHARED_LIB)
747 args.push_back(
"-DSPDLOG_SHARED_LIB=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
749#if defined(SPDLOG_TRACE_ON)
750 args.push_back(
"-DSPDLOG_TRACE_ON=" XSTR(BOOST_MATH_DISABLE_FLOAT128));
752#if defined(TINYSPLINE_DOUBLE_PRECISION)
753 args.push_back(
"-DTINYSPLINE_DOUBLE_PRECISION");
756#if defined(SCORE_DEBUG)
757 args.push_back(
"-DSCORE_DEBUG");
761 args.push_back(
"-D_GNU_SOURCE=1");
762 args.push_back(
"-D__STDC_CONSTANT_MACROS");
763 args.push_back(
"-D__STDC_FORMAT_MACROS");
764 args.push_back(
"-D__STDC_LIMIT_MACROS");
765#if defined(FFTW_SINGLE_ONLY)
766 args.push_back(
"-DFFTW_SINGLE_ONLY");
767#elif defined(FFTW_DOUBLE_ONLY)
768 args.push_back(
"-DFFTW_DOUBLE_ONLY");
772static inline auto getPotentialTriples()
774 std::vector<QString> triples;
775 triples.push_back(LLVM_DEFAULT_TARGET_TRIPLE);
776 triples.push_back(LLVM_HOST_TRIPLE);
777#if defined(__x86_64__)
778 triples.push_back(
"x86_64-pc-linux-gnu");
779 triples.push_back(
"x86_64-unknown-linux-gnu");
780#elif defined(__i686__)
781 triples.push_back(
"i686-pc-linux-gnu");
782#elif defined(__i586__)
783 triples.push_back(
"i586-pc-linux-gnu");
784#elif defined(__i486__)
785 triples.push_back(
"i486-pc-linux-gnu");
786#elif defined(__i386__)
787 triples.push_back(
"i386-pc-linux-gnu");
788#elif defined(__arm__)
789 triples.push_back(
"armv8-none-linux-gnueabi");
790 triples.push_back(
"armv8-pc-linux-gnueabi");
791 triples.push_back(
"armv8-none-linux-gnu");
792 triples.push_back(
"armv8-pc-linux-gnu");
793 triples.push_back(
"armv7-none-linux-gnueabi");
794 triples.push_back(
"armv7-pc-linux-gnueabi");
795 triples.push_back(
"armv7-none-linux-gnu");
796 triples.push_back(
"armv7-pc-linux-gnu");
797 triples.push_back(
"armv6-none-linux-gnueabi");
798 triples.push_back(
"armv6-pc-linux-gnueabi");
799 triples.push_back(
"armv6-none-linux-gnu");
800 triples.push_back(
"armv6-pc-linux-gnu");
801#elif defined(__aarch64__)
802 triples.push_back(
"aarch64-none-linux-gnueabi");
803 triples.push_back(
"aarch64-pc-linux-gnueabi");
804 triples.push_back(
"aarch64-unknown-linux-gnueabi");
805 triples.push_back(
"aarch64-none-linux-gnu");
806 triples.push_back(
"aarch64-pc-linux-gnu");
807 triples.push_back(
"aarch64-unknown-linux-gnu");
808 triples.push_back(
"aarch64-redhat-linux");
852static inline void populateIncludeDirs(std::vector<std::string>& args)
854 auto sdk_location = locateSDKWithFallback();
855 auto& sdk = sdk_location.path;
856 auto qsdk = QString::fromStdString(sdk);
858 qDebug() <<
"SDK located: " << qsdk;
859 std::string llvm_lib_version = SCORE_LLVM_VERSION;
860#if defined(__APPLE__) && SCORE_FHS_BUILD
861 llvm_lib_version =
"13.0.0";
864 QDir resDir = QString(qsdk +
"/lib/clang");
865 auto entries = resDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
866 if(!entries.empty() && !entries.contains(SCORE_LLVM_VERSION))
867 llvm_lib_version = entries.front().toStdString();
869#if defined(__APPLE__) && SCORE_FHS_BUILD
870 std::string appleSharedSdk
871 =
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
873 args.push_back(
"-resource-dir");
874 args.push_back(appleSharedSdk +
"/lib/clang/" + llvm_lib_version);
876 args.push_back(
"-resource-dir");
877 args.push_back(sdk +
"/lib/clang/" + llvm_lib_version);
880#if defined(_LIBCPP_VERSION)
881 args.push_back(
"-stdlib=libc++");
882 args.push_back(
"-internal-isystem");
884#if defined(__APPLE__) && SCORE_FHS_BUILD
885 args.push_back(appleSharedSdk +
"/include/c++/v1");
887 args.push_back(sdk +
"/include/c++/v1");
894 const QDir incdir(qsdk +
"/include");
895 for(
const auto& d : incdir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
897 if(QFileInfo::exists(qsdk +
"/include/" + d +
"/c++/v1/__config_site"))
899 args.push_back(
"-internal-isystem");
900 args.push_back(sdk +
"/include/" + d.toStdString() +
"/c++/v1");
906#elif defined(_GLIBCXX_RELEASE)
910 const auto libstdcpp_major = QString::number(_GLIBCXX_RELEASE);
912 QDir cpp_dir{
"/usr/include/c++"};
914 QDirIterator cpp_it{cpp_dir};
915 while(cpp_it.hasNext())
918 auto ver = cpp_it.fileName();
919 if(!ver.isEmpty() && ver.startsWith(libstdcpp_major))
921 auto gcc = ver.toStdString();
924 args.push_back(
"-internal-isystem");
925 args.push_back(
"/usr/include/c++/" + gcc);
928 for(
auto& triple : getPotentialTriples())
930 if(cpp_dir.exists(triple))
933 args.push_back(
"-internal-isystem");
934 args.push_back(
"/usr/include/c++/" + gcc +
"/" + triple.toStdString());
945#if defined(__APPLE__) && SCORE_FHS_BUILD
946 args.push_back(
"-internal-isystem");
947 args.push_back(appleSharedSdk +
"/lib/clang/" + llvm_lib_version +
"/include");
948 args.push_back(
"-internal-externc-isystem");
950 "/Applications/Xcode.app/Contents/Developer//Platforms/MacOSX.platform/Developer/"
951 "SDKs/MacOSX.sdk/usr/include");
953 args.push_back(
"-internal-isystem");
954 args.push_back(sdk +
"/lib/clang/" + llvm_lib_version +
"/include");
955 args.push_back(
"-internal-externc-isystem");
956 args.push_back(sdk +
"/include");
959#if defined(__APPLE__)
964 if(QFileInfo{qsdk +
"/include/macos-sdks"}.isDir())
965 args.push_back(
"-isystem" + sdk +
"/include/macos-sdks");
977 auto include = [&](
const std::string& path) {
978 std::string path_to_include = sdk +
"/include/" + path;
979 auto qpath = QString::fromStdString(path_to_include);
980 if(!QFileInfo{qpath}.isDir())
982 qDebug() <<
"Trying to include non-existent path: " << qpath;
986 args.push_back(
"-isystem" + sdk +
"/include/" + path);
990#if defined(__linux__)
992#if defined(__x86_64__)
993 include(
"x86_64-linux-gnu");
995 include(
"aarch64-linux-gnu");
1000 std::string qt_folder =
"qt";
1001 if(QFile::exists(qsdk +
"/include/qt6/QtCore"))
1004 QDirIterator qtVersionFolder{
1005 qsdk +
"/include/" + QString::fromStdString(qt_folder) +
"/QtCore",
1007 QDir::Filter::Dirs | QDir::Filter::NoDotAndDotDot,
1009 std::string qt_version = QT_VERSION_STR;
1010 if(qtVersionFolder.hasNext())
1012 QDir sub = qtVersionFolder.next();
1013 qt_version = sub.dirName().toStdString();
1015 include(qt_folder +
"");
1016 include(qt_folder +
"/QtCore");
1017 include(qt_folder +
"/QtCore/" + qt_version);
1018 include(qt_folder +
"/QtCore/" + qt_version +
"/QtCore");
1019 include(qt_folder +
"/QtGui");
1020 include(qt_folder +
"/QtGui/" + qt_version);
1021 include(qt_folder +
"/QtGui/" + qt_version +
"/QtGui");
1022 include(qt_folder +
"/QtWidgets");
1023 include(qt_folder +
"/QtWidgets/" + qt_version);
1024 include(qt_folder +
"/QtWidgets/" + qt_version +
"/QtWidgets");
1025 include(qt_folder +
"/QtQml");
1026 include(qt_folder +
"/QtQml/" + qt_version);
1027 include(qt_folder +
"/QtQml/" + qt_version +
"/QtQml");
1028 include(qt_folder +
"/QtQuick");
1029 include(qt_folder +
"/QtQuick/" + qt_version);
1030 include(qt_folder +
"/QtQuick/" + qt_version +
"/QtQuick");
1031 include(qt_folder +
"/QtXml");
1032 include(qt_folder +
"/QtNetwork");
1033 include(qt_folder +
"/QtSvg");
1034 include(qt_folder +
"/QtSql");
1035 include(qt_folder +
"/QtOpenGL");
1036 include(qt_folder +
"/QtShaderTools");
1037 include(qt_folder +
"/QtShaderTools/" + qt_version);
1038 include(qt_folder +
"/QtShaderTools/" + qt_version +
"/QtShaderTools");
1039 include(qt_folder +
"/QtSerialPort");
1041 if(sdk_location.sdk_kind == located_sdk::official && sdk_location.deploying)
1047 auto thirdparty_include_dirs = {
1048 "/3rdparty/libossia/3rdparty/boost_1_88_0",
1049 "/3rdparty/libossia/3rdparty/nano-signal-slot/include",
1050 "/3rdparty/libossia/3rdparty/spdlog/include",
1051 "/3rdparty/libossia/3rdparty/dr_libs",
1052 "/3rdparty/libossia/3rdparty/Flicks",
1053 "/3rdparty/libossia/3rdparty/fmt/include",
1054 "/3rdparty/libossia/3rdparty/magic_enum/include",
1055 "/3rdparty/libossia/3rdparty/readerwriterqueue",
1056 "/3rdparty/libossia/3rdparty/concurrentqueue",
1057 "/3rdparty/libossia/3rdparty/SmallFunction/smallfun/include",
1058 "/3rdparty/libossia/3rdparty/websocketpp",
1059 "/3rdparty/libossia/3rdparty/rapidjson/include",
1060 "/3rdparty/libossia/3rdparty/libremidi/include",
1061 "/3rdparty/libossia/3rdparty/oscpack",
1062 "/3rdparty/libossia/3rdparty/rnd/include",
1063 "/3rdparty/libossia/3rdparty/span/include",
1064 "/3rdparty/libossia/3rdparty/tuplet/include",
1065 "/3rdparty/libossia/3rdparty/unordered_dense/include",
1066 "/3rdparty/libossia/3rdparty/multi_index/include",
1067 "/3rdparty/libossia/3rdparty/verdigris/src",
1068 "/3rdparty/libossia/3rdparty/weakjack",
1070 for(
auto path : thirdparty_include_dirs)
1072 args.push_back(
"-isystem" + std::string(SCORE_ROOT_SOURCE_DIR) + path);
1074 auto src_include_dirs
1075 = {
"/3rdparty/libossia/src",
1076 "/3rdparty/avendish/include",
1078 "/src/plugins/score-lib-state",
1079 "/src/plugins/score-lib-device",
1080 "/src/plugins/score-lib-process",
1081 "/src/plugins/score-lib-inspector",
1082 "/src/plugins/score-plugin-avnd",
1083 "/src/plugins/score-plugin-gfx",
1084 "/src/plugins/score-plugin-jit",
1085 "/src/plugins/score-plugin-nodal",
1086 "/src/plugins/score-plugin-remotecontrol",
1087 "/src/plugins/score-plugin-audio",
1088 "/src/plugins/score-plugin-curve",
1089 "/src/plugins/score-plugin-dataflow",
1090 "/src/plugins/score-plugin-engine",
1091 "/src/plugins/score-plugin-scenario",
1092 "/src/plugins/score-plugin-library",
1093 "/src/plugins/score-plugin-deviceexplorer",
1094 "/src/plugins/score-plugin-media",
1095 "/src/plugins/score-plugin-loop",
1096 "/src/plugins/score-plugin-midi",
1097 "/src/plugins/score-plugin-protocols",
1098 "/src/plugins/score-plugin-recording",
1099 "/src/plugins/score-plugin-automation",
1100 "/src/plugins/score-plugin-js",
1101 "/src/plugins/score-plugin-mapping"};
1103 for(
auto path : src_include_dirs)
1105 args.push_back(
"-I" + std::string(SCORE_ROOT_SOURCE_DIR) + path);
1111 "/src/plugins/score-lib-state",
1112 "/src/plugins/score-lib-device",
1113 "/src/plugins/score-lib-process",
1114 "/src/plugins/score-lib-inspector",
1115 "/src/plugins/score-plugin-avnd",
1116 "/src/plugins/score-plugin-gfx",
1117 "/src/plugins/score-plugin-jit",
1118 "/src/plugins/score-plugin-nodal",
1119 "/src/plugins/score-plugin-remotecontrol",
1120 "/src/plugins/score-plugin-audio",
1121 "/src/plugins/score-plugin-curve",
1122 "/src/plugins/score-plugin-dataflow",
1123 "/src/plugins/score-plugin-engine",
1124 "/src/plugins/score-plugin-scenario",
1125 "/src/plugins/score-plugin-library",
1126 "/src/plugins/score-plugin-deviceexplorer",
1127 "/src/plugins/score-plugin-media",
1128 "/src/plugins/score-plugin-loop",
1129 "/src/plugins/score-plugin-midi",
1130 "/src/plugins/score-plugin-protocols",
1131 "/src/plugins/score-plugin-recording",
1132 "/src/plugins/score-plugin-automation",
1133 "/src/plugins/score-plugin-js",
1134 "/src/plugins/score-plugin-mapping",
1135 "/3rdparty/libossia/src"};
1137 for(
auto path : src_build_dirs)
1139 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