From 61606fd8660d556ed93a93fd44a2be4bde52eef3 Mon Sep 17 00:00:00 2001 From: klugier Date: Sat, 24 Dec 2016 14:18:27 +0000 Subject: [PATCH] Core on Android compiles one more time - improvments in Android builder, code refactoring git-svn-id: svn://ultimatepp.org/upp/trunk@10567 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/ide/Builders/Android.h | 32 ++-- uppsrc/ide/Builders/AndroidBuilder.cpp | 150 ++++++++---------- uppsrc/ide/Builders/AndroidBuilder.h | 47 ++++++ uppsrc/ide/Builders/AndroidBuilderUtils.cpp | 24 +++ uppsrc/ide/Builders/AndroidMakeFile.cpp | 36 +++-- uppsrc/ide/Builders/AndroidModuleMakeFile.cpp | 28 ++-- .../Builders/AndroidModuleMakeFileBuilder.cpp | 81 ++++++++++ uppsrc/ide/Builders/Builders.h | 61 +++---- uppsrc/ide/Builders/Builders.upp | 4 + uppsrc/ide/Methods.cpp | 25 +-- uppsrc/ide/ide.lay | 2 +- 11 files changed, 320 insertions(+), 170 deletions(-) create mode 100644 uppsrc/ide/Builders/AndroidBuilder.h create mode 100644 uppsrc/ide/Builders/AndroidBuilderUtils.cpp create mode 100644 uppsrc/ide/Builders/AndroidModuleMakeFileBuilder.cpp diff --git a/uppsrc/ide/Builders/Android.h b/uppsrc/ide/Builders/Android.h index f894c6646..3e3ae9d9a 100644 --- a/uppsrc/ide/Builders/Android.h +++ b/uppsrc/ide/Builders/Android.h @@ -104,26 +104,28 @@ protected: void AppendModules(String& makeFile) const; private: - String name; - Vector sourceFiles; - Vector includes; + String name; + Vector sourceFiles; + Index includes; VectorMap cppFlags; - Vector ldLibraries; - Vector staticLibraries; - Vector staticModuleLibraries; - Vector sharedLibraries; + Vector ldLibraries; + Vector staticLibraries; + Vector staticModuleLibraries; + Vector sharedLibraries; }; class AndroidMakeFile { public: - static void AppendString(String& makeFile, - const String& variable, - const String& variableName); - static void AppendStringVector(String& makeFile, - const Vector& vec, - const String& variableName, - const String& variablePrefix = "", - const String& variableSuffix = ""); + static void AppendString( + String& makeFile, + const String& variable, + const String& variableName); + static void AppendStringVector( + String& makeFile, + const Vector& vec, + const String& variableName, + const String& variablePrefix = "", + const String& variableSuffix = ""); public: AndroidMakeFile(); diff --git a/uppsrc/ide/Builders/AndroidBuilder.cpp b/uppsrc/ide/Builders/AndroidBuilder.cpp index 7f656e983..5795b85f6 100644 --- a/uppsrc/ide/Builders/AndroidBuilder.cpp +++ b/uppsrc/ide/Builders/AndroidBuilder.cpp @@ -1,4 +1,5 @@ #include "Builders.h" +#include "AndroidBuilder.h" const String AndroidBuilder::RES_PKG_FLAG = "ANDROID_RESOURCES_PACKAGE"; @@ -21,11 +22,12 @@ String AndroidBuilder::GetTargetExt() const return ".apk"; } -bool AndroidBuilder::BuildPackage(const String& package, Vector& linkfile, - Vector& immfile, String& linkoptions, - const Vector& all_uses, - const Vector& all_libraries, - int) +bool AndroidBuilder::BuildPackage( + const String& package, Vector& linkfile, + Vector& immfile, String& linkoptions, + const Vector& all_uses, + const Vector& all_libraries, + int) { InitProject(); if(!ValidateBuilderEnviorement()) @@ -35,7 +37,7 @@ bool AndroidBuilder::BuildPackage(const String& package, Vector& linkfil const bool isResourcesPackage = HasFlag(RES_PKG_FLAG); String uppManifestPath = PackagePath(package); String packageDir = GetFileFolder(uppManifestPath); - String assemblyDir = GetAssemblyDir(packageDir, package); + String assemblyDir = AndroidBuilderUtils::GetAssemblyDir(packageDir, package); ChDir(packageDir); PutVerbose("cd " + packageDir); @@ -209,39 +211,27 @@ bool AndroidBuilder::BuildPackage(const String& package, Vector& linkfil } } - AndroidModuleMakeFile pkgMakeFile(NormalizeModuleName(package)); - for(int i = 0; i < nativeSourceFilesInPackage.GetCount(); i++) - pkgMakeFile.AddSourceFile(nativeSourceFilesInPackage[i]); + AndroidModuleMakeFileCreator creator(config); - // TODO: Check for path with space? - pkgMakeFile.AddInclude(assemblyDir); - pkgMakeFile.AddInclude(packageDir); - for (int i = 0; i < pkg.uses.GetCount(); i++) - pkgMakeFile.AddInclude(GetAssemblyDir(pkg.uses[i].text)); + creator.SetModuleName(NormalizeModuleName(package)); + creator.AddSources(nativeSourceFilesInPackage); + creator.AddInclude(assemblyDir); + creator.AddIncludeWithSubdirs(packageDir); + creator.AddIncludes(pkg.uses); + creator.AddFlags(pkg.flag); + creator.AddLdLibraries(pkg.library); + creator.AddStaticModuleLibrary(pkg.static_library); + creator.AddSharedLibraries(pkg.uses); - for(int i = 0; i < pkg.flag.GetCount(); i++) - pkgMakeFile.AddCppFlag(pkg.flag[i].text); - - Vector libs = Split(Gather(pkg.library, config.GetKeys()), ' '); - for(int i = 0; i < libs.GetCount(); i++) - pkgMakeFile.AddLdLibrary(libs[i]); - - Vector staticLibs = Split(Gather(pkg.static_library, config.GetKeys()), ' '); - for(int i = 0; i < staticLibs.GetCount(); i++) - pkgMakeFile.AddStaticModuleLibrary(staticLibs[i]); - - for(int i = 0; i < pkg.uses.GetCount(); i++) - pkgMakeFile.AddSharedLibrary(pkg.uses[i].text); - - String pkgMakeFilePath = project.GetJniDir() + DIR_SEPS + package + DIR_SEPS + "Android.mk"; - UpdateFile(pkgMakeFilePath, pkgMakeFile.ToString()); + UpdateFile(GetModuleMakeFilePath(package), creator.Create()); } return !error; } -bool AndroidBuilder::Link(const Vector& linkfile, const String& linkoptions, - bool createmap) +bool AndroidBuilder::Link( + const Vector& linkfile, const String& linkoptions, + bool createmap) { InitProject(); if(!ValidateBuilderEnviorement()) @@ -343,10 +333,11 @@ bool AndroidBuilder::Link(const Vector& linkfile, const String& linkopti return true; } -bool AndroidBuilder::Preprocess(const String& package, - const String& file, - const String& target, - bool asmout) +bool AndroidBuilder::Preprocess( + const String& package, + const String& file, + const String& target, + bool asmout) { InitProject(); @@ -411,8 +402,9 @@ void AndroidBuilder::ManageProjectCohesion() DetectAndManageUnusedPackages(project.GetJniDir(), packages); } -void AndroidBuilder::DetectAndManageUnusedPackages(const String& nest, - const Index& packages) +void AndroidBuilder::DetectAndManageUnusedPackages( + const String& nest, + const Index& packages) { for(FindFile ff(AppendFileName(nest, "*")); ff; ff.Next()) { if(!ff.IsHidden() && ff.IsDirectory()) { @@ -423,10 +415,11 @@ void AndroidBuilder::DetectAndManageUnusedPackages(const String& nest, } } -void AndroidBuilder::DeleteUnusedSourceFiles(const String& nest, - const Vector& files, - String exts, - String excludedFiles) +void AndroidBuilder::DeleteUnusedSourceFiles( + const String& nest, + const Vector& files, + String exts, + String excludedFiles) { exts.Replace(" ", ""); excludedFiles.Replace(" ", ""); @@ -437,28 +430,30 @@ void AndroidBuilder::DeleteUnusedSourceFiles(const String& nest, dirs.Add(nest); for(int i = 0; i < dirs.GetCount(); i++) { for(FindFile ff(AppendFileName(dirs[i], "*")); ff; ff.Next()) { - if(!ff.IsHidden()) { - String path = ff.GetPath(); - String name = ff.GetName(); - if(ff.IsFolder() && ff.IsSymLink()) - dirs.Add(ff.GetPath()); - else - if(extsIdx.Find(GetFileExt(path)) == -1) - continue; - else - if(excludedFilesIdx.Find(name) > -1) - continue; - else { - bool exists = false; - for(int j = 0; j < files.GetCount(); j++) { - if(files[j] == path) { - exists = true; - break; - } + if(ff.IsHidden()) { + continue; + } + + String path = ff.GetPath(); + String name = ff.GetName(); + if(ff.IsFolder() && ff.IsSymLink()) + dirs.Add(ff.GetPath()); + else + if(extsIdx.Find(GetFileExt(path)) == -1) + continue; + else + if(excludedFilesIdx.Find(name) > -1) + continue; + else { + bool exists = false; + for(int j = 0; j < files.GetCount(); j++) { + if(files[j] == path) { + exists = true; + break; } - if(!exists) - DeleteFile(path); } + if(!exists) + DeleteFile(path); } } } @@ -825,30 +820,12 @@ String AndroidBuilder::GetSandboxDir() const return GetFileFolder(target) + DIR_SEPS + "Sandbox" + DIR_SEPS + mainPackageName; } -String AndroidBuilder::GetAssemblyDir(const String& package) -{ - String packageManifest = PackagePath(package); - String packageDir = GetFileFolder(packageManifest); - - return GetAssemblyDir(packageDir, package); -} - -String AndroidBuilder::GetAssemblyDir(const String& packageDir, const String& package) -{ - String assemblyDir = packageDir; - - int pos = packageDir.GetCount() - package.GetCount() - 1; - if (pos >= 0 && pos < assemblyDir.GetCount()) - assemblyDir.Trim(pos); - - return assemblyDir != packageDir ? assemblyDir : ""; -} - // ------------------------------------------------------------------- -String AndroidBuilder::GetFilePathInAndroidProject(const String& nestDir, - const String& packageName, - const String& fileName) const +String AndroidBuilder::GetFilePathInAndroidProject( + const String& nestDir, + const String& packageName, + const String& fileName) const { return nestDir + DIR_SEPS + packageName + DIR_SEPS + RemoveDirNameFromFileName(fileName); } @@ -867,6 +844,11 @@ String AndroidBuilder::NormalizeModuleName(String moduleName) const return moduleName; } +String AndroidBuilder::GetModuleMakeFilePath(const String& package) +{ + return project.GetJniDir() + DIR_SEPS + package + DIR_SEPS + "Android.mk"; +} + // ------------------------------------------------------------------- Builder *CreateAndroidBuilder() diff --git a/uppsrc/ide/Builders/AndroidBuilder.h b/uppsrc/ide/Builders/AndroidBuilder.h new file mode 100644 index 000000000..f4fa32f3e --- /dev/null +++ b/uppsrc/ide/Builders/AndroidBuilder.h @@ -0,0 +1,47 @@ +#ifndef _ide_Builders_AndroidBuilder_h_ +#define _ide_Builders_AndroidBuilder_h_ + +#include "Android.h" + +#include + +namespace Upp { + +class AndroidBuilderUtils final { +public: + AndroidBuilderUtils() = delete; + AndroidBuilderUtils(AndroidBuilderUtils&) = delete; + AndroidBuilderUtils& operator=(AndroidBuilderUtils&) = delete; + ~AndroidBuilderUtils() = delete; + + static String GetAssemblyDir(const String& package); + static String GetAssemblyDir(const String& packageDir, const String& package); +}; + +class AndroidModuleMakeFileCreator { +public: + AndroidModuleMakeFileCreator(const Index& builderConfig); + virtual ~AndroidModuleMakeFileCreator() {} + + void SetModuleName(const String& name) { makeFile.SetName(name); } + + void AddSources(Vector& sources); + void AddInclude(const String& path); + void AddIncludeWithSubdirs(const String& path); + + void AddIncludes(const Array& uses); + void AddFlags(const Array& flags); + void AddLdLibraries(const Array& libraries); + void AddStaticModuleLibrary(Array& staticLibraries); + void AddSharedLibraries(const Array& uses); + + String Create() { return makeFile.ToString(); } + +private: + AndroidModuleMakeFile makeFile; + const Index& config; +}; + +} + +#endif diff --git a/uppsrc/ide/Builders/AndroidBuilderUtils.cpp b/uppsrc/ide/Builders/AndroidBuilderUtils.cpp new file mode 100644 index 000000000..734de46d8 --- /dev/null +++ b/uppsrc/ide/Builders/AndroidBuilderUtils.cpp @@ -0,0 +1,24 @@ +#include "AndroidBuilder.h" + +namespace Upp { + +String AndroidBuilderUtils::GetAssemblyDir(const String& package) +{ + String packageManifest = PackagePath(package); + String packageDir = GetFileFolder(packageManifest); + + return GetAssemblyDir(packageDir, package); +} + +String AndroidBuilderUtils::GetAssemblyDir(const String& packageDir, const String& package) +{ + String assemblyDir = packageDir; + + int pos = packageDir.GetCount() - package.GetCount() - 1; + if (pos >= 0 && pos < assemblyDir.GetCount()) + assemblyDir.Trim(pos); + + return assemblyDir != packageDir ? assemblyDir : ""; +} + +} diff --git a/uppsrc/ide/Builders/AndroidMakeFile.cpp b/uppsrc/ide/Builders/AndroidMakeFile.cpp index 5509ec55e..91c6592fd 100644 --- a/uppsrc/ide/Builders/AndroidMakeFile.cpp +++ b/uppsrc/ide/Builders/AndroidMakeFile.cpp @@ -2,29 +2,33 @@ namespace Upp { -void AndroidMakeFile::AppendString(String& makeFile, - const String& variable, - const String& variableName) +void AndroidMakeFile::AppendString( + String& makeFile, + const String& variable, + const String& variableName) { if(!variable.IsEmpty()) makeFile << variableName << " := " << variable << "\n"; } -void AndroidMakeFile::AppendStringVector(String& makeFile, - const Vector& vec, - const String& variableName, - const String& variablePrefix, - const String& variableSuffix) +void AndroidMakeFile::AppendStringVector( + String& makeFile, + const Vector& vec, + const String& variableName, + const String& variablePrefix, + const String& variableSuffix) { - if(!vec.IsEmpty()) { - makeFile << variableName << " := "; - for(int i = 0; i < vec.GetCount(); i++) { - makeFile << variablePrefix << vec[i] << variableSuffix; - if(i + 1 < vec.GetCount()) - makeFile << " "; - } - makeFile << "\n"; + if(vec.IsEmpty()) { + return; } + + makeFile << variableName << " := "; + for(int i = 0; i < vec.GetCount(); ++i) { + makeFile << variablePrefix << vec[i] << variableSuffix; + if(i + 1 < vec.GetCount()) + makeFile << " "; + } + makeFile << "\n"; } AndroidMakeFile::AndroidMakeFile() diff --git a/uppsrc/ide/Builders/AndroidModuleMakeFile.cpp b/uppsrc/ide/Builders/AndroidModuleMakeFile.cpp index 4ddaf911e..546496876 100644 --- a/uppsrc/ide/Builders/AndroidModuleMakeFile.cpp +++ b/uppsrc/ide/Builders/AndroidModuleMakeFile.cpp @@ -53,7 +53,7 @@ void AndroidModuleMakeFile::AddSourceFile(const String& path) void AndroidModuleMakeFile::AddInclude(const String& includePath) { - includes.Add(includePath); + includes.FindAdd(includePath); } void AndroidModuleMakeFile::AddCppFlag(const String& name, const String& value) @@ -93,23 +93,25 @@ void AndroidModuleMakeFile::AppendSourceFiles(String& makeFile) const void AndroidModuleMakeFile::AppendIncludes(String& makeFile) const { - AndroidMakeFile::AppendStringVector(makeFile, includes, "LOCAL_C_INCLUDES"); + AndroidMakeFile::AppendStringVector(makeFile, includes.GetKeys(), "LOCAL_C_INCLUDES"); } void AndroidModuleMakeFile::AppendCppFlags(String& makeFile) const { - if(!cppFlags.IsEmpty()) { - makeFile << "LOCAL_CPPFLAGS := "; - for(int i = 0; i < cppFlags.GetCount(); i++) { - String value = cppFlags[i]; - makeFile << "-D" << cppFlags.GetKey(i); - if(!value.IsEmpty()) - makeFile << "=" << value; - if(i + 1 < sourceFiles.GetCount()) - makeFile << " "; - } - makeFile << "\n"; + if(cppFlags.IsEmpty()) { + return; } + + makeFile << "LOCAL_CPPFLAGS := "; + for(int i = 0; i < cppFlags.GetCount(); i++) { + String value = cppFlags[i]; + makeFile << "-D" << cppFlags.GetKey(i); + if(!value.IsEmpty()) + makeFile << "=" << value; + if(i + 1 < sourceFiles.GetCount()) + makeFile << " "; + } + makeFile << "\n"; } void AndroidModuleMakeFile::AppendLdLibraries(String& makeFile) const diff --git a/uppsrc/ide/Builders/AndroidModuleMakeFileBuilder.cpp b/uppsrc/ide/Builders/AndroidModuleMakeFileBuilder.cpp new file mode 100644 index 000000000..de77f996c --- /dev/null +++ b/uppsrc/ide/Builders/AndroidModuleMakeFileBuilder.cpp @@ -0,0 +1,81 @@ +#include "AndroidBuilder.h" + +namespace Upp { + +AndroidModuleMakeFileCreator::AndroidModuleMakeFileCreator(const Index& builderConfig) + : config(builderConfig) +{ +} + +void AndroidModuleMakeFileCreator::AddSources(Vector& sources) +{ + for(int i = 0; i < sources.GetCount(); ++i) { + makeFile.AddSourceFile(sources[i]); + } +} + +void AndroidModuleMakeFileCreator::AddInclude(const String& path) +{ + makeFile.AddInclude(path); +} + +void AndroidModuleMakeFileCreator::AddIncludeWithSubdirs(const String& path) +{ + BiVector dirs { path }; + while(!dirs.IsEmpty()) { + for(FindFile ff(AppendFileName(dirs.Head(), "*")); ff; ff.Next()) { + if(ff.IsHidden() || ff.IsSymLink() || !ff.IsFolder()) { + continue; + } + + String name = ff.GetName(); + if (name.EndsWith(".tpp")) { + continue; + } + + dirs.AddTail(ff.GetPath()); + } + + AddInclude(dirs.Head()); + dirs.DropHead(); + } +} + +void AndroidModuleMakeFileCreator::AddIncludes(const Array& uses) +{ + for(int i = 0; i < uses.GetCount(); ++i) { + makeFile.AddInclude(AndroidBuilderUtils::GetAssemblyDir(uses[i].text)); + } +} + +void AndroidModuleMakeFileCreator::AddFlags(const Array& flags) +{ + for(int i = 0; i < flags.GetCount(); ++i) { + makeFile.AddCppFlag(flags[i].text); + } +} + +void AndroidModuleMakeFileCreator::AddLdLibraries(const Array& libraries) +{ + Vector libs = Split(Gather(libraries, config.GetKeys()), ' '); + for(int i = 0; i < libs.GetCount(); ++i) { + makeFile.AddLdLibrary(libs[i]); + } +} + +void AndroidModuleMakeFileCreator::AddStaticModuleLibrary(Array& staticLibraries) +{ + Vector slibs = Split(Gather(staticLibraries, config.GetKeys()), ' '); + for(int i = 0; i < slibs.GetCount(); ++i) { + makeFile.AddStaticModuleLibrary(slibs[i]); + } +} + +void AndroidModuleMakeFileCreator::AddSharedLibraries(const Array& uses) +{ + for(int i = 0; i < uses.GetCount(); i++) { + makeFile.AddSharedLibrary(uses[i].text); + } +} + +} diff --git a/uppsrc/ide/Builders/Builders.h b/uppsrc/ide/Builders/Builders.h index 83380e6a9..37d9f67f1 100644 --- a/uppsrc/ide/Builders/Builders.h +++ b/uppsrc/ide/Builders/Builders.h @@ -4,7 +4,6 @@ #include #include #include -//#include #include #include "Android.h" @@ -162,9 +161,9 @@ private: class AndroidBuilder : public Builder { public: - AndroidSDK androidSDK; - AndroidNDK androidNDK; - Jdk jdk; + AndroidSDK androidSDK; + AndroidNDK androidNDK; + Jdk jdk; bool ndk_blitz; Vector ndkArchitectures; @@ -179,29 +178,33 @@ public: public: AndroidBuilder(); - virtual String GetTargetExt() const; - virtual bool BuildPackage(const String& packageName, - Vector& linkfile, - Vector& immfile, - String& linkoptions, - const Vector& all_uses, - const Vector& all_libraries, - int optimize); - virtual bool Link(const Vector& linkfile, const String& linkoptions, bool createmap); - virtual bool Preprocess(const String& package, - const String& file, - const String& target, - bool asmout); - virtual void CleanPackage(const String& package, const String& outdir); - virtual void AfterClean(); + virtual String GetTargetExt() const override; + virtual bool BuildPackage( + const String& packageName, + Vector& linkfile, + Vector& immfile, + String& linkoptions, + const Vector& all_uses, + const Vector& all_libraries, + int optimize) override; + virtual bool Link( + const Vector& linkfile, const String& linkoptions, bool createmap) override; + virtual bool Preprocess( + const String& package, + const String& file, + const String& target, + bool asmout) override; + virtual void CleanPackage(const String& package, const String& outdir) override; + virtual void AfterClean() override; protected: void ManageProjectCohesion(); void DetectAndManageUnusedPackages(const String& nest, const Index& packages); - void DeleteUnusedSourceFiles(const String& nest, - const Vector& files, - String exts, - String excludedFiles = ""); + void DeleteUnusedSourceFiles( + const String& nest, + const Vector& files, + String exts, + String excludedFiles = ""); bool MovePackageFileToAndroidProject(const String& src, const String& dest); bool RealizePackageJavaSourcesDirectory(const String& packageName); bool RealizeLinkDirectories() const; @@ -224,20 +227,20 @@ protected: bool PreprocessJava(const String& package, const String& file, const String& target); protected: - String GetFilePathInAndroidProject(const String& nestDir, - const String& packageName, - const String& fileName) const; + String GetFilePathInAndroidProject( + const String& nestDir, + const String& packageName, + const String& fileName) const; String RemoveDirNameFromFileName(String fileName) const; String NormalizeModuleName(String moduleName) const; + String GetModuleMakeFilePath(const String& packageName); + private: void InitProject(); String GetSandboxDir() const; - static String GetAssemblyDir(const String& package); - static String GetAssemblyDir(const String& packageDir, const String& package); - private: AndroidProject project; const Workspace& wspc; diff --git a/uppsrc/ide/Builders/Builders.upp b/uppsrc/ide/Builders/Builders.upp index 738202ced..baf16b3a7 100644 --- a/uppsrc/ide/Builders/Builders.upp +++ b/uppsrc/ide/Builders/Builders.upp @@ -25,6 +25,10 @@ file AndroidApplicationMakeFile.cpp, AndroidMakeFile.cpp, AndroidModuleMakeFile.cpp, + "Android Builder" readonly separator, + AndroidBuilder.h, + AndroidBuilderUtils.cpp, + AndroidModuleMakeFileBuilder.cpp, Components readonly separator, BuilderComponents.h, Blitz.cpp, diff --git a/uppsrc/ide/Methods.cpp b/uppsrc/ide/Methods.cpp index 84d36ebf3..39086fac9 100644 --- a/uppsrc/ide/Methods.cpp +++ b/uppsrc/ide/Methods.cpp @@ -81,38 +81,38 @@ AndroidBuilderSetup::AndroidBuilderSetup() { CtrlLayout(*this); - sdk_path <<= THISBACK(OnSdkPathChange); + sdk_path << [=] { OnSdkPathChange(); }; sdkDownload.SetImage(IdeImg::DownloadBlack()); sdkDownload.Tip("Download"); - sdkDownload <<= callback1(LaunchWebBrowser, AndroidSDK::GetDownloadUrl()); + sdkDownload << [=] { LaunchWebBrowser(AndroidSDK::GetDownloadUrl()); }; sdk_path.AddFrame(sdkDownload); sdkBrowse.SetImage(CtrlImg::right_arrow()); sdkBrowse.Tip("Select directory"); - sdkBrowse <<= THISBACK(OnSdkPathInsert); + sdkBrowse << [=]{ OnSdkPathInsert(); }; sdk_path.AddFrame(sdkBrowse); - ndk_path <<= THISBACK(OnNdkPathChange); + ndk_path << [=] { OnNdkPathChange(); }; ndkDownload.SetImage(IdeImg::DownloadBlack()); ndkDownload.Tip("Download"); - ndkDownload <<= callback1(LaunchWebBrowser, AndroidNDK::GetDownloadUrl()); + ndkDownload << [=] { LaunchWebBrowser(AndroidNDK::GetDownloadUrl()); }; ndk_path.AddFrame(ndkDownload); ndkBrowse.SetImage(CtrlImg::right_arrow()); ndkBrowse.Tip("Select directory"); - ndkBrowse <<= THISBACK(OnNdkPathInsert); + ndkBrowse << [=] { OnNdkPathInsert(); }; ndk_path.AddFrame(ndkBrowse); jdkDownload.SetImage(IdeImg::DownloadBlack()); jdkDownload.Tip("Download"); - jdkDownload <<= callback1(LaunchWebBrowser, Jdk::GetDownloadUrl()); + jdkDownload << [=] { LaunchWebBrowser(Jdk::GetDownloadUrl()); }; jdk_path.AddFrame(jdkDownload); jdkBrowse.SetImage(CtrlImg::right_arrow()); jdkBrowse.Tip("Select directory"); - jdkBrowse <<= callback1(InsertPath, &jdk_path); + jdkBrowse << [=] { InsertPath(&jdk_path); }; jdk_path.AddFrame(jdkBrowse); } @@ -256,7 +256,7 @@ void AndroidBuilderSetup::OnNdkPathChange0(const String& ndkPath) ndk_arch_armeabi.Set(1); ndk_arch_armeabi_v7a.Set(1); ndk_arch_arm64_v8a.Set(1); - ndk_common_cpp_options.SetData("-std=c++11 -fexceptions -frtti"); + ndk_common_cpp_options.SetData("-std=c++14 -fexceptions -frtti"); } else ClearNdkCtrls(); @@ -297,9 +297,10 @@ void AndroidBuilderSetup::LoadCppRuntimes(const AndroidNDK& ndk) LoadDropList(ndk_cpp_runtime, runtimes, ndk.FindDefaultCppRuntime()); } -void AndroidBuilderSetup::LoadDropList(DropList& dropList, - const Vector& values, - const String& defaultKey) +void AndroidBuilderSetup::LoadDropList( + DropList& dropList, + const Vector& values, + const String& defaultKey) { dropList.Clear(); diff --git a/uppsrc/ide/ide.lay b/uppsrc/ide/ide.lay index b870019a3..1c494dc2f 100644 --- a/uppsrc/ide/ide.lay +++ b/uppsrc/ide/ide.lay @@ -211,7 +211,7 @@ LAYOUT(BuildMethodsAndroidBuilderSetupLayout, 648, 500) ITEM(DropList, sdk_build_tools_release, LeftPosZ(340, 100).TopPosZ(124, 19)) ITEM(LabelBox, dv___12, SetLabel(t_("Android NDK settings")).HSizePosZ(0, 0).TopPosZ(164, 164)) ITEM(StaticText, dv___13, SetText(t_("BLITZ:")).LeftPosZ(8, 116).TopPosZ(180, 19)) - ITEM(TextOption, ndk_blitz, SetLabel(t_("&Use BLITZ")).LeftPosZ(128, 112).TopPosZ(180, 20)) + ITEM(TextOption, ndk_blitz, SetLabel(t_("&Use BLITZ (Experimental)")).LeftPosZ(128, 232).TopPosZ(180, 20)) ITEM(StaticText, dv___15, SetText(t_("Target architectures:")).LeftPosZ(8, 116).TopPosZ(204, 19)) ITEM(TextOption, ndk_arch_armeabi, SetLabel(t_("armeabi")).LeftPosZ(128, 68).TopPosZ(204, 20)) ITEM(TextOption, ndk_arch_armeabi_v7a, SetLabel(t_("armeabi-v7a")).LeftPosZ(204, 84).TopPosZ(204, 20))