support multi-architecture library for lib dir 23/169223/1 accepted/tizen/unified/20180208.163647 submit/tizen/20180208.005815 submit/tizen/20180208.080147
authorCho Woong Suk <ws77.cho@samsung.com>
Fri, 2 Feb 2018 02:57:16 +0000 (11:57 +0900)
committerwoongsuk cho <ws77.cho@samsung.com>
Mon, 5 Feb 2018 05:14:43 +0000 (05:14 +0000)
Change-Id: Id603602bf46d477f3aa57813ad2f7c19e07aad9c
(cherry picked from commit 39ed7656c266b754e71eb430c02ad60a980d869d)

NativeLauncher/launcher/dotnet/dotnet_launcher.cc

index 265c925..af29793 100644 (file)
@@ -38,6 +38,29 @@ namespace tizen {
 namespace runtime {
 namespace dotnetcore {
 
+#if defined (__aarch64__)
+#define ARCHITECTURE_IDENTIFIER "arm64"
+#elif defined (__arm__)
+#define ARCHITECTURE_IDENTIFIER "arm"
+#elif defined (__x86_64__)
+#define ARCHITECTURE_IDENTIFIER "x64"
+#elif defined (__i386__)
+#define ARCHITECTURE_IDENTIFIER "x86"
+#else
+#define ARCHITECTURE_IDENTIFIER "unknown"
+#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);
+       if (!strncmp(ARCHITECTURE_IDENTIFIER, "arm64", 5)) {
+               candidate = candidate + ":" + concatPath(appRoot, "lib/aarch64");
+       }
+
+       return candidate;
+}
+
 CoreRuntime::CoreRuntime() :
        initializeClr(nullptr),
        executeAssembly(nullptr),
@@ -188,7 +211,7 @@ int CoreRuntime::initialize(bool standalone)
        assembliesInDirectory(searchDirectories, tpa);
 
        std::string nativeLibPath;
-       nativeLibPath = appLib + ":" + appBin + ":" + __nativeLibDirectory;
+       nativeLibPath = getExtraNativeLibDirs(appRoot) + ":" + appLib + ":" + appBin + ":" + __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())) {