Makefile 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. TOP=$(realpath $(CURDIR)/../..)
  2. -include $(TOP)/sdks/Make.config
  3. include $(TOP)/sdks/versions.mk
  4. include $(TOP)/sdks/paths.mk
  5. UNAME=$(shell uname)
  6. SDK_DIR = $(ANDROID_TOOLCHAIN_DIR)/sdk
  7. NDK_DIR = $(ANDROID_TOOLCHAIN_DIR)/ndk
  8. ADB = $(SDK_DIR)/platform-tools/adb
  9. ANDROID = $(SDK_DIR)/tools/android
  10. ANT = ant
  11. NDK_BUILD = $(NDK_DIR)/ndk-build
  12. PACKAGE = org.mono.android.AndroidTestRunner
  13. RUNNER = org.mono.android.AndroidRunner
  14. ACTIVITY = org.mono.android.AndroidActivity
  15. CONFIGURATION?=release
  16. APK_DIR=apk
  17. BCL_RUNNER_EXE = app/assets/asm/main.exe
  18. DEBUGGER_RUNNER_EXE = app/assets/asm/dtest-app.exe
  19. DEBUGGER_RUNNER_PDB = app/assets/asm/dtest-app.pdb
  20. BCL_CHECKS= \
  21. corlib \
  22. System \
  23. System.Core \
  24. System.Data \
  25. System.IO.Compression.FileSystem \
  26. System.IO.Compression \
  27. System.Json \
  28. System.Net.Http \
  29. System.Numerics \
  30. System.Runtime.Serialization \
  31. System.ServiceModel \
  32. System.ServiceModel.Web \
  33. System.Transactions \
  34. System.Xml \
  35. System.Xml.Linq \
  36. Mono.CSharp \
  37. Mono.Data.Sqlite \
  38. Mono.Data.Tds \
  39. Mono.Security
  40. CHECKS= \
  41. mini \
  42. $(BCL_CHECKS)
  43. .PHONY: all
  44. all: package
  45. #This is hilarious, but we can't clean unless we got the 2 property files around
  46. .PHONY: clean
  47. clean:
  48. ./gradlew clean
  49. .PHONY: check
  50. check: $(patsubst %,check-%,$(CHECKS))
  51. ## Helper targets
  52. .PHONY: undeploy
  53. undeploy:
  54. $(ADB) uninstall $(PACKAGE)
  55. .PHONY: kill
  56. kill:
  57. $(ADB) shell am force-stop $(PACKAGE)
  58. .PHONY: logcat
  59. logcat:
  60. $(ADB) logcat
  61. .PHONY: shell
  62. shell:
  63. $(ADB) shell
  64. ## Accept Android License
  65. .PHONY: accept-android-license
  66. accept-android-license:
  67. yes | $(SDK_DIR)/tools/bin/sdkmanager --licenses
  68. ## Check targets
  69. BCL_LIBS=$(subst corlib.dll,mscorlib.dll,$(patsubst %,%.dll,$(BCL_CHECKS)))
  70. BCL_PDBS=$(subst corlib.pdb,mscorlib.pdb,$(patsubst %,%.pdb,$(BCL_CHECKS)))
  71. BCL_REFERENCES=$(patsubst %,-r:$(TOP)/mcs/class/lib/monodroid/%,$(BCL_LIBS))
  72. NUNIT_LIBS= \
  73. nunitlite.dll
  74. NUNIT_REFERENCES=$(patsubst %,-r:$(TOP)/mcs/class/lib/monodroid/%,$(NUNIT_LIBS))
  75. local.properties:
  76. echo "sdk.dir=$(SDK_DIR)" > $@
  77. echo "ndk.dir=$(NDK_DIR)" >> $@
  78. app/assets/asm:
  79. mkdir -p $@
  80. ## Package the monosgen-2.0 and MonoPosixHelper libraries
  81. MONO_LIBS= \
  82. libmonosgen-2.0.so \
  83. libMonoPosixHelper.so
  84. ##
  85. # Parameters:
  86. # $(1): arch
  87. define RuntimeTemplate
  88. app/src/main/jniLibs/$(1):
  89. mkdir -p $$@
  90. $$(patsubst %,app/src/main/jniLibs/$(1)/%,$$(MONO_LIBS)): app/src/main/jniLibs/$(1)/%: $$(TOP)/sdks/out/android-$(1)-$$(CONFIGURATION)/lib/% | app/src/main/jniLibs/$(1)
  91. cp $$< $$@
  92. .PHONY: package
  93. package: $$(patsubst %,app/src/main/jniLibs/$(1)/%,$$(MONO_LIBS))
  94. endef
  95. $(eval $(call RuntimeTemplate,armeabi-v7a))
  96. $(eval $(call RuntimeTemplate,arm64-v8a))
  97. $(eval $(call RuntimeTemplate,x86))
  98. $(eval $(call RuntimeTemplate,x86_64))
  99. ## Package the main.exe and Mono.Android.dll
  100. app/assets/asm/main.exe: managed/main.cs | app/assets/asm
  101. csc /nostdlib /noconfig /langversion:latest /unsafe /out:$@ $(BCL_REFERENCES) $(NUNIT_REFERENCES) $<
  102. app/assets/asm/Mono.Android.dll: managed/fake-monodroid.cs | app/assets/asm
  103. csc /nostdlib /noconfig /langversion:latest /t:library /out:$@ $(BCL_REFERENCES) $<
  104. .PHONY: package
  105. package: app/assets/asm/main.exe app/assets/asm/Mono.Android.dll
  106. ## Package the BCL assemblies
  107. $(patsubst %,app/assets/asm/%,$(BCL_LIBS)) $(patsubst %,app/assets/asm/%,$(BCL_PDBS)) $(patsubst %,app/assets/asm/%,$(NUNIT_LIBS)): app/assets/asm/%: $(TOP)/mcs/class/lib/monodroid/% | app/assets/asm
  108. cp $< $@
  109. .PHONY: package
  110. package: $(patsubst %,app/assets/asm/%,$(BCL_LIBS)) $(patsubst %,app/assets/asm/%,$(BCL_PDBS)) $(patsubst %,app/assets/asm/%,$(NUNIT_LIBS))
  111. ## Package the BCL test assemblies
  112. ##
  113. # Parameters:
  114. # $(1): assembly name (corlib, System, etc.)
  115. define BCLTestAssemblyTemplate
  116. .PHONY: $$(TOP)/mcs/class/lib/monodroid/tests/monodroid_$(1)_test.dll
  117. $$(TOP)/mcs/class/lib/monodroid/tests/monodroid_$(1)_test.dll:
  118. $$(MAKE) PROFILE='monodroid' -C $$(TOP)/mcs/class/$(1) test-local
  119. app/assets/asm/monodroid_$(1)_test.dll: $$(TOP)/mcs/class/lib/monodroid/tests/monodroid_$(1)_test.dll
  120. cp $$< $$@
  121. .PHONY: package
  122. package: app/assets/asm/monodroid_$(1)_test.dll
  123. endef
  124. $(foreach check,$(BCL_CHECKS),$(eval $(call BCLTestAssemblyTemplate,$(check))))
  125. ## Package the mini test assembly
  126. MINI_TEST_SOURCES= \
  127. $(TOP)/mono/mini/aot-tests.cs \
  128. $(TOP)/mono/mini/arrays.cs \
  129. $(TOP)/mono/mini/basic-calls.cs \
  130. $(TOP)/mono/mini/basic-float.cs \
  131. $(TOP)/mono/mini/basic-long.cs \
  132. $(TOP)/mono/mini/basic-math.cs \
  133. $(TOP)/mono/mini/basic.cs \
  134. $(TOP)/mono/mini/exceptions.cs \
  135. $(TOP)/mono/mini/generics.cs \
  136. $(TOP)/mono/mini/gshared.cs \
  137. $(TOP)/mono/mini/objects.cs \
  138. $(TOP)/mono/mini/TestDriver.cs \
  139. managed/mini-test-runner.cs
  140. app/assets/asm/monodroid_mini_test.dll: $(MINI_TEST_SOURCES)
  141. csc /nostdlib /noconfig /langversion:latest /unsafe /t:library /out:$@ /d:__MOBILE__ $(BCL_REFERENCES) $(NUNIT_REFERENCES) $(MINI_TEST_SOURCES)
  142. .PHONY: package
  143. package: app/assets/asm/monodroid_mini_test.dll
  144. ## Package Mono.Debugger.Soft test assemblies
  145. .PHONY: $(TOP)/mcs/class/Mono.Debugger.Soft/dtest-app.exe $(TOP)/mcs/class/Mono.Debugger.Soft/dtest-app.pdb
  146. $(TOP)/mcs/class/Mono.Debugger.Soft/dtest-app.exe $(TOP)/mcs/class/Mono.Debugger.Soft/dtest-app.pdb:
  147. $(MAKE) PROFILE='monodroid' -C $(TOP)/mcs/class/Mono.Debugger.Soft dtest-app.exe
  148. app/assets/asm/dtest-app.exe: $(TOP)/mcs/class/Mono.Debugger.Soft/dtest-app.exe
  149. cp $< $@
  150. app/assets/asm/dtest-app.pdb: $(TOP)/mcs/class/Mono.Debugger.Soft/dtest-app.pdb
  151. cp $< $@
  152. package: app/assets/asm/dtest-app.exe app/assets/asm/dtest-app.pdb
  153. ## LLDB support
  154. lldb-mono-0.1/xa-lldb: xa-lldb
  155. wget --no-verbose -O - 'https://github.com/mono/lldb-binaries/releases/download/v0.1/lldb-mono-0.1.tar.gz' | tar xvf -
  156. cp xa-lldb lldb-mono-0.1/xa-lldb
  157. ## Run Mono.Debugger.Soft and BCL tests
  158. build-Mono.Debugger.Soft: package local.properties
  159. ./gradlew uninstallAll assembleDebug installDebug -Pmono.debuggertests $(if $(MONO_WAIT_LLDB),-Pmono.waitforlldb)
  160. check-Mono.Debugger.Soft: build-Mono.Debugger.Soft $(if $(MONO_WAIT_LLDB),lldb-mono-0.1/xa-lldb)
  161. $(ADB) reverse tcp:6100 tcp:6100
  162. $(if $(MONO_WAIT_LLDB),lldb-mono-0.1/xa-lldb,$(ADB) shell am instrument -w $(PACKAGE)/$(RUNNER))
  163. .PHONY: build-%
  164. build-%: package local.properties
  165. printf "monodroid_$*_test.dll" > app/assets/asm/testassembly.txt
  166. ./gradlew uninstallAll assembleDebug installDebug -Pmono.bcltests $(if $(MONO_WAIT_LLDB),-Pmono.waitforlldb)
  167. .PHONY: check-%
  168. check-%: build-% $(if $(MONO_WAIT_LLDB),lldb-mono-0.1/xa-lldb)
  169. $(if $(MONO_WAIT_LLDB),lldb-mono-0.1/xa-lldb,$(ADB) shell am instrument -w $(PACKAGE)/$(RUNNER))