multi-architecture support 05/170805/1 accepted/tizen/unified/20180222.142133 submit/tizen/20180222.081310
authorCho Woong Suk <ws77.cho@samsung.com>
Thu, 22 Feb 2018 07:45:11 +0000 (16:45 +0900)
committerwoongsuk cho <ws77.cho@samsung.com>
Thu, 22 Feb 2018 08:11:44 +0000 (08:11 +0000)
Change-Id: Id7e7fc24b6fa35ca547e441a297d5d6325fef41b
(cherry picked from commit db615b8826eed0fad8ecccd687b0b77d620c8ebf)

NativeLauncher/launcher/dotnet/dotnet_launcher.cc

index af29793..fb0d6be 100644 (file)
@@ -40,20 +40,39 @@ namespace dotnetcore {
 
 #if defined (__aarch64__)
 #define ARCHITECTURE_IDENTIFIER "arm64"
+const static std::vector<std::string> RID_FALLBACK_GRAPH =
+       {"linux-arm64", "linux", "unix-arm64", "unix", "any", "base"};
+
 #elif defined (__arm__)
 #define ARCHITECTURE_IDENTIFIER "arm"
+const static std::vector<std::string> RID_FALLBACK_GRAPH =
+       {"tizen.4.0.0-armel", "tizen.4.0.0", "tizen-armel", "tizen", "linux-armel", "linux", "unix-armel", "unix", "any", "base"};
+
 #elif defined (__x86_64__)
 #define ARCHITECTURE_IDENTIFIER "x64"
+const static std::vector<std::string> RID_FALLBACK_GRAPH =
+       {"linux-x64", "linux", "unix-x64", "unix", "any", "base"};
+
 #elif defined (__i386__)
 #define ARCHITECTURE_IDENTIFIER "x86"
+const static std::vector<std::string> RID_FALLBACK_GRAPH =
+       {"linux-x86", "linux", "unix-x86", "unix", "any", "base"};
+
 #else
-#define ARCHITECTURE_IDENTIFIER "unknown"
+#error "Unknown target"
 #endif
 
 static std::string getExtraNativeLibDirs(const std::string& appRoot)
 {
-       // auto generated directory by nuget will be considered later
-       std::string candidate = concatPath(appRoot, "lib/" ARCHITECTURE_IDENTIFIER);
+       std::string candidate;
+       for (int i = 0; i < RID_FALLBACK_GRAPH.size(); i++) {
+               if(!candidate.empty()) {
+                       candidate += ":";
+               }
+               candidate += concatPath(appRoot, "bin/runtimes/" + RID_FALLBACK_GRAPH[i] + "/native");
+       }
+
+       candidate = candidate + ":" + concatPath(appRoot, "lib/" ARCHITECTURE_IDENTIFIER);
        if (!strncmp(ARCHITECTURE_IDENTIFIER, "arm64", 5)) {
                candidate = candidate + ":" + concatPath(appRoot, "lib/aarch64");
        }
@@ -211,7 +230,7 @@ int CoreRuntime::initialize(bool standalone)
        assembliesInDirectory(searchDirectories, tpa);
 
        std::string nativeLibPath;
-       nativeLibPath = getExtraNativeLibDirs(appRoot) + ":" + appLib + ":" + appBin + ":" + __nativeLibDirectory;
+       nativeLibPath = getExtraNativeLibDirs(appRoot) + ":" + appBin + ":" + appLib + ":" + __nativeLibDirectory;
 
        std::string appName = std::string("dotnet-launcher-") + std::to_string(getpid());
        if (!initializeCoreClr(appName.c_str(), probePath.c_str(), nativeLibPath.c_str(), tpa.c_str())) {