2016-04-21 15:19:32 +03:00
|
|
|
TOP=..
|
|
|
|
include $(TOP)/Make.config
|
|
|
|
|
|
|
|
# without this many compiler warnings about unused functions and variables
|
|
|
|
# in system headers show up.
|
|
|
|
export CCACHE_CPP2=1
|
|
|
|
|
|
|
|
#
|
|
|
|
# Common
|
|
|
|
#
|
|
|
|
|
|
|
|
SHARED_INC += \
|
|
|
|
delegates.inc \
|
|
|
|
|
|
|
|
SHIPPED_HEADERS += \
|
|
|
|
xamarin/mono-runtime.h \
|
|
|
|
xamarin/xamarin.h \
|
|
|
|
xamarin/main.h \
|
|
|
|
xamarin/trampolines.h \
|
|
|
|
xamarin/runtime.h \
|
2018-01-15 17:08:59 +03:00
|
|
|
xamarin/runtime-generated.h \
|
2021-03-18 09:23:39 +03:00
|
|
|
xamarin/monovm-bridge.h \
|
|
|
|
xamarin/coreclr-bridge.h \
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2021-03-18 09:23:39 +03:00
|
|
|
SHARED_SOURCES += mono-runtime.m bindings.m bindings-generated.m shared.m runtime.m trampolines.m trampolines-invoke.m xamarin-support.m nsstring-localization.m trampolines-varargs.m monovm-bridge.m coreclr-bridge.m
|
2016-05-11 14:27:51 +03:00
|
|
|
SHARED_I386_SOURCES += trampolines-i386.m trampolines-i386-asm.s trampolines-i386-objc_msgSend.s trampolines-i386-objc_msgSendSuper.s trampolines-i386-objc_msgSend_stret.s trampolines-i386-objc_msgSendSuper_stret.s
|
|
|
|
SHARED_X86_64_SOURCES += trampolines-x86_64.m trampolines-x86_64-asm.s trampolines-x86_64-objc_msgSend.s trampolines-x86_64-objc_msgSendSuper.s trampolines-x86_64-objc_msgSend_stret.s trampolines-x86_64-objc_msgSendSuper_stret.s
|
2021-04-30 17:53:24 +03:00
|
|
|
SHARED_ARM64_SOURCES += trampolines-arm64.m trampolines-arm64-asm.s trampolines-arm64-objc_msgSend.s trampolines-arm64-objc_msgSendSuper.s
|
2016-04-21 15:19:32 +03:00
|
|
|
SHARED_HEADERS += shared.h product.h delegates.h runtime-internal.h $(SHARED_INC) $(SHIPPED_HEADERS) trampolines-internal.h slinked-list.h
|
|
|
|
|
2019-05-07 08:35:39 +03:00
|
|
|
SHARED_FILES = $(SHARED_SOURCES) $(SHARED_HEADERS) $(SHARED_I386_SOURCES) $(SHARED_X86_64_SOURCES) $(SHARED_ARM64_SOURCES)
|
2016-04-21 15:19:32 +03:00
|
|
|
|
Bump to mono:2019-06 (#6196)
* Use the commonly used casing for `MSBuildSDKsPath` property
Handle "incorrectly" cased msbuild property names
msbuild property names are case insensitive. While generating the custom
app.config, in `SetToolsetProperty(..)` we try to update the property if
it already exists. But the name lookup was case sensitive, thus causing
the lookup to fail, resulting in two entries for the same property name
differing only in case. Eg. `MSBuildSDKsPath` vs `MSBuildSdksPath`.
* [mtouch] Whitelist new Brotli native symbols in Xamarin.Tests.Misc.PublicSymbols test
* [mtouch] Better assert in NoLLVMFailuresInWatchOS() test
We'd list the "LLVM failed" messages before even though the AOT might've crashed and the list is meaningless. Assert the exit code before that.
* [mtouch] Use new LLVM even for 32bit targets
See https://github.com/mono/mono/issues/14841 and https://github.com/mono/mono/issues/9621
* [mtouch] Work around slow LLVM in "don't link" test
See https://github.com/mono/mono/issues/14843
* Remove useless conditional
* Remove LLVM36 from Makefile
* [watch4] set right min version for arm64_32 based watch devices (#6307)
Fixes the confusion around `libmono-native*` (see for example https://github.com/xamarin/xamarin-macios/commit/ce5ba1e41d526eddd9b61f68fae22a747831e9f2#commitcomment-33834491 ) when building with `MONO_BUILD_FROM_SOURCE=1`.
* reflect watchos64_32_version_min change from mono sdk
* Move mono hash info to mk/mono.mk so that existing scripts work.
* Add Makefile dependency on mono.mk where necessary
With https://github.com/xamarin/xamarin-macios/commit/3e7bc29adec8dff3558c284a3050f2db36ea3cf2 the Mono hash was moved from Make.config to mono.mk.
We need to add a Makefile dependency on this file wherever Make.config was used to track a Mono dependency.
* [tests] Copy mk/mono.mk to the XM test package.
* [tests] Update minOS version test after consolidating min watchOS versions everywhere.
Fixes this mtouch and mmptest failure:
1) Failed : Xamarin.Tests.ProductTests.MinOSVersion(watchOS,MinwatchOS,WatchOSSimulator,False)
Failures
Expected: <empty>
But was: < "Unexpected minOS version (expected 2.0.0, alternatively 2.0.0, found 5.1.0) in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/SDKs/Xamarin.WatchSimulator.sdk/usr/lib/libxamarin-debug.a (mono-runtime-debug.arm64_32.o).", "Unexpected minOS version (expected 2.0.0, alternatively 2.0.0, found 5.1.0) in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/SDKs/Xamarin.WatchSimulator.sdk/usr/lib/libxamarin-debug.a (bindings-debug.arm64_32.o).", "Unexpected minOS version (expected 2.0.0, alternatively 2.0.0, found 5.1.0) in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/SDKs/Xamarin.WatchSimulator.sdk/usr/lib/libxamarin-debug.a (bindings-generated-debug.arm64_32.o).", "Unexpected minOS version (expected 2.0.0, alternatively 2.0.0, found 5.1.0) in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/SDKs/Xamarin.WatchSimulator.sdk/usr/lib/libxamarin-debug.a (shared-debug.arm64_32.o).", "Unexpected minOS version (expected 2.0.0, alternatively 2.0.0, found 5.1.0) in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/SDKs/Xamarin.WatchSimulator.sdk/usr/lib/libxamarin-debug.a (runtime-debug.arm64_32.o).", "Unexpected minOS version (expected 2.0.0, alternatively 2.0.0, found 5.1.0) in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/SDKs/Xamarin.WatchSimulator.sdk/usr/lib/libxamarin-debug.a (trampolines-debug.arm64_32.o).", "Unexpected minOS version (expected 2.0.0, alternatively 2.0.0, found 5.1.0) in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/SDKs/Xamarin.WatchSimulator.sdk/usr/lib/libxamarin-debug.a (trampolines-invoke-debug.arm64_32.o).", "Unexpected minOS version (expected 2.0.0, alternatively 2.0.0, found 5.1.0) in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/SDKs/Xamarin.WatchSimulator.sdk/usr/lib/libxamarin-debug.a (xamarin-support-debug.arm64_32.o).", "Unexpected minOS version (expected 2.0.0, alternatively 2.0.0, found 5.1.0) in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/SDKs/Xamarin.WatchSimulator.sdk/usr/lib/libxamarin-debug.a (nsstring-localization-debug.arm64_32.o).", "Unexpected minOS version (expected 2.0.0, alternatively 2.0.0, found 5.1.0) in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/SDKs/Xamarin.WatchSimulator.sdk/usr/lib/libxamarin-debug.a (trampolines-varargs-debug.arm64_32.o)."... >
* [mmp] Fix make clean target
It needs an -r to remove directories:
```
rm: bin: is a directory
rm: obj: is a directory
```
* Add new xamarin_timezone_get_local_name() to a few more places
2019-07-16 18:24:00 +03:00
|
|
|
EXTRA_DEPENDENCIES = $(SHARED_HEADERS) $(TOP)/Make.config $(TOP)/mk/mono.mk
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2021-03-18 09:23:39 +03:00
|
|
|
coreclrhost.h: Makefile
|
|
|
|
$(Q_CURL) curl -L --output "$@" https://raw.githubusercontent.com/dotnet/runtime/6c8f9fff6adcf6c661072646dbdafabed5267ec5/src/coreclr/hosts/inc/coreclrhost.h
|
|
|
|
|
|
|
|
coreclr-bridge.m: coreclrhost.h
|
|
|
|
|
2016-04-21 15:19:32 +03:00
|
|
|
xamarin/mono-runtime.h: mono-runtime.h.t4 exports.t4
|
|
|
|
$(Q_GEN) $(TT) $< -o $@
|
|
|
|
|
2018-01-15 17:08:59 +03:00
|
|
|
xamarin/runtime-generated.h: runtime-generated.h.t4 delegates.t4
|
|
|
|
$(Q_GEN) $(TT) $< -o $@
|
|
|
|
|
2016-04-21 15:19:32 +03:00
|
|
|
mono-runtime.m: mono-runtime.m.t4 exports.t4
|
|
|
|
$(Q_GEN) $(TT) $< -o $@
|
|
|
|
|
|
|
|
delegates.%: delegates.%.t4 delegates.t4
|
|
|
|
$(Q_GEN) $(TT) $< -o $@
|
|
|
|
|
|
|
|
Delegates.generated.cs: Delegates.cs.t4 delegates.t4
|
|
|
|
$(Q_GEN) $(TT) $< -o $@
|
|
|
|
|
|
|
|
bindings-generator.exe: bindings-generator.cs
|
2020-01-02 21:57:22 +03:00
|
|
|
$(Q) $(SYSTEM_CSC) $< -out:$@ -debug:full -features:strict
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
bindings-generated.m: bindings-generator.exe
|
|
|
|
$(Q_GEN) $(SYSTEM_MONO) --debug $< $@
|
|
|
|
|
|
|
|
# our makefiles don't support building the same source file multiple times with different defines,
|
|
|
|
# so just symlink extension-main.m to another file and compile that instead.
|
2016-04-26 00:27:10 +03:00
|
|
|
app-main.m watchextension-main.m tvextension-main.m: extension-main.m
|
2016-04-21 15:19:32 +03:00
|
|
|
$(Q_LN) ln -fs $< $@
|
|
|
|
|
|
|
|
#
|
|
|
|
# MonoTouch defines (used for all MonoTouch platforms: iOS, WatchOS and TVOS)
|
|
|
|
#
|
|
|
|
|
|
|
|
MONOTOUCH_SOURCES = \
|
|
|
|
monotouch-debug.m \
|
|
|
|
monotouch-main.m \
|
|
|
|
|
|
|
|
MONOTOUCH_HEADERS = \
|
|
|
|
monotouch-debug.h \
|
|
|
|
|
|
|
|
MONOTOUCH_LIBS = \
|
|
|
|
libextension.a \
|
2016-04-26 00:27:10 +03:00
|
|
|
libtvextension.a \
|
2016-04-21 15:19:32 +03:00
|
|
|
libapp.a \
|
|
|
|
libxamarin.a \
|
|
|
|
libxamarin-debug.a \
|
|
|
|
libxamarin.dylib \
|
|
|
|
libxamarin-debug.dylib \
|
|
|
|
|
2016-11-16 21:05:38 +03:00
|
|
|
MONOTOUCH_FRAMEWORKS = \
|
|
|
|
Xamarin \
|
|
|
|
Xamarin-debug \
|
|
|
|
|
2018-10-23 02:52:45 +03:00
|
|
|
MONOTOUCH_SOURCE_STEMS = $(patsubst %.s,%,$(patsubst %.m,%,$(SHARED_SOURCES) $(MONOTOUCH_SOURCES)))
|
2016-04-21 15:19:32 +03:00
|
|
|
MONOTOUCH_I386_SOURCE_STEMS = $(patsubst %.s,%,$(patsubst %.m,%,$(SHARED_I386_SOURCES)))
|
|
|
|
MONOTOUCH_X86_64_SOURCE_STEMS = $(patsubst %.s,%,$(patsubst %.m,%,$(SHARED_X86_64_SOURCES)))
|
2019-05-07 08:35:39 +03:00
|
|
|
MONOTOUCH_ARM64_SOURCE_STEMS = $(patsubst %.s,%,$(patsubst %.m,%,$(SHARED_ARM64_SOURCES)))
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2021-02-26 16:42:30 +03:00
|
|
|
MONOTOUCH_X86_SOURCE_STEMS = $(MONOTOUCH_I386_SOURCE_STEMS)
|
|
|
|
|
2016-04-21 15:19:32 +03:00
|
|
|
#
|
2020-11-17 11:30:08 +03:00
|
|
|
# FrameworkTemplate contains the install targets and sets up some variables for frameworks
|
2016-04-21 15:19:32 +03:00
|
|
|
#
|
|
|
|
|
2020-11-17 11:30:08 +03:00
|
|
|
define FrameworkTemplate
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2020-11-17 11:30:08 +03:00
|
|
|
$(2)_ARCHITECTURES = $(3)
|
2016-11-16 21:05:38 +03:00
|
|
|
$(2)_FRAMEWORKS = $(MONOTOUCH_FRAMEWORKS)
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
RUNTIME_$(2)_TARGETS_DIRS += \
|
2019-10-03 17:38:44 +03:00
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin.framework \
|
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin-debug.framework \
|
2016-05-19 15:33:35 +03:00
|
|
|
|
|
|
|
RUNTIME_$(2)_TARGETS += \
|
2019-10-03 17:38:44 +03:00
|
|
|
$$(foreach file,$$($(2)_FRAMEWORKS),$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/$$(file).framework/$$(file)) \
|
|
|
|
$$(foreach file,$$($(2)_FRAMEWORKS),$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/$$(file).framework/Info.plist) \
|
|
|
|
$$(foreach file,$$($(2)_FRAMEWORKS),$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/$$(file).framework.dSYM/Contents/Info.plist) \
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin.framework/Xamarin: .libs/$(1)/Xamarin.framework | $(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin.framework
|
2018-10-29 18:09:30 +03:00
|
|
|
$(Q) $(CP) $$< $$@
|
2017-04-03 12:52:29 +03:00
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin-debug.framework/Xamarin-debug: .libs/$(1)/Xamarin-debug.framework | $(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin-debug.framework
|
2018-10-29 18:09:30 +03:00
|
|
|
$(Q) $(CP) $$< $$@
|
2016-11-16 21:05:38 +03:00
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/%.framework/Info.plist: Xamarin.framework-$(1).Info.plist | $(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/%.framework
|
2016-11-16 21:05:38 +03:00
|
|
|
$(Q) sed 's/@BUNDLE_EXECUTABLE@/$$*/' $$< > $$@
|
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin.framework.dSYM/Contents/Info.plist: $(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin.framework/Xamarin $(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin.framework/Info.plist
|
2019-09-18 15:19:17 +03:00
|
|
|
$$(Q_GEN) dsymutil -j 4 $$< -o $$(abspath $$(dir $$<)/..)/Xamarin.framework.dSYM
|
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin-debug.framework.dSYM/Contents/Info.plist: $(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin-debug.framework/Xamarin-debug $(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/Frameworks/Xamarin-debug.framework/Info.plist
|
2019-09-18 15:19:17 +03:00
|
|
|
$$(Q_GEN) dsymutil -j 4 $$< -o $$(abspath $$(dir $$<)/..)/Xamarin-debug.framework.dSYM
|
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
.libs/$(1)/Xamarin.framework: $$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/Xamarin.$$(arch).framework)
|
|
|
|
$(Q) rm -f $$@
|
|
|
|
ifeq (1,$$(words $$($(2)_ARCHITECTURES)))
|
|
|
|
$(Q) $(CP) $$^ $$@
|
Remove unnecessary bitcode from dylibs. Fixes #51352 (#1469)
This is a series of fixes to the dynamic libraries we build / create to remove
any unnecessary bloat (unused architectures, bitcode).
A brand new watchOS app with no changes goes from 35MB to 11MB with these
fixes (with incremental builds disabled, the app size is 10MB).
--------------------------------------------------------------------------------
* [runtime] Split list of architectures into simulator and device-specific lists.
* [runtime] Build separate dylibs for device and simulator.
Build separate dylibs for device and simulator, since we already install these
into different locations.
This makes both the simulator and device builds slightly faster (since the
respective dylibs are smaller, and less data to copy around).
For watchOS apps, this saves ~430kb.
* [runtime] Strip bitcode from dylibs. Fixes #51352.
We know that dylibs will never be shipped to the App Store, so we'll never
need them to have bitcode.
So just strip the bitcode from all our dylibs, since this makes apps with
fastdev significantly smaller (and thus much faster to upload to watch
devices).
For watchOS apps this is a very significant improvement: a branch new watchOS
app without any changes goes from 35MB to 17MB.
https://bugzilla.xamarin.com/show_bug.cgi?id=51352
* [mtouch] Fix dylib compilation to not embed full bitcode.
Facts
=====
a. The output from the AOT compiler is an assembly (.s) file.
b. Clang's assembler does not support -fembed-bitcode-marker (only -fembed-
bitcode), so when we ask clang to -fembed-bitcode-marker, the assembler
receives a -fembed-bitcode argument.
c. This means that the assembled object file does not contain the
__LLVM/__bitcode and __LLVM/__cmdline sections (it does however contain an
__LLVM/__asm section).
d. The native linker will create a bitcode assembly section if none of the
object files passed to the linker contain a __LLVM/__bitcode section and
there's an __LLVM/__asm section present.
e. The end result is that when we build to a dylib, we end up (unexpectedly,
because we ask Clang to -fembed-bitcode-marker) including both armv7k and
bitcode in the dylib, thus bloating the dylib size significantly.
Solution
========
We manually add the __LLVM/__bitcode and __LLVM/__cmdline sections to the .s
file Mono's AOT compiler generated. This way the .o file will have the magic
sections, and the linker will not include bitcode (only the bitcode marker) in
the final library.
An empty watchOS extension with incremental builds is now 6MB smaller (down
to 11MB from 17MB).
2017-01-16 14:32:06 +03:00
|
|
|
else
|
2019-10-03 17:38:44 +03:00
|
|
|
$$(call Q_2,LIPO, [$1]) $(DEVICE_BIN_PATH)/lipo $$^ -create -output $$@
|
Remove unnecessary bitcode from dylibs. Fixes #51352 (#1469)
This is a series of fixes to the dynamic libraries we build / create to remove
any unnecessary bloat (unused architectures, bitcode).
A brand new watchOS app with no changes goes from 35MB to 11MB with these
fixes (with incremental builds disabled, the app size is 10MB).
--------------------------------------------------------------------------------
* [runtime] Split list of architectures into simulator and device-specific lists.
* [runtime] Build separate dylibs for device and simulator.
Build separate dylibs for device and simulator, since we already install these
into different locations.
This makes both the simulator and device builds slightly faster (since the
respective dylibs are smaller, and less data to copy around).
For watchOS apps, this saves ~430kb.
* [runtime] Strip bitcode from dylibs. Fixes #51352.
We know that dylibs will never be shipped to the App Store, so we'll never
need them to have bitcode.
So just strip the bitcode from all our dylibs, since this makes apps with
fastdev significantly smaller (and thus much faster to upload to watch
devices).
For watchOS apps this is a very significant improvement: a branch new watchOS
app without any changes goes from 35MB to 17MB.
https://bugzilla.xamarin.com/show_bug.cgi?id=51352
* [mtouch] Fix dylib compilation to not embed full bitcode.
Facts
=====
a. The output from the AOT compiler is an assembly (.s) file.
b. Clang's assembler does not support -fembed-bitcode-marker (only -fembed-
bitcode), so when we ask clang to -fembed-bitcode-marker, the assembler
receives a -fembed-bitcode argument.
c. This means that the assembled object file does not contain the
__LLVM/__bitcode and __LLVM/__cmdline sections (it does however contain an
__LLVM/__asm section).
d. The native linker will create a bitcode assembly section if none of the
object files passed to the linker contain a __LLVM/__bitcode section and
there's an __LLVM/__asm section present.
e. The end result is that when we build to a dylib, we end up (unexpectedly,
because we ask Clang to -fembed-bitcode-marker) including both armv7k and
bitcode in the dylib, thus bloating the dylib size significantly.
Solution
========
We manually add the __LLVM/__bitcode and __LLVM/__cmdline sections to the .s
file Mono's AOT compiler generated. This way the .o file will have the magic
sections, and the linker will not include bitcode (only the bitcode marker) in
the final library.
An empty watchOS extension with incremental builds is now 6MB smaller (down
to 11MB from 17MB).
2017-01-16 14:32:06 +03:00
|
|
|
endif
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
.libs/$(1)/Xamarin-debug.framework: $$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/Xamarin-debug.$$(arch).framework)
|
|
|
|
$(Q) rm -f $$@
|
|
|
|
ifeq (1,$$(words $$($(2)_ARCHITECTURES)))
|
|
|
|
$(Q) $(CP) $$^ $$@
|
|
|
|
else
|
|
|
|
$$(call Q_2,LIPO, [$1]) $(DEVICE_BIN_PATH)/lipo $$^ -create -output $$@
|
2016-05-19 15:33:35 +03:00
|
|
|
endif
|
2020-11-17 11:30:08 +03:00
|
|
|
endef
|
|
|
|
|
|
|
|
# 1: platform
|
|
|
|
# 2: variable prefix
|
|
|
|
# 3: architectures
|
|
|
|
ifdef INCLUDE_IOS
|
|
|
|
ifdef INCLUDE_DEVICE
|
|
|
|
$(eval $(call FrameworkTemplate,iphoneos,IPHONEOS,armv7 armv7s arm64))
|
|
|
|
endif
|
|
|
|
$(eval $(call FrameworkTemplate,iphonesimulator,IOSSIMULATOR,x86 x86_64))
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef INCLUDE_WATCH
|
|
|
|
ifdef INCLUDE_DEVICE
|
|
|
|
$(eval $(call FrameworkTemplate,watchos,WATCHOS,armv7k arm64_32))
|
|
|
|
endif
|
|
|
|
$(eval $(call FrameworkTemplate,watchsimulator,WATCHSIMULATOR,x86))
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef INCLUDE_TVOS
|
|
|
|
ifdef INCLUDE_DEVICE
|
|
|
|
$(eval $(call FrameworkTemplate,tvos,TVOS,arm64))
|
|
|
|
endif
|
|
|
|
$(eval $(call FrameworkTemplate,tvsimulator,TVSIMULATOR,x86_64))
|
|
|
|
endif
|
|
|
|
|
|
|
|
#
|
|
|
|
# PlatformTemplate contains the install targets and sets up some variables
|
|
|
|
#
|
|
|
|
|
|
|
|
define PlatformTemplate
|
|
|
|
|
|
|
|
$(2)_SOURCES = $(MONOTOUCH_SOURCES)
|
|
|
|
$(2)_HEADERS = $(MONOTOUCH_HEADERS)
|
|
|
|
$(2)_SOURCE_STEMS = $(MONOTOUCH_SOURCE_STEMS)
|
|
|
|
$(2)_X86_64_SOURCE_STEMS = $(MONOTOUCH_X86_64_SOURCE_STEMS)
|
|
|
|
$(2)_I386_SOURCE_STEMS = $(MONOTOUCH_I386_SOURCE_STEMS)
|
|
|
|
$(2)_ARM64_SOURCE_STEMS = $(MONOTOUCH_ARM64_SOURCE_STEMS)
|
|
|
|
$(2)_LIBRARIES = $(MONOTOUCH_LIBS)
|
|
|
|
$(2)_ARCHITECTURES = $(3)
|
|
|
|
|
|
|
|
RUNTIME_$(2)_TARGETS_DIRS += \
|
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/lib \
|
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/include/xamarin \
|
|
|
|
|
|
|
|
RUNTIME_$(2)_TARGETS += \
|
|
|
|
$$(foreach file,$$($(2)_LIBRARIES),$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/lib/$$(file)) \
|
|
|
|
$(foreach file,$(SHIPPED_HEADERS),$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/include/$(file)) \
|
|
|
|
|
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/lib/%.a: .libs/$(1)/%.a | $(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/lib
|
|
|
|
$(Q) install -m 0644 $$< $$@
|
|
|
|
|
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/lib/%.dylib: .libs/$(1)/%.dylib | $(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/lib
|
|
|
|
$$(Q_STRIP) $(DEVICE_BIN_PATH)/bitcode_strip $$< -m -o $$@
|
|
|
|
|
|
|
|
$(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/include/%.h: %.h | $(IOS_DESTDIR)$$(XAMARIN_$(2)_SDK)/include/xamarin
|
|
|
|
$(Q) install -m 0644 $$< $$@
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
$$(RUNTIME_$(2)_TARGETS_DIRS):
|
|
|
|
$(Q) mkdir -p $$@
|
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
all-$(2):: $$(RUNTIME_$(2)_TARGETS)
|
2021-03-04 11:07:44 +03:00
|
|
|
|
|
|
|
ifdef INCLUDE_XAMARIN_LEGACY
|
2016-04-21 15:19:32 +03:00
|
|
|
all-local:: $$(RUNTIME_$(2)_TARGETS)
|
|
|
|
install-local:: $$(RUNTIME_$(2)_TARGETS)
|
2021-03-04 11:07:44 +03:00
|
|
|
endif
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
endef
|
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
# 1: platform
|
2016-04-21 15:19:32 +03:00
|
|
|
# 2: variable prefix
|
2019-10-03 17:38:44 +03:00
|
|
|
# 3: architectures
|
2016-04-21 15:19:32 +03:00
|
|
|
ifdef INCLUDE_IOS
|
2019-10-03 17:38:44 +03:00
|
|
|
ifdef INCLUDE_DEVICE
|
|
|
|
$(eval $(call PlatformTemplate,iphoneos,IPHONEOS,armv7 armv7s arm64))
|
|
|
|
endif
|
|
|
|
$(eval $(call PlatformTemplate,iphonesimulator,IOSSIMULATOR,x86 x86_64))
|
2021-02-12 09:38:43 +03:00
|
|
|
endif
|
|
|
|
ifdef INCLUDE_MACCATALYST
|
2020-11-17 11:30:08 +03:00
|
|
|
$(eval $(call PlatformTemplate,maccatalyst,MACCATALYST,x86_64))
|
2016-04-21 15:19:32 +03:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef INCLUDE_WATCH
|
2019-10-03 17:38:44 +03:00
|
|
|
ifdef INCLUDE_DEVICE
|
|
|
|
$(eval $(call PlatformTemplate,watchos,WATCHOS,armv7k arm64_32))
|
|
|
|
endif
|
2020-11-20 17:27:46 +03:00
|
|
|
$(eval $(call PlatformTemplate,watchsimulator,WATCHSIMULATOR,x86 x86_64))
|
2016-04-21 15:19:32 +03:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef INCLUDE_TVOS
|
2019-10-03 17:38:44 +03:00
|
|
|
ifdef INCLUDE_DEVICE
|
|
|
|
$(eval $(call PlatformTemplate,tvos,TVOS,arm64))
|
|
|
|
endif
|
|
|
|
$(eval $(call PlatformTemplate,tvsimulator,TVSIMULATOR,x86_64))
|
2016-04-21 15:19:32 +03:00
|
|
|
endif
|
|
|
|
|
|
|
|
#
|
2020-06-26 21:02:44 +03:00
|
|
|
# LibTemplate we build two different libraries from the same source code,
|
|
|
|
# libapp.a and libextension.a
|
2016-04-21 15:19:32 +03:00
|
|
|
#
|
|
|
|
# They're all built from the same soure file (extension-main.m), but with different defines:
|
2020-06-26 21:02:44 +03:00
|
|
|
# libextension.a has EXTENSION defined.
|
2016-04-21 15:19:32 +03:00
|
|
|
#
|
|
|
|
|
|
|
|
define LibTemplate
|
|
|
|
$$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/extension-main.$$(arch).o): EXTRA_DEFINES=-DEXTENSION
|
|
|
|
$$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/watchextension-main.$$(arch).o): EXTRA_DEFINES=-DWATCH_EXTENSION
|
2016-04-26 00:27:10 +03:00
|
|
|
$$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/tvextension-main.$$(arch).o): EXTRA_DEFINES=-DTV_EXTENSION
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
.libs/$(1)/libextension.%.a: .libs/$(1)/extension-main.%.o
|
|
|
|
$(Q) rm -f $$@
|
|
|
|
$$(call Q_2,AR, [$1]) $(DEVICE_BIN_PATH)/ar cru $$@ $$^
|
|
|
|
|
|
|
|
.libs/$(1)/libapp.%.a: .libs/$(1)/app-main.%.o
|
|
|
|
$(Q) rm -f $$@
|
|
|
|
$$(call Q_2,AR, [$1]) $(DEVICE_BIN_PATH)/ar cru $$@ $$^
|
|
|
|
|
|
|
|
.libs/$(1)/libextension.a: $$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/libextension.$$(arch).a)
|
|
|
|
$(Q) rm -f $$@
|
|
|
|
$$(call Q_2,LIPO, [$1]) $(DEVICE_BIN_PATH)/lipo $$^ -create -output $$@
|
|
|
|
|
|
|
|
.libs/$(1)/libapp.a: $$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/libapp.$$(arch).a)
|
|
|
|
$(Q) rm -f $$@
|
|
|
|
$$(call Q_2,LIPO, [$1]) $(DEVICE_BIN_PATH)/lipo $$^ -create -output $$@
|
|
|
|
|
2016-04-26 00:27:10 +03:00
|
|
|
.libs/$(1)/libtvextension.%.a: .libs/$(1)/tvextension-main.%.o
|
|
|
|
$(Q) rm -f $$@
|
|
|
|
$$(call Q_2,AR, [$1]) $(DEVICE_BIN_PATH)/ar cru $$@ $$^
|
|
|
|
|
|
|
|
.libs/$(1)/libtvextension.a: $$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/libtvextension.$$(arch).a)
|
|
|
|
$(Q) rm -f $$@
|
|
|
|
$$(call Q_2,LIPO, [$1]) $(DEVICE_BIN_PATH)/lipo $$^ -create -output $$@
|
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
.libs/$(1)/libxamarin.dylib: $$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/libxamarin.$$(arch).dylib)
|
Remove unnecessary bitcode from dylibs. Fixes #51352 (#1469)
This is a series of fixes to the dynamic libraries we build / create to remove
any unnecessary bloat (unused architectures, bitcode).
A brand new watchOS app with no changes goes from 35MB to 11MB with these
fixes (with incremental builds disabled, the app size is 10MB).
--------------------------------------------------------------------------------
* [runtime] Split list of architectures into simulator and device-specific lists.
* [runtime] Build separate dylibs for device and simulator.
Build separate dylibs for device and simulator, since we already install these
into different locations.
This makes both the simulator and device builds slightly faster (since the
respective dylibs are smaller, and less data to copy around).
For watchOS apps, this saves ~430kb.
* [runtime] Strip bitcode from dylibs. Fixes #51352.
We know that dylibs will never be shipped to the App Store, so we'll never
need them to have bitcode.
So just strip the bitcode from all our dylibs, since this makes apps with
fastdev significantly smaller (and thus much faster to upload to watch
devices).
For watchOS apps this is a very significant improvement: a branch new watchOS
app without any changes goes from 35MB to 17MB.
https://bugzilla.xamarin.com/show_bug.cgi?id=51352
* [mtouch] Fix dylib compilation to not embed full bitcode.
Facts
=====
a. The output from the AOT compiler is an assembly (.s) file.
b. Clang's assembler does not support -fembed-bitcode-marker (only -fembed-
bitcode), so when we ask clang to -fembed-bitcode-marker, the assembler
receives a -fembed-bitcode argument.
c. This means that the assembled object file does not contain the
__LLVM/__bitcode and __LLVM/__cmdline sections (it does however contain an
__LLVM/__asm section).
d. The native linker will create a bitcode assembly section if none of the
object files passed to the linker contain a __LLVM/__bitcode section and
there's an __LLVM/__asm section present.
e. The end result is that when we build to a dylib, we end up (unexpectedly,
because we ask Clang to -fembed-bitcode-marker) including both armv7k and
bitcode in the dylib, thus bloating the dylib size significantly.
Solution
========
We manually add the __LLVM/__bitcode and __LLVM/__cmdline sections to the .s
file Mono's AOT compiler generated. This way the .o file will have the magic
sections, and the linker will not include bitcode (only the bitcode marker) in
the final library.
An empty watchOS extension with incremental builds is now 6MB smaller (down
to 11MB from 17MB).
2017-01-16 14:32:06 +03:00
|
|
|
$(Q) rm -f $$@
|
2019-10-03 17:38:44 +03:00
|
|
|
ifeq (1,$$(words $$($(2)_ARCHITECTURES)))
|
|
|
|
$(Q) $(CP) $$^ $$@
|
|
|
|
else
|
Remove unnecessary bitcode from dylibs. Fixes #51352 (#1469)
This is a series of fixes to the dynamic libraries we build / create to remove
any unnecessary bloat (unused architectures, bitcode).
A brand new watchOS app with no changes goes from 35MB to 11MB with these
fixes (with incremental builds disabled, the app size is 10MB).
--------------------------------------------------------------------------------
* [runtime] Split list of architectures into simulator and device-specific lists.
* [runtime] Build separate dylibs for device and simulator.
Build separate dylibs for device and simulator, since we already install these
into different locations.
This makes both the simulator and device builds slightly faster (since the
respective dylibs are smaller, and less data to copy around).
For watchOS apps, this saves ~430kb.
* [runtime] Strip bitcode from dylibs. Fixes #51352.
We know that dylibs will never be shipped to the App Store, so we'll never
need them to have bitcode.
So just strip the bitcode from all our dylibs, since this makes apps with
fastdev significantly smaller (and thus much faster to upload to watch
devices).
For watchOS apps this is a very significant improvement: a branch new watchOS
app without any changes goes from 35MB to 17MB.
https://bugzilla.xamarin.com/show_bug.cgi?id=51352
* [mtouch] Fix dylib compilation to not embed full bitcode.
Facts
=====
a. The output from the AOT compiler is an assembly (.s) file.
b. Clang's assembler does not support -fembed-bitcode-marker (only -fembed-
bitcode), so when we ask clang to -fembed-bitcode-marker, the assembler
receives a -fembed-bitcode argument.
c. This means that the assembled object file does not contain the
__LLVM/__bitcode and __LLVM/__cmdline sections (it does however contain an
__LLVM/__asm section).
d. The native linker will create a bitcode assembly section if none of the
object files passed to the linker contain a __LLVM/__bitcode section and
there's an __LLVM/__asm section present.
e. The end result is that when we build to a dylib, we end up (unexpectedly,
because we ask Clang to -fembed-bitcode-marker) including both armv7k and
bitcode in the dylib, thus bloating the dylib size significantly.
Solution
========
We manually add the __LLVM/__bitcode and __LLVM/__cmdline sections to the .s
file Mono's AOT compiler generated. This way the .o file will have the magic
sections, and the linker will not include bitcode (only the bitcode marker) in
the final library.
An empty watchOS extension with incremental builds is now 6MB smaller (down
to 11MB from 17MB).
2017-01-16 14:32:06 +03:00
|
|
|
$$(call Q_2,LIPO, [$1]) $(DEVICE_BIN_PATH)/lipo $$^ -create -output $$@
|
2019-10-03 17:38:44 +03:00
|
|
|
endif
|
2017-01-24 22:24:32 +03:00
|
|
|
$(Q) install_name_tool -id @rpath/libxamarin.dylib $$@
|
|
|
|
$(Q) install_name_tool -change @rpath/ @rpath/libmonosgen-2.0.dylib $$@
|
Remove unnecessary bitcode from dylibs. Fixes #51352 (#1469)
This is a series of fixes to the dynamic libraries we build / create to remove
any unnecessary bloat (unused architectures, bitcode).
A brand new watchOS app with no changes goes from 35MB to 11MB with these
fixes (with incremental builds disabled, the app size is 10MB).
--------------------------------------------------------------------------------
* [runtime] Split list of architectures into simulator and device-specific lists.
* [runtime] Build separate dylibs for device and simulator.
Build separate dylibs for device and simulator, since we already install these
into different locations.
This makes both the simulator and device builds slightly faster (since the
respective dylibs are smaller, and less data to copy around).
For watchOS apps, this saves ~430kb.
* [runtime] Strip bitcode from dylibs. Fixes #51352.
We know that dylibs will never be shipped to the App Store, so we'll never
need them to have bitcode.
So just strip the bitcode from all our dylibs, since this makes apps with
fastdev significantly smaller (and thus much faster to upload to watch
devices).
For watchOS apps this is a very significant improvement: a branch new watchOS
app without any changes goes from 35MB to 17MB.
https://bugzilla.xamarin.com/show_bug.cgi?id=51352
* [mtouch] Fix dylib compilation to not embed full bitcode.
Facts
=====
a. The output from the AOT compiler is an assembly (.s) file.
b. Clang's assembler does not support -fembed-bitcode-marker (only -fembed-
bitcode), so when we ask clang to -fembed-bitcode-marker, the assembler
receives a -fembed-bitcode argument.
c. This means that the assembled object file does not contain the
__LLVM/__bitcode and __LLVM/__cmdline sections (it does however contain an
__LLVM/__asm section).
d. The native linker will create a bitcode assembly section if none of the
object files passed to the linker contain a __LLVM/__bitcode section and
there's an __LLVM/__asm section present.
e. The end result is that when we build to a dylib, we end up (unexpectedly,
because we ask Clang to -fembed-bitcode-marker) including both armv7k and
bitcode in the dylib, thus bloating the dylib size significantly.
Solution
========
We manually add the __LLVM/__bitcode and __LLVM/__cmdline sections to the .s
file Mono's AOT compiler generated. This way the .o file will have the magic
sections, and the linker will not include bitcode (only the bitcode marker) in
the final library.
An empty watchOS extension with incremental builds is now 6MB smaller (down
to 11MB from 17MB).
2017-01-16 14:32:06 +03:00
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
.libs/$(1)/libxamarin-debug.dylib: $$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/libxamarin-debug.$$(arch).dylib)
|
Remove unnecessary bitcode from dylibs. Fixes #51352 (#1469)
This is a series of fixes to the dynamic libraries we build / create to remove
any unnecessary bloat (unused architectures, bitcode).
A brand new watchOS app with no changes goes from 35MB to 11MB with these
fixes (with incremental builds disabled, the app size is 10MB).
--------------------------------------------------------------------------------
* [runtime] Split list of architectures into simulator and device-specific lists.
* [runtime] Build separate dylibs for device and simulator.
Build separate dylibs for device and simulator, since we already install these
into different locations.
This makes both the simulator and device builds slightly faster (since the
respective dylibs are smaller, and less data to copy around).
For watchOS apps, this saves ~430kb.
* [runtime] Strip bitcode from dylibs. Fixes #51352.
We know that dylibs will never be shipped to the App Store, so we'll never
need them to have bitcode.
So just strip the bitcode from all our dylibs, since this makes apps with
fastdev significantly smaller (and thus much faster to upload to watch
devices).
For watchOS apps this is a very significant improvement: a branch new watchOS
app without any changes goes from 35MB to 17MB.
https://bugzilla.xamarin.com/show_bug.cgi?id=51352
* [mtouch] Fix dylib compilation to not embed full bitcode.
Facts
=====
a. The output from the AOT compiler is an assembly (.s) file.
b. Clang's assembler does not support -fembed-bitcode-marker (only -fembed-
bitcode), so when we ask clang to -fembed-bitcode-marker, the assembler
receives a -fembed-bitcode argument.
c. This means that the assembled object file does not contain the
__LLVM/__bitcode and __LLVM/__cmdline sections (it does however contain an
__LLVM/__asm section).
d. The native linker will create a bitcode assembly section if none of the
object files passed to the linker contain a __LLVM/__bitcode section and
there's an __LLVM/__asm section present.
e. The end result is that when we build to a dylib, we end up (unexpectedly,
because we ask Clang to -fembed-bitcode-marker) including both armv7k and
bitcode in the dylib, thus bloating the dylib size significantly.
Solution
========
We manually add the __LLVM/__bitcode and __LLVM/__cmdline sections to the .s
file Mono's AOT compiler generated. This way the .o file will have the magic
sections, and the linker will not include bitcode (only the bitcode marker) in
the final library.
An empty watchOS extension with incremental builds is now 6MB smaller (down
to 11MB from 17MB).
2017-01-16 14:32:06 +03:00
|
|
|
$(Q) rm -f $$@
|
2019-10-03 17:38:44 +03:00
|
|
|
ifeq (1,$$(words $$($(2)_ARCHITECTURES)))
|
|
|
|
$(Q) $(CP) $$^ $$@
|
|
|
|
else
|
Remove unnecessary bitcode from dylibs. Fixes #51352 (#1469)
This is a series of fixes to the dynamic libraries we build / create to remove
any unnecessary bloat (unused architectures, bitcode).
A brand new watchOS app with no changes goes from 35MB to 11MB with these
fixes (with incremental builds disabled, the app size is 10MB).
--------------------------------------------------------------------------------
* [runtime] Split list of architectures into simulator and device-specific lists.
* [runtime] Build separate dylibs for device and simulator.
Build separate dylibs for device and simulator, since we already install these
into different locations.
This makes both the simulator and device builds slightly faster (since the
respective dylibs are smaller, and less data to copy around).
For watchOS apps, this saves ~430kb.
* [runtime] Strip bitcode from dylibs. Fixes #51352.
We know that dylibs will never be shipped to the App Store, so we'll never
need them to have bitcode.
So just strip the bitcode from all our dylibs, since this makes apps with
fastdev significantly smaller (and thus much faster to upload to watch
devices).
For watchOS apps this is a very significant improvement: a branch new watchOS
app without any changes goes from 35MB to 17MB.
https://bugzilla.xamarin.com/show_bug.cgi?id=51352
* [mtouch] Fix dylib compilation to not embed full bitcode.
Facts
=====
a. The output from the AOT compiler is an assembly (.s) file.
b. Clang's assembler does not support -fembed-bitcode-marker (only -fembed-
bitcode), so when we ask clang to -fembed-bitcode-marker, the assembler
receives a -fembed-bitcode argument.
c. This means that the assembled object file does not contain the
__LLVM/__bitcode and __LLVM/__cmdline sections (it does however contain an
__LLVM/__asm section).
d. The native linker will create a bitcode assembly section if none of the
object files passed to the linker contain a __LLVM/__bitcode section and
there's an __LLVM/__asm section present.
e. The end result is that when we build to a dylib, we end up (unexpectedly,
because we ask Clang to -fembed-bitcode-marker) including both armv7k and
bitcode in the dylib, thus bloating the dylib size significantly.
Solution
========
We manually add the __LLVM/__bitcode and __LLVM/__cmdline sections to the .s
file Mono's AOT compiler generated. This way the .o file will have the magic
sections, and the linker will not include bitcode (only the bitcode marker) in
the final library.
An empty watchOS extension with incremental builds is now 6MB smaller (down
to 11MB from 17MB).
2017-01-16 14:32:06 +03:00
|
|
|
$$(call Q_2,LIPO, [$1]) $(DEVICE_BIN_PATH)/lipo $$^ -create -output $$@
|
2019-10-03 17:38:44 +03:00
|
|
|
endif
|
2017-01-24 22:24:32 +03:00
|
|
|
$(Q) install_name_tool -id @rpath/libxamarin-debug.dylib $$@
|
|
|
|
$(Q) install_name_tool -change @rpath/ @rpath/libmonosgen-2.0.dylib $$@
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
.SECONDARY: $$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/app-main.$$(arch).o)
|
|
|
|
endef
|
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
$(eval $(call LibTemplate,iphoneos,IPHONEOS))
|
|
|
|
$(eval $(call LibTemplate,iphonesimulator,IOSSIMULATOR))
|
2020-11-17 11:30:08 +03:00
|
|
|
$(eval $(call LibTemplate,maccatalyst,MACCATALYST))
|
2016-04-21 15:19:32 +03:00
|
|
|
$(eval $(call LibTemplate,watchos,WATCHOS))
|
2019-10-03 17:38:44 +03:00
|
|
|
$(eval $(call LibTemplate,watchsimulator,WATCHSIMULATOR))
|
2016-04-21 15:19:32 +03:00
|
|
|
$(eval $(call LibTemplate,tvos,TVOS))
|
2019-10-03 17:38:44 +03:00
|
|
|
$(eval $(call LibTemplate,tvsimulator,TVSIMULATOR))
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
#
|
|
|
|
# LibXamarinTemplate (and LibXamarinArchTemplate) builds libxamarin.a
|
|
|
|
#
|
|
|
|
|
|
|
|
define LibXamarinArchTemplate
|
|
|
|
.libs/$(1)/libxamarin$(4).$(5).a: $$($(5)_$(1)$(3)_OBJECTS)
|
|
|
|
$$(Q) rm -f $$@
|
2016-05-11 17:17:03 +03:00
|
|
|
$$(call Q_2,AR, [$1]) $(DEVICE_BIN_PATH)/ar Scru $$@ $$^
|
|
|
|
$$(call Q_2,RANLIB,[$1]) $(DEVICE_BIN_PATH)/ranlib -no_warning_for_no_symbols -q $$@
|
2016-04-21 15:19:32 +03:00
|
|
|
endef
|
|
|
|
|
|
|
|
define LibXamarinTemplate
|
|
|
|
|
|
|
|
$(1)$(3)_COMMON_DYLIB_FLAGS = -lmonosgen-2.0 -Wl,-install_name,libxamarin$(4).dylib -framework Foundation -framework CFNetwork -framework UIKit -lz
|
2017-04-25 18:39:58 +03:00
|
|
|
$(1)$(3)_COMMON_FRAMEWORK_FLAGS = -framework Mono -Wl,-install_name,@rpath/Xamarin$(4).framework/Xamarin$(4) -framework Foundation -framework CFNetwork -framework UIKit -lz
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2019-02-05 03:46:02 +03:00
|
|
|
x86_$(1)$(3)_OBJECTS = $$(patsubst %,.libs/$(1)/%$(4).x86.o,$$($(2)_SOURCE_STEMS)) $$(patsubst %,.libs/$(1)/%$(4).x86.o,$$($(2)_I386_SOURCE_STEMS))
|
|
|
|
x86_64_$(1)$(3)_OBJECTS = $$(patsubst %,.libs/$(1)/%$(4).x86_64.o,$$($(2)_SOURCE_STEMS)) $$(patsubst %,.libs/$(1)/%$(4).x86_64.o,$$($(2)_X86_64_SOURCE_STEMS))
|
|
|
|
armv7_$(1)$(3)_OBJECTS = $$(patsubst %,.libs/$(1)/%$(4).armv7.o,$$($(2)_SOURCE_STEMS))
|
|
|
|
armv7s_$(1)$(3)_OBJECTS = $$(patsubst %,.libs/$(1)/%$(4).armv7s.o,$$($(2)_SOURCE_STEMS))
|
|
|
|
armv7k_$(1)$(3)_OBJECTS = $$(patsubst %,.libs/$(1)/%$(4).armv7k.o,$$($(2)_SOURCE_STEMS))
|
2019-05-07 08:35:39 +03:00
|
|
|
arm64_$(1)$(3)_OBJECTS = $$(patsubst %,.libs/$(1)/%$(4).arm64.o,$$($(2)_SOURCE_STEMS)) $$(patsubst %,.libs/$(1)/%$(4).arm64.o,$$($(2)_ARM64_SOURCE_STEMS))
|
2019-01-23 23:01:43 +03:00
|
|
|
arm64_32_$(1)$(3)_OBJECTS = $$(patsubst %,.libs/$(1)/%$(4).arm64_32.o,$$($(2)_SOURCE_STEMS))
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
$$(foreach arch,$$($(2)_ARCHITECTURES),$$(eval $$(call LibXamarinArchTemplate,$(1),$(2),$(3),$(4),$$(arch))))
|
|
|
|
|
|
|
|
.libs/$(1)/libxamarin$(4).a: $$(foreach arch,$$($(2)_ARCHITECTURES),.libs/$(1)/libxamarin$(4).$$(arch).a)
|
|
|
|
$(Q) rm -f $$@
|
|
|
|
$$(call Q_2,LIPO, [$1]) $(DEVICE_BIN_PATH)/lipo $$^ -create -output $$@
|
|
|
|
|
|
|
|
.libs/$(1)/libxamarin$(4).x86.dylib: EXTRA_FLAGS=$$($(1)$(3)_COMMON_DYLIB_FLAGS)
|
|
|
|
.libs/$(1)/libxamarin$(4).x86.dylib: $$(x86_$(1)$(3)_OBJECTS)
|
|
|
|
|
|
|
|
.libs/$(1)/libxamarin$(4).x86_64.dylib: EXTRA_FLAGS=$$($(1)$(3)_COMMON_DYLIB_FLAGS)
|
|
|
|
.libs/$(1)/libxamarin$(4).x86_64.dylib: $$(x86_64_$(1)$(3)_OBJECTS)
|
|
|
|
|
2016-09-01 16:45:23 +03:00
|
|
|
.libs/$(1)/libxamarin$(4).armv7.dylib: EXTRA_FLAGS=$$($(1)$(3)_COMMON_DYLIB_FLAGS) -miphoneos-version-min=8.0
|
2016-04-21 15:19:32 +03:00
|
|
|
.libs/$(1)/libxamarin$(4).armv7.dylib: $$(armv7_$(1)$(3)_OBJECTS)
|
|
|
|
|
2016-09-01 16:45:23 +03:00
|
|
|
.libs/$(1)/libxamarin$(4).armv7s.dylib: EXTRA_FLAGS=$$($(1)$(3)_COMMON_DYLIB_FLAGS) -miphoneos-version-min=8.0
|
2016-04-21 15:19:32 +03:00
|
|
|
.libs/$(1)/libxamarin$(4).armv7s.dylib: $$(armv7s_$(1)$(3)_OBJECTS)
|
|
|
|
|
|
|
|
.libs/$(1)/libxamarin$(4).arm64.dylib: EXTRA_FLAGS=$$($(1)$(3)_COMMON_DYLIB_FLAGS)
|
|
|
|
.libs/$(1)/libxamarin$(4).arm64.dylib: $$(arm64_$(1)$(3)_OBJECTS)
|
|
|
|
|
|
|
|
.libs/$(1)/libxamarin$(4).armv7k.dylib: EXTRA_FLAGS=$$($(1)$(3)_COMMON_DYLIB_FLAGS)
|
|
|
|
.libs/$(1)/libxamarin$(4).armv7k.dylib: $$(armv7k_$(1)$(3)_OBJECTS)
|
2017-04-03 12:52:29 +03:00
|
|
|
|
2019-01-23 23:01:43 +03:00
|
|
|
.libs/$(1)/libxamarin$(4).arm64_32.dylib: EXTRA_FLAGS=$$($(1)$(3)_COMMON_DYLIB_FLAGS)
|
|
|
|
.libs/$(1)/libxamarin$(4).arm64_32.dylib: $$(arm64_32_$(1)$(3)_OBJECTS)
|
|
|
|
|
2017-04-03 12:52:29 +03:00
|
|
|
.libs/$(1)/Xamarin$(4).x86.framework: EXTRA_FLAGS=$$($(1)$(3)_COMMON_FRAMEWORK_FLAGS)
|
|
|
|
.libs/$(1)/Xamarin$(4).x86.framework: $$(x86_$(1)$(3)_OBJECTS)
|
|
|
|
|
|
|
|
.libs/$(1)/Xamarin$(4).x86_64.framework: EXTRA_FLAGS=$$($(1)$(3)_COMMON_FRAMEWORK_FLAGS)
|
|
|
|
.libs/$(1)/Xamarin$(4).x86_64.framework: $$(x86_64_$(1)$(3)_OBJECTS)
|
|
|
|
|
|
|
|
.libs/$(1)/Xamarin$(4).armv7.framework: EXTRA_FLAGS=$$($(1)$(3)_COMMON_FRAMEWORK_FLAGS) -miphoneos-version-min=8.0
|
|
|
|
.libs/$(1)/Xamarin$(4).armv7.framework: $$(armv7_$(1)$(3)_OBJECTS)
|
|
|
|
|
|
|
|
.libs/$(1)/Xamarin$(4).armv7s.framework: EXTRA_FLAGS=$$($(1)$(3)_COMMON_FRAMEWORK_FLAGS) -miphoneos-version-min=8.0
|
|
|
|
.libs/$(1)/Xamarin$(4).armv7s.framework: $$(armv7s_$(1)$(3)_OBJECTS)
|
|
|
|
|
|
|
|
.libs/$(1)/Xamarin$(4).arm64.framework: EXTRA_FLAGS=$$($(1)$(3)_COMMON_FRAMEWORK_FLAGS)
|
|
|
|
.libs/$(1)/Xamarin$(4).arm64.framework: $$(arm64_$(1)$(3)_OBJECTS)
|
|
|
|
|
|
|
|
.libs/$(1)/Xamarin$(4).armv7k.framework: EXTRA_FLAGS=$$($(1)$(3)_COMMON_FRAMEWORK_FLAGS)
|
|
|
|
.libs/$(1)/Xamarin$(4).armv7k.framework: $$(armv7k_$(1)$(3)_OBJECTS)
|
2019-01-23 23:01:43 +03:00
|
|
|
|
|
|
|
.libs/$(1)/Xamarin$(4).arm64_32.framework: EXTRA_FLAGS=$$($(1)$(3)_COMMON_FRAMEWORK_FLAGS)
|
|
|
|
.libs/$(1)/Xamarin$(4).arm64_32.framework: $$(arm64_32_$(1)$(3)_OBJECTS)
|
2016-04-21 15:19:32 +03:00
|
|
|
endef
|
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
$(eval $(call LibXamarinTemplate,iphoneos,IPHONEOS))
|
|
|
|
$(eval $(call LibXamarinTemplate,iphoneos,IPHONEOS,_DEBUG,-debug))
|
|
|
|
$(eval $(call LibXamarinTemplate,iphonesimulator,IOSSIMULATOR))
|
|
|
|
$(eval $(call LibXamarinTemplate,iphonesimulator,IOSSIMULATOR,_DEBUG,-debug))
|
2020-11-17 11:30:08 +03:00
|
|
|
$(eval $(call LibXamarinTemplate,maccatalyst,MACCATALYST))
|
|
|
|
$(eval $(call LibXamarinTemplate,maccatalyst,MACCATALYST,_DEBUG,-debug))
|
2016-04-21 15:19:32 +03:00
|
|
|
$(eval $(call LibXamarinTemplate,watchos,WATCHOS))
|
|
|
|
$(eval $(call LibXamarinTemplate,watchos,WATCHOS,_DEBUG,-debug))
|
2019-10-03 17:38:44 +03:00
|
|
|
$(eval $(call LibXamarinTemplate,watchsimulator,WATCHSIMULATOR))
|
|
|
|
$(eval $(call LibXamarinTemplate,watchsimulator,WATCHSIMULATOR,_DEBUG,-debug))
|
2016-04-21 15:19:32 +03:00
|
|
|
$(eval $(call LibXamarinTemplate,tvos,TVOS))
|
|
|
|
$(eval $(call LibXamarinTemplate,tvos,TVOS,_DEBUG,-debug))
|
2019-10-03 17:38:44 +03:00
|
|
|
$(eval $(call LibXamarinTemplate,tvsimulator,TVSIMULATOR))
|
|
|
|
$(eval $(call LibXamarinTemplate,tvsimulator,TVSIMULATOR,_DEBUG,-debug))
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
#
|
|
|
|
# Xamarin.Mac
|
|
|
|
#
|
|
|
|
|
Xamarin.Mac native Apple Silicon targetting support (#10115)
* Add support for Xamarin.Mac arm64
* Add compile product definition task
Xamarin.Mac can be provided with a ProductDefinition file for the generated pkg. Normally, providing a product definition was optional. However, with Apple Silicon, we have an extra issue : `productbuild` needs to know what architectures your package target. If not provided with them, it will guess to the best of its abilities. However, on Catalina and lower, the guess is x86_64, even if you have an arm64 slice. To fix this, we add a new task to compile the product definition and use this file to create the pkg. If you provide your own Product Definition, we can check and warn if the architectures don't match what we expect. If the file doesn't exist or there is no architecture, we set it ourselves based on our target architectures.
* Don't reference dynamic objC_send on arm64
When building in debug, we currently try to link dynamic objC_send symbols when targeting a 64-bit architecture. However, this is actually only defined on Intel architectures, not on arm64, so we end up failing because we're referring symbols that don't exist. Rework the `GetRequiredSymbols` to take an abi, and tag those symbols to only be valid on i386/x86_64, so they don't get referred at all when building on arm64, but still get referred in x86_64.
* Fix improper delete/move with already existing directories
* Fix stret requirement for Xamarin.Mac in arm64.
The generator supposes that we're running in x64 mode, refactor to take into account the possibility of running in arm64.
* Implement OS version generation in Product.plist, based on MinimumSystemVersion of the app
* Re-generalize some mmp registrar rules
`Microsoft.macOS.registrar` was missed by the current rule set
* Fix mmp tests
* Set E7072 as not translated
Tests were failing otherwise
* Rename Xamarin.Mac lib/x86_64 folder to 64bits (currently all targeted archs are the same)
* Fix style issues
* Fix `ToLower` usage for invariant usage
* Fix xtro-sharpie test
2021-03-18 04:48:02 +03:00
|
|
|
MAC_ARCHITECTURES = x86_64 arm64
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
CLANG_ARCH = $(addprefix -arch ,$(MAC_ARCHITECTURES))
|
2018-11-05 16:46:41 +03:00
|
|
|
MAC_CLANG = DEVELOPER_DIR=$(XCODE_DEVELOPER_ROOT) $(MAC_CC) -mmacosx-version-min=$(MIN_OSX_SDK_VERSION)
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2019-07-15 20:19:24 +03:00
|
|
|
MAC_SHIPPED_HEADERS = xamarin/launch.h
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2019-05-12 19:06:06 +03:00
|
|
|
MAC_STATIC_CFLAGS = $(MAC_CFLAGS)
|
2016-04-21 15:19:32 +03:00
|
|
|
|
Xamarin.Mac native Apple Silicon targetting support (#10115)
* Add support for Xamarin.Mac arm64
* Add compile product definition task
Xamarin.Mac can be provided with a ProductDefinition file for the generated pkg. Normally, providing a product definition was optional. However, with Apple Silicon, we have an extra issue : `productbuild` needs to know what architectures your package target. If not provided with them, it will guess to the best of its abilities. However, on Catalina and lower, the guess is x86_64, even if you have an arm64 slice. To fix this, we add a new task to compile the product definition and use this file to create the pkg. If you provide your own Product Definition, we can check and warn if the architectures don't match what we expect. If the file doesn't exist or there is no architecture, we set it ourselves based on our target architectures.
* Don't reference dynamic objC_send on arm64
When building in debug, we currently try to link dynamic objC_send symbols when targeting a 64-bit architecture. However, this is actually only defined on Intel architectures, not on arm64, so we end up failing because we're referring symbols that don't exist. Rework the `GetRequiredSymbols` to take an abi, and tag those symbols to only be valid on i386/x86_64, so they don't get referred at all when building on arm64, but still get referred in x86_64.
* Fix improper delete/move with already existing directories
* Fix stret requirement for Xamarin.Mac in arm64.
The generator supposes that we're running in x64 mode, refactor to take into account the possibility of running in arm64.
* Implement OS version generation in Product.plist, based on MinimumSystemVersion of the app
* Re-generalize some mmp registrar rules
`Microsoft.macOS.registrar` was missed by the current rule set
* Fix mmp tests
* Set E7072 as not translated
Tests were failing otherwise
* Rename Xamarin.Mac lib/x86_64 folder to 64bits (currently all targeted archs are the same)
* Fix style issues
* Fix `ToLower` usage for invariant usage
* Fix xtro-sharpie test
2021-03-18 04:48:02 +03:00
|
|
|
MAC_SOURCES = $(SHARED_SOURCES) $(SHARED_X86_64_SOURCES) $(SHARED_ARM64_SOURCES) launcher.m
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
ALLOWED_UNDEFINED_SYMBOLS = _xamarin_enable_debug _xammac_setup
|
|
|
|
|
|
|
|
MAC_LIBS = \
|
2016-05-26 00:20:33 +03:00
|
|
|
libextension.a \
|
2016-04-21 15:19:32 +03:00
|
|
|
libxammac.a \
|
|
|
|
libxammac-debug.a \
|
2018-01-22 23:16:41 +03:00
|
|
|
libxammac-classic.a \
|
|
|
|
libxammac-classic-debug.a\
|
2016-04-21 15:19:32 +03:00
|
|
|
libxammac.dylib \
|
|
|
|
libxammac-debug.dylib \
|
|
|
|
libxammac-system.a \
|
|
|
|
libxammac-system-debug.a \
|
2018-01-22 23:16:41 +03:00
|
|
|
libxammac-system-classic.a \
|
|
|
|
libxammac-system-classic-debug.a \
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
#
|
|
|
|
# libxammac[-debug].a: (no defines)
|
|
|
|
# This is linked into the native executable when embedding the Mono runtime.
|
|
|
|
#
|
|
|
|
# libxammac[-debug].dylib: -DDYNAMIC_MONO_RUNTIME -DDYLIB
|
|
|
|
# This is not officially supported. It's used when not wanting to use mmp for
|
|
|
|
# whatever reason (usually to make build processes easier). There is no good
|
|
|
|
# reason to keep using it, since mmp now supports creating empty 'shell' apps
|
|
|
|
# with no assemblies, which the user can fill in as they want.
|
|
|
|
#
|
|
|
|
# libxammac-system[-debug].a: -DDYNAMIC_MONO_RUNTIME
|
|
|
|
# This is used linked into the native executable when using the system Mono (i.e. not)
|
|
|
|
# embedding the Mono runtime).
|
|
|
|
#
|
2021-03-08 09:57:55 +03:00
|
|
|
# libxamarin-coreclr.a:
|
|
|
|
# This is used when using the CoreCLR runtime instead of Mono.
|
|
|
|
# CORECLR_RUNTIME is defined for these versions of libxamarin.
|
|
|
|
#
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2021-03-04 11:07:44 +03:00
|
|
|
ifdef INCLUDE_XAMARIN_LEGACY
|
2016-04-21 15:19:32 +03:00
|
|
|
all-local:: $(TARGETS)
|
2021-03-04 11:07:44 +03:00
|
|
|
endif
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
define ObjTemplate
|
|
|
|
DYNAMIC_DYLIB$(2)_OBJECTS = $$(foreach src,$$(MAC_SOURCES),.libs/mac/$$(basename $$(src))$(3).dylib.$(1).o)
|
|
|
|
STATIC_LAUNCHER$(2)_OBJECTS = $$(foreach src,$$(MAC_SOURCES),.libs/mac/$$(basename $$(src))$(3).static.$(1).o)
|
|
|
|
SYSTEM_LAUNCHER$(2)_OBJECTS = $$(foreach src,$$(MAC_SOURCES),.libs/mac/$$(basename $$(src))$(3).system.$(1).o)
|
|
|
|
|
|
|
|
.libs/mac/%$(3).dylib.$(1).o: %.m $$(SHARED_HEADERS) | .libs/mac
|
2019-09-24 14:40:18 +03:00
|
|
|
$$(call Q_2,OBJC, [mac]) $(MAC_CLANG) -arch $(1) $(4) -c $$(MAC_OBJC_CFLAGS) $$(MAC_CFLAGS) -DDYNAMIC_MONO_RUNTIME -DDYLIB -o $$@ $$<
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
.libs/mac/%$(3).dylib.$(1).o: %.s $$(SHARED_HEADERS) | .libs/mac
|
2019-09-24 14:40:18 +03:00
|
|
|
$$(call Q_2,ASM, [mac]) $(MAC_CLANG) -arch $(1) $(4) -c $$(MAC_CFLAGS) -DDYNAMIC_MONO_RUNTIME -DDYLIB -o $$@ $$<
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
.libs/mac/%$(3).static.$(1).o: %.s $$(SHARED_HEADERS) | .libs/mac
|
2019-09-24 14:40:18 +03:00
|
|
|
$$(call Q_2,ASM, [mac]) $(MAC_CLANG) -arch $(1) $(4) -c $$(MAC_STATIC_CFLAGS) -o $$@ $$<
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
.libs/mac/%$(3).static.$(1).o: %.m $$(SHARED_HEADERS) | .libs/mac
|
2019-09-24 14:40:18 +03:00
|
|
|
$$(call Q_2,OBJC, [mac]) $(MAC_CLANG) -arch $(1) $(4) $$(MAC_OBJC_CFLAGS) -c $$(MAC_STATIC_CFLAGS) -o $$@ $$<
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
.libs/mac/%$(3).system.$(1).o: %.m $$(SHARED_HEADERS) | .libs/mac
|
2019-09-24 14:40:18 +03:00
|
|
|
$$(call Q_2,OBJC, [mac]) $(MAC_CLANG) -arch $(1) $(4) $$(MAC_OBJC_CFLAGS) -c $$(MAC_CFLAGS) -DDYNAMIC_MONO_RUNTIME -o $$@ $$<
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
.libs/mac/%$(3).system.$(1).o: %.s $$(SHARED_HEADERS) | .libs/mac
|
2019-09-24 14:40:18 +03:00
|
|
|
$$(call Q_2,ASM, [mac]) $(MAC_CLANG) -arch $(1) $(4) -c $(MAC_CFLAGS) -DDYNAMIC_MONO_RUNTIME -o $$@ $$<
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
.libs/mac/libxammac$(3).$(1).dylib: $$(DYNAMIC_DYLIB$(2)_OBJECTS)
|
2019-09-24 14:40:18 +03:00
|
|
|
$$(call Q_2,LD, [mac]) $(MAC_CLANG) -arch $(1) -dynamiclib $$(MAC_LDFLAGS) -Wl,-install_name,libxammac$(3).dylib -o $$@ $$^ $$(addprefix -Xlinker -U -Xlinker ,$$(ALLOWED_UNDEFINED_SYMBOLS))
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
.libs/mac/libxammac$(3).$(1).a: $$(STATIC_LAUNCHER$(2)_OBJECTS)
|
2016-05-11 17:17:03 +03:00
|
|
|
$$(call Q_2,LIB, [mac]) xcrun libtool -no_warning_for_no_symbols -static -o $$@ $$^
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
.libs/mac/libxammac-system$(3).$(1).a: $$(SYSTEM_LAUNCHER$(2)_OBJECTS)
|
2016-05-11 17:17:03 +03:00
|
|
|
$$(call Q_2,LIB, [mac]) xcrun libtool -no_warning_for_no_symbols -static -o $$@ $$^
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
endef
|
|
|
|
|
2018-06-09 04:45:24 +03:00
|
|
|
$(eval $(call ObjTemplate,x86_64,64,,,64))
|
|
|
|
$(eval $(call ObjTemplate,x86_64,DEBUG64,-debug,-DDEBUG,64))
|
Xamarin.Mac native Apple Silicon targetting support (#10115)
* Add support for Xamarin.Mac arm64
* Add compile product definition task
Xamarin.Mac can be provided with a ProductDefinition file for the generated pkg. Normally, providing a product definition was optional. However, with Apple Silicon, we have an extra issue : `productbuild` needs to know what architectures your package target. If not provided with them, it will guess to the best of its abilities. However, on Catalina and lower, the guess is x86_64, even if you have an arm64 slice. To fix this, we add a new task to compile the product definition and use this file to create the pkg. If you provide your own Product Definition, we can check and warn if the architectures don't match what we expect. If the file doesn't exist or there is no architecture, we set it ourselves based on our target architectures.
* Don't reference dynamic objC_send on arm64
When building in debug, we currently try to link dynamic objC_send symbols when targeting a 64-bit architecture. However, this is actually only defined on Intel architectures, not on arm64, so we end up failing because we're referring symbols that don't exist. Rework the `GetRequiredSymbols` to take an abi, and tag those symbols to only be valid on i386/x86_64, so they don't get referred at all when building on arm64, but still get referred in x86_64.
* Fix improper delete/move with already existing directories
* Fix stret requirement for Xamarin.Mac in arm64.
The generator supposes that we're running in x64 mode, refactor to take into account the possibility of running in arm64.
* Implement OS version generation in Product.plist, based on MinimumSystemVersion of the app
* Re-generalize some mmp registrar rules
`Microsoft.macOS.registrar` was missed by the current rule set
* Fix mmp tests
* Set E7072 as not translated
Tests were failing otherwise
* Rename Xamarin.Mac lib/x86_64 folder to 64bits (currently all targeted archs are the same)
* Fix style issues
* Fix `ToLower` usage for invariant usage
* Fix xtro-sharpie test
2021-03-18 04:48:02 +03:00
|
|
|
$(eval $(call ObjTemplate,arm64,64,,,64))
|
|
|
|
$(eval $(call ObjTemplate,arm64,DEBUG64,-debug,-DDEBUG,64))
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2016-05-26 00:20:33 +03:00
|
|
|
$(foreach arch,$(MAC_ARCHITECTURES),.libs/mac/extension-main.$(arch).o): EXTRA_DEFINES=-DEXTENSION
|
|
|
|
|
2019-10-03 17:38:44 +03:00
|
|
|
.libs/mac/extension-main.%.o: | .libs/mac
|
2016-05-26 00:20:33 +03:00
|
|
|
$(Q) rm -f $@
|
|
|
|
$(call Q_2,CC, [mac]) $(MAC_CLANG) -c -DEXTENSION extension-main.m -arch $* -o $@
|
|
|
|
|
|
|
|
.libs/mac/libextension.%.a: .libs/mac/extension-main.%.o
|
|
|
|
$(Q) rm -f $@
|
|
|
|
$(call Q_2,AR, [mac]) $(DEVICE_BIN_PATH)/ar cru $@ $^
|
|
|
|
|
|
|
|
.libs/mac/libextension.a: $(foreach arch,$(MAC_ARCHITECTURES),.libs/mac/libextension.$(arch).a)
|
|
|
|
$(Q) rm -f $@
|
|
|
|
$(call Q_2,LIPO, [mac]) $(DEVICE_BIN_PATH)/lipo $^ -create -output $@
|
|
|
|
|
Xamarin.Mac native Apple Silicon targetting support (#10115)
* Add support for Xamarin.Mac arm64
* Add compile product definition task
Xamarin.Mac can be provided with a ProductDefinition file for the generated pkg. Normally, providing a product definition was optional. However, with Apple Silicon, we have an extra issue : `productbuild` needs to know what architectures your package target. If not provided with them, it will guess to the best of its abilities. However, on Catalina and lower, the guess is x86_64, even if you have an arm64 slice. To fix this, we add a new task to compile the product definition and use this file to create the pkg. If you provide your own Product Definition, we can check and warn if the architectures don't match what we expect. If the file doesn't exist or there is no architecture, we set it ourselves based on our target architectures.
* Don't reference dynamic objC_send on arm64
When building in debug, we currently try to link dynamic objC_send symbols when targeting a 64-bit architecture. However, this is actually only defined on Intel architectures, not on arm64, so we end up failing because we're referring symbols that don't exist. Rework the `GetRequiredSymbols` to take an abi, and tag those symbols to only be valid on i386/x86_64, so they don't get referred at all when building on arm64, but still get referred in x86_64.
* Fix improper delete/move with already existing directories
* Fix stret requirement for Xamarin.Mac in arm64.
The generator supposes that we're running in x64 mode, refactor to take into account the possibility of running in arm64.
* Implement OS version generation in Product.plist, based on MinimumSystemVersion of the app
* Re-generalize some mmp registrar rules
`Microsoft.macOS.registrar` was missed by the current rule set
* Fix mmp tests
* Set E7072 as not translated
Tests were failing otherwise
* Rename Xamarin.Mac lib/x86_64 folder to 64bits (currently all targeted archs are the same)
* Fix style issues
* Fix `ToLower` usage for invariant usage
* Fix xtro-sharpie test
2021-03-18 04:48:02 +03:00
|
|
|
.libs/mac/libxammac-debug.dylib: .libs/mac/libxammac-debug.x86_64.dylib .libs/mac/libxammac-debug.arm64.dylib
|
2016-04-21 15:19:32 +03:00
|
|
|
$(call Q_2,LIPO, [mac]) xcrun lipo -create $^ -o $@
|
|
|
|
|
Xamarin.Mac native Apple Silicon targetting support (#10115)
* Add support for Xamarin.Mac arm64
* Add compile product definition task
Xamarin.Mac can be provided with a ProductDefinition file for the generated pkg. Normally, providing a product definition was optional. However, with Apple Silicon, we have an extra issue : `productbuild` needs to know what architectures your package target. If not provided with them, it will guess to the best of its abilities. However, on Catalina and lower, the guess is x86_64, even if you have an arm64 slice. To fix this, we add a new task to compile the product definition and use this file to create the pkg. If you provide your own Product Definition, we can check and warn if the architectures don't match what we expect. If the file doesn't exist or there is no architecture, we set it ourselves based on our target architectures.
* Don't reference dynamic objC_send on arm64
When building in debug, we currently try to link dynamic objC_send symbols when targeting a 64-bit architecture. However, this is actually only defined on Intel architectures, not on arm64, so we end up failing because we're referring symbols that don't exist. Rework the `GetRequiredSymbols` to take an abi, and tag those symbols to only be valid on i386/x86_64, so they don't get referred at all when building on arm64, but still get referred in x86_64.
* Fix improper delete/move with already existing directories
* Fix stret requirement for Xamarin.Mac in arm64.
The generator supposes that we're running in x64 mode, refactor to take into account the possibility of running in arm64.
* Implement OS version generation in Product.plist, based on MinimumSystemVersion of the app
* Re-generalize some mmp registrar rules
`Microsoft.macOS.registrar` was missed by the current rule set
* Fix mmp tests
* Set E7072 as not translated
Tests were failing otherwise
* Rename Xamarin.Mac lib/x86_64 folder to 64bits (currently all targeted archs are the same)
* Fix style issues
* Fix `ToLower` usage for invariant usage
* Fix xtro-sharpie test
2021-03-18 04:48:02 +03:00
|
|
|
.libs/mac/libxammac.dylib: .libs/mac/libxammac.x86_64.dylib .libs/mac/libxammac.arm64.dylib
|
2016-04-21 15:19:32 +03:00
|
|
|
$(call Q_2,LIPO, [mac]) xcrun lipo -create $^ -o $@
|
|
|
|
|
Xamarin.Mac native Apple Silicon targetting support (#10115)
* Add support for Xamarin.Mac arm64
* Add compile product definition task
Xamarin.Mac can be provided with a ProductDefinition file for the generated pkg. Normally, providing a product definition was optional. However, with Apple Silicon, we have an extra issue : `productbuild` needs to know what architectures your package target. If not provided with them, it will guess to the best of its abilities. However, on Catalina and lower, the guess is x86_64, even if you have an arm64 slice. To fix this, we add a new task to compile the product definition and use this file to create the pkg. If you provide your own Product Definition, we can check and warn if the architectures don't match what we expect. If the file doesn't exist or there is no architecture, we set it ourselves based on our target architectures.
* Don't reference dynamic objC_send on arm64
When building in debug, we currently try to link dynamic objC_send symbols when targeting a 64-bit architecture. However, this is actually only defined on Intel architectures, not on arm64, so we end up failing because we're referring symbols that don't exist. Rework the `GetRequiredSymbols` to take an abi, and tag those symbols to only be valid on i386/x86_64, so they don't get referred at all when building on arm64, but still get referred in x86_64.
* Fix improper delete/move with already existing directories
* Fix stret requirement for Xamarin.Mac in arm64.
The generator supposes that we're running in x64 mode, refactor to take into account the possibility of running in arm64.
* Implement OS version generation in Product.plist, based on MinimumSystemVersion of the app
* Re-generalize some mmp registrar rules
`Microsoft.macOS.registrar` was missed by the current rule set
* Fix mmp tests
* Set E7072 as not translated
Tests were failing otherwise
* Rename Xamarin.Mac lib/x86_64 folder to 64bits (currently all targeted archs are the same)
* Fix style issues
* Fix `ToLower` usage for invariant usage
* Fix xtro-sharpie test
2021-03-18 04:48:02 +03:00
|
|
|
.libs/mac/libxammac-debug.a: .libs/mac/libxammac-debug.x86_64.a .libs/mac/libxammac-debug.arm64.a
|
2016-04-21 15:19:32 +03:00
|
|
|
$(call Q_2,LIPO, [mac]) xcrun lipo -create $^ -o $@
|
|
|
|
|
Xamarin.Mac native Apple Silicon targetting support (#10115)
* Add support for Xamarin.Mac arm64
* Add compile product definition task
Xamarin.Mac can be provided with a ProductDefinition file for the generated pkg. Normally, providing a product definition was optional. However, with Apple Silicon, we have an extra issue : `productbuild` needs to know what architectures your package target. If not provided with them, it will guess to the best of its abilities. However, on Catalina and lower, the guess is x86_64, even if you have an arm64 slice. To fix this, we add a new task to compile the product definition and use this file to create the pkg. If you provide your own Product Definition, we can check and warn if the architectures don't match what we expect. If the file doesn't exist or there is no architecture, we set it ourselves based on our target architectures.
* Don't reference dynamic objC_send on arm64
When building in debug, we currently try to link dynamic objC_send symbols when targeting a 64-bit architecture. However, this is actually only defined on Intel architectures, not on arm64, so we end up failing because we're referring symbols that don't exist. Rework the `GetRequiredSymbols` to take an abi, and tag those symbols to only be valid on i386/x86_64, so they don't get referred at all when building on arm64, but still get referred in x86_64.
* Fix improper delete/move with already existing directories
* Fix stret requirement for Xamarin.Mac in arm64.
The generator supposes that we're running in x64 mode, refactor to take into account the possibility of running in arm64.
* Implement OS version generation in Product.plist, based on MinimumSystemVersion of the app
* Re-generalize some mmp registrar rules
`Microsoft.macOS.registrar` was missed by the current rule set
* Fix mmp tests
* Set E7072 as not translated
Tests were failing otherwise
* Rename Xamarin.Mac lib/x86_64 folder to 64bits (currently all targeted archs are the same)
* Fix style issues
* Fix `ToLower` usage for invariant usage
* Fix xtro-sharpie test
2021-03-18 04:48:02 +03:00
|
|
|
.libs/mac/libxammac.a: .libs/mac/libxammac.x86_64.a .libs/mac/libxammac.arm64.a
|
2016-04-21 15:19:32 +03:00
|
|
|
$(call Q_2,LIPO, [mac]) xcrun lipo -create $^ -o $@
|
|
|
|
|
Xamarin.Mac native Apple Silicon targetting support (#10115)
* Add support for Xamarin.Mac arm64
* Add compile product definition task
Xamarin.Mac can be provided with a ProductDefinition file for the generated pkg. Normally, providing a product definition was optional. However, with Apple Silicon, we have an extra issue : `productbuild` needs to know what architectures your package target. If not provided with them, it will guess to the best of its abilities. However, on Catalina and lower, the guess is x86_64, even if you have an arm64 slice. To fix this, we add a new task to compile the product definition and use this file to create the pkg. If you provide your own Product Definition, we can check and warn if the architectures don't match what we expect. If the file doesn't exist or there is no architecture, we set it ourselves based on our target architectures.
* Don't reference dynamic objC_send on arm64
When building in debug, we currently try to link dynamic objC_send symbols when targeting a 64-bit architecture. However, this is actually only defined on Intel architectures, not on arm64, so we end up failing because we're referring symbols that don't exist. Rework the `GetRequiredSymbols` to take an abi, and tag those symbols to only be valid on i386/x86_64, so they don't get referred at all when building on arm64, but still get referred in x86_64.
* Fix improper delete/move with already existing directories
* Fix stret requirement for Xamarin.Mac in arm64.
The generator supposes that we're running in x64 mode, refactor to take into account the possibility of running in arm64.
* Implement OS version generation in Product.plist, based on MinimumSystemVersion of the app
* Re-generalize some mmp registrar rules
`Microsoft.macOS.registrar` was missed by the current rule set
* Fix mmp tests
* Set E7072 as not translated
Tests were failing otherwise
* Rename Xamarin.Mac lib/x86_64 folder to 64bits (currently all targeted archs are the same)
* Fix style issues
* Fix `ToLower` usage for invariant usage
* Fix xtro-sharpie test
2021-03-18 04:48:02 +03:00
|
|
|
.libs/mac/libxammac-system-debug.a: .libs/mac/libxammac-system-debug.x86_64.a .libs/mac/libxammac-system-debug.arm64.a
|
2016-04-21 15:19:32 +03:00
|
|
|
$(call Q_2,LIPO, [mac]) xcrun lipo -create $^ -o $@
|
|
|
|
|
Xamarin.Mac native Apple Silicon targetting support (#10115)
* Add support for Xamarin.Mac arm64
* Add compile product definition task
Xamarin.Mac can be provided with a ProductDefinition file for the generated pkg. Normally, providing a product definition was optional. However, with Apple Silicon, we have an extra issue : `productbuild` needs to know what architectures your package target. If not provided with them, it will guess to the best of its abilities. However, on Catalina and lower, the guess is x86_64, even if you have an arm64 slice. To fix this, we add a new task to compile the product definition and use this file to create the pkg. If you provide your own Product Definition, we can check and warn if the architectures don't match what we expect. If the file doesn't exist or there is no architecture, we set it ourselves based on our target architectures.
* Don't reference dynamic objC_send on arm64
When building in debug, we currently try to link dynamic objC_send symbols when targeting a 64-bit architecture. However, this is actually only defined on Intel architectures, not on arm64, so we end up failing because we're referring symbols that don't exist. Rework the `GetRequiredSymbols` to take an abi, and tag those symbols to only be valid on i386/x86_64, so they don't get referred at all when building on arm64, but still get referred in x86_64.
* Fix improper delete/move with already existing directories
* Fix stret requirement for Xamarin.Mac in arm64.
The generator supposes that we're running in x64 mode, refactor to take into account the possibility of running in arm64.
* Implement OS version generation in Product.plist, based on MinimumSystemVersion of the app
* Re-generalize some mmp registrar rules
`Microsoft.macOS.registrar` was missed by the current rule set
* Fix mmp tests
* Set E7072 as not translated
Tests were failing otherwise
* Rename Xamarin.Mac lib/x86_64 folder to 64bits (currently all targeted archs are the same)
* Fix style issues
* Fix `ToLower` usage for invariant usage
* Fix xtro-sharpie test
2021-03-18 04:48:02 +03:00
|
|
|
.libs/mac/libxammac-system.a: .libs/mac/libxammac-system.x86_64.a .libs/mac/libxammac-system.arm64.a
|
2016-04-21 15:19:32 +03:00
|
|
|
$(call Q_2,LIPO, [mac]) xcrun lipo -create $^ -o $@
|
|
|
|
|
2018-01-22 23:16:41 +03:00
|
|
|
.libs/mac/libxammac-%.a: $(MACIOS_BINARIES_PATH)/libxammac-%.a | .libs/mac
|
2018-10-29 18:09:30 +03:00
|
|
|
$(Q) $(CP) $< $@
|
2018-01-22 23:16:41 +03:00
|
|
|
|
2021-02-26 16:42:30 +03:00
|
|
|
.libs/mac/libxamarin%.a: .libs/mac/libxamarin%.x86_64.a
|
|
|
|
$(call Q_2,LIPO, [mac]) xcrun lipo -create $^ -o $@
|
|
|
|
|
|
|
|
.libs/mac/libxamarin%.dylib: .libs/mac/libxamarin%.x86_64.dylib
|
|
|
|
$(call Q_2,LIPO, [mac]) xcrun lipo -create $^ -o $@
|
|
|
|
|
2016-04-21 15:19:32 +03:00
|
|
|
RUNTIME_MAC_TARGETS_DIRS += \
|
|
|
|
$(MAC_DESTDIR)$(MAC_FRAMEWORK_CURRENT_DIR)/lib \
|
|
|
|
$(MAC_DESTDIR)$(MAC_FRAMEWORK_CURRENT_DIR)/lib/mono \
|
2020-05-08 14:04:32 +03:00
|
|
|
$(MAC_DESTDIR)$(XAMARIN_MACOS_SDK)/lib \
|
|
|
|
$(MAC_DESTDIR)$(XAMARIN_MACOS_SDK)/include/xamarin \
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
RUNTIME_MAC_TARGETS += \
|
|
|
|
$(MAC_DESTDIR)$(MAC_FRAMEWORK_CURRENT_DIR)/lib/XamMacLauncher \
|
|
|
|
$(MAC_DESTDIR)$(MAC_FRAMEWORK_CURRENT_DIR)/lib/mono/XamMacLauncher \
|
2020-05-08 14:04:32 +03:00
|
|
|
$(foreach file,$(SHIPPED_HEADERS),$(MAC_DESTDIR)$(XAMARIN_MACOS_SDK)/include/$(file)) \
|
|
|
|
$(foreach file,$(MAC_SHIPPED_HEADERS),$(MAC_DESTDIR)$(XAMARIN_MACOS_SDK)/include/$(file)) \
|
|
|
|
$(foreach file,$(MAC_LIBS),$(MAC_DESTDIR)$(XAMARIN_MACOS_SDK)/lib/$(file)) \
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2019-07-15 20:19:24 +03:00
|
|
|
# The XamMacLauncher file must exist for VSfM to be able to open XM/Classic projects (so that people can use the migration wizard)
|
|
|
|
$(MAC_DESTDIR)$(MAC_FRAMEWORK_CURRENT_DIR)/lib/XamMacLauncher: | $(MAC_DESTDIR)$(MAC_FRAMEWORK_CURRENT_DIR)/lib
|
|
|
|
$(Q) touch $@
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2020-05-08 14:04:32 +03:00
|
|
|
$(MAC_DESTDIR)$(XAMARIN_MACOS_SDK)/lib/%: .libs/mac/% | $(MAC_DESTDIR)$(XAMARIN_MACOS_SDK)/lib
|
2018-10-29 18:09:30 +03:00
|
|
|
$(Q) $(CP) $< $@
|
2016-04-21 15:19:32 +03:00
|
|
|
|
|
|
|
$(MAC_DESTDIR)$(MAC_FRAMEWORK_CURRENT_DIR)/lib/mono/XamMacLauncher: | $(MAC_DESTDIR)$(MAC_FRAMEWORK_CURRENT_DIR)/lib/mono
|
|
|
|
$(Q) ln -sF ../XamMacLauncher $@
|
|
|
|
|
2020-05-08 14:04:32 +03:00
|
|
|
$(MAC_DESTDIR)$(XAMARIN_MACOS_SDK)/include/%.h: %.h | $(MAC_DESTDIR)$(XAMARIN_MACOS_SDK)/include/xamarin
|
2016-04-21 15:19:32 +03:00
|
|
|
$(Q) install -m 0644 $< $@
|
|
|
|
|
|
|
|
$(RUNTIME_MAC_TARGETS_DIRS):
|
|
|
|
$(Q) mkdir -p $@
|
|
|
|
|
2021-03-04 11:07:44 +03:00
|
|
|
ifdef INCLUDE_XAMARIN_LEGACY
|
2016-04-21 15:19:32 +03:00
|
|
|
all-local:: $(RUNTIME_MAC_TARGETS)
|
|
|
|
install-local:: $(RUNTIME_MAC_TARGETS)
|
2021-03-04 11:07:44 +03:00
|
|
|
endif
|
2016-04-21 15:19:32 +03:00
|
|
|
|
2020-06-15 18:47:18 +03:00
|
|
|
#
|
|
|
|
# .NET
|
|
|
|
#
|
|
|
|
|
2021-02-26 16:42:30 +03:00
|
|
|
DOTNET_iOS_LIBRARIES = libapp.a libextension.a
|
|
|
|
DOTNET_tvOS_LIBRARIES = libtvextension.a
|
|
|
|
DOTNET_watchOS_LIBRARIES = libextension.a libwatchextension.a
|
|
|
|
DOTNET_macOS_LIBRARIES = libextension.a
|
2020-06-15 18:47:18 +03:00
|
|
|
|
|
|
|
define DotNetLibTemplate
|
|
|
|
DOTNET_TARGETS += \
|
2021-02-26 16:42:30 +03:00
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/libxamarin-dotnet.dylib \
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/libxamarin-dotnet-debug.dylib \
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/libxamarin-dotnet.a \
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/libxamarin-dotnet-debug.a \
|
|
|
|
$$(foreach lib,$$(DOTNET_$(2)_LIBRARIES),$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/$$(lib)) \
|
2020-06-15 18:47:18 +03:00
|
|
|
$$(foreach header,$$(SHIPPED_HEADERS),$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/$$(header)) \
|
|
|
|
|
|
|
|
DOTNET_TARGET_DIRS += \
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native \
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/xamarin \
|
|
|
|
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/xamarin/%.h: xamarin/%.h | $(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/xamarin
|
|
|
|
$$(Q) $$(CP) $$< $$@
|
|
|
|
endef
|
|
|
|
|
2021-02-26 16:42:30 +03:00
|
|
|
$(foreach platform,$(DOTNET_PLATFORMS),$(foreach rid,$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS),$(eval $(call DotNetLibTemplate,$(platform),$(rid)))))
|
2020-06-15 18:47:18 +03:00
|
|
|
|
2021-03-08 09:57:55 +03:00
|
|
|
define DotNetCoreClrLibTemplate
|
|
|
|
DOTNET_TARGETS += \
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/libxamarin-dotnet-coreclr.a \
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/libxamarin-dotnet-coreclr-debug.a \
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/libxamarin-dotnet-coreclr.dylib \
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/libxamarin-dotnet-coreclr-debug.dylib \
|
|
|
|
|
|
|
|
endef
|
|
|
|
|
|
|
|
$(foreach platform,$(DOTNET_CORECLR_PLATFORMS),$(foreach rid,$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS),$(eval $(call DotNetCoreClrLibTemplate,$(platform),$(rid)))))
|
|
|
|
|
2021-02-26 16:42:30 +03:00
|
|
|
# a few lookup tables, because the data we have is not always in the format we need it
|
|
|
|
|
2021-04-02 07:02:27 +03:00
|
|
|
DOTNET_iossimulator-x64_ARCHITECTURES=x86_64
|
|
|
|
DOTNET_iossimulator-x86_ARCHITECTURES=x86
|
2021-03-12 09:36:41 +03:00
|
|
|
DOTNET_ios-arm_ARCHITECTURES=armv7 armv7s
|
|
|
|
DOTNET_ios-arm64_ARCHITECTURES=arm64
|
2021-04-02 07:02:27 +03:00
|
|
|
DOTNET_tvossimulator-x64_ARCHITECTURES=x86_64
|
2021-03-12 09:36:41 +03:00
|
|
|
DOTNET_tvos-arm64_ARCHITECTURES=arm64
|
|
|
|
DOTNET_osx-x64_ARCHITECTURES=x86_64
|
|
|
|
DOTNET_osx-arm64_ARCHITECTURES=arm64
|
|
|
|
DOTNET_maccatalyst-x64_ARCHITECTURES=x86_64
|
|
|
|
DOTNET_maccatalyst-arm64_ARCHITECTURES=arm64
|
|
|
|
|
2021-04-02 07:02:27 +03:00
|
|
|
DOTNET_iossimulator-x64_SDK_PLATFORM=iphonesimulator
|
|
|
|
DOTNET_iossimulator-x86_SDK_PLATFORM=iphonesimulator
|
2021-03-12 09:36:41 +03:00
|
|
|
DOTNET_ios-arm_SDK_PLATFORM=iphoneos
|
|
|
|
DOTNET_ios-arm64_SDK_PLATFORM=iphoneos
|
2021-04-02 07:02:27 +03:00
|
|
|
DOTNET_tvossimulator-x64_SDK_PLATFORM=tvsimulator
|
2021-03-12 09:36:41 +03:00
|
|
|
DOTNET_tvos-arm64_SDK_PLATFORM=tvos
|
|
|
|
DOTNET_osx-x64_SDK_PLATFORM=mac
|
|
|
|
DOTNET_osx-arm64_SDK_PLATFORM=mac
|
|
|
|
DOTNET_maccatalyst-x64_SDK_PLATFORM=maccatalyst
|
|
|
|
DOTNET_maccatalyst-arm64_SDK_PLATFORM=maccatalyst
|
2021-02-26 16:42:30 +03:00
|
|
|
|
|
|
|
DOTNET_iOS_SDK_PLATFORMS=iphonesimulator iphoneos
|
|
|
|
DOTNET_tvOS_SDK_PLATFORMS=tvsimulator tvos
|
|
|
|
DOTNET_macOS_SDK_PLATFORMS=mac
|
|
|
|
DOTNET_MacCatalyst_SDK_PLATFORMS=maccatalyst
|
|
|
|
|
2021-04-02 07:02:27 +03:00
|
|
|
DOTNET_iphonesimulator_DYLIB_FLAGS=-lmonosgen-2.0 -licudata -licui18n -licuuc -framework UIKit
|
|
|
|
DOTNET_iphoneos_DYLIB_FLAGS=-lmonosgen-2.0 -licudata -licui18n -licuuc -framework UIKit
|
|
|
|
DOTNET_tvsimulator_DYLIB_FLAGS=-lmonosgen-2.0 -licudata -licui18n -licuuc -framework UIKit
|
2021-02-26 16:42:30 +03:00
|
|
|
DOTNET_tvos_DYLIB_FLAGS=-lmonosgen-2.0 -framework UIKit
|
|
|
|
DOTNET_maccatalyst_DYLIB_FLAGS=-lmonosgen-2.0 -framework UIKit
|
|
|
|
DOTNET_mac_DYLIB_FLAGS=-lcoreclr
|
|
|
|
|
|
|
|
#
|
|
|
|
# DotNetInstallLibTemplate lipos or copies libraries into the destination directories
|
|
|
|
#
|
|
|
|
|
|
|
|
define DotNetInstallLibTemplate
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/libxamarin-%.dylib: $$(foreach arch,$(3),.libs/$(4)/libxamarin-%.$$(arch).dylib) | $(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native
|
|
|
|
ifeq (1,$$(words $(3)))
|
|
|
|
$(Q) $(CP) $$^ $$@
|
|
|
|
else
|
|
|
|
$$(call Q_2,LIPO, [$1]) $(DEVICE_BIN_PATH)/lipo $$^ -create -output $$@
|
|
|
|
endif
|
|
|
|
$(Q) install_name_tool -id @rpath/libxamarin-$$*.dylib $$@
|
|
|
|
|
|
|
|
$(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native/libxamarin-%.a: $$(foreach arch,$(3),.libs/$(4)/libxamarin-%.$$(arch).a) | $(DOTNET_DESTDIR)/Microsoft.$(1).Runtime.$(2)/runtimes/$(2)/native
|
|
|
|
ifeq (1,$$(words $(3)))
|
|
|
|
$(Q) $(CP) $$^ $$@
|
|
|
|
else
|
|
|
|
$$(call Q_2,LIPO, [$1]) $(DEVICE_BIN_PATH)/lipo $$^ -create -output $$@
|
|
|
|
endif
|
2020-06-15 18:47:18 +03:00
|
|
|
endef
|
|
|
|
|
2021-02-26 16:42:30 +03:00
|
|
|
# foreach (var platform in DOTNET_PLATFORMS)
|
|
|
|
# foreach (var rid in DOTNET_<platform>_RUNTIME_IDENTIFIERS)
|
|
|
|
# call DotNetInstallLibTemplate (platform, rid, architectures_for_rid, sdk_platform_for_rid)
|
2021-03-12 09:36:41 +03:00
|
|
|
$(foreach platform,$(DOTNET_PLATFORMS),$(foreach rid,$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS),$(eval $(call DotNetInstallLibTemplate,$(platform),$(rid),$(DOTNET_$(rid)_ARCHITECTURES),$(DOTNET_$(rid)_SDK_PLATFORM)))))
|
2020-06-15 18:47:18 +03:00
|
|
|
|
2021-02-26 16:42:30 +03:00
|
|
|
#
|
|
|
|
# LibXamarinTemplate builds libxamarin.a
|
|
|
|
#
|
2020-06-15 18:47:18 +03:00
|
|
|
|
2021-02-26 16:42:30 +03:00
|
|
|
define DotNetLibXamarinTemplate
|
2020-06-15 18:47:18 +03:00
|
|
|
|
2021-04-20 16:09:56 +03:00
|
|
|
DOTNET$(6)_$(2)_LIBDIR ?= $$(TOP)/builds/downloads/microsoft.netcore.app.runtime$(7).$(2)/$(BUNDLED_NETCORE_PLATFORMS_PACKAGE_VERSION)/runtimes/$(2)/native
|
2021-03-12 20:40:48 +03:00
|
|
|
DOTNET$(6)_$(2)_DYLIB_FLAGS = $(DOTNET_$(1)_DYLIB_FLAGS) -Wl,-install_name,libxamarin$(5).dylib -framework Foundation -framework CFNetwork -lz -L$(abspath $(DOTNET$(6)_$(2)_LIBDIR))
|
2020-06-15 18:47:18 +03:00
|
|
|
|
2021-03-12 09:36:41 +03:00
|
|
|
DOTNET_$(2)_$(3)$(4)_OBJECTS = $$(patsubst %,.libs/$(1)/%$(5).$(3).o, $(MONOTOUCH_SOURCE_STEMS)) $$(patsubst %,.libs/$(1)/%$(5).$(3).o, $(MONOTOUCH_$(shell echo $(3) | tr a-z A-Z)_SOURCE_STEMS))
|
2020-06-15 18:47:18 +03:00
|
|
|
|
2021-03-12 09:36:41 +03:00
|
|
|
.libs/$(1)/libxamarin$(5).$(3).a: $$(DOTNET_$(2)_$(3)$(4)_OBJECTS)
|
2021-02-26 16:42:30 +03:00
|
|
|
$$(Q) rm -f $$@
|
|
|
|
$$(call Q_2,AR, [$1]) $(DEVICE_BIN_PATH)/ar Scru $$@ $$^
|
|
|
|
$$(call Q_2,RANLIB,[$1]) $(DEVICE_BIN_PATH)/ranlib -no_warning_for_no_symbols -q $$@
|
2020-06-15 18:47:18 +03:00
|
|
|
|
2021-03-12 20:40:48 +03:00
|
|
|
.libs/$(1)/libxamarin$(5).$(3).dylib: EXTRA_FLAGS=$$(DOTNET$(6)_$(2)_DYLIB_FLAGS)
|
2021-03-12 09:36:41 +03:00
|
|
|
.libs/$(1)/libxamarin$(5).$(3).dylib: $$(DOTNET_$(2)_$(3)$(4)_OBJECTS)
|
2020-06-15 18:47:18 +03:00
|
|
|
|
|
|
|
endef
|
|
|
|
|
2021-02-26 16:42:30 +03:00
|
|
|
# foreach (var platform in DOTNET_PLATFORMS)
|
|
|
|
# foreach (var rid in DOTNET_<platform>_RUNTIME_IDENTIFIERS))
|
|
|
|
# foreach (var arch in DOTNET_<rid>_ARCHITECTURES)
|
2021-04-20 16:09:56 +03:00
|
|
|
# 1 2 3 4 5 6 7
|
|
|
|
# call DotNetLibXamarinTemplate (platform, rid, arch, , "-dotnet", ,.mono)
|
|
|
|
# call DotNetLibXamarinTemplate (platform, rid, arch, _DEBUG, "-dotnet-debug", ,.mono)
|
|
|
|
# call DotNetLibXamarinTemplate (platform, rid, arch, _CORECLR, "-dotnet-coreclr", _CORECLR,)
|
|
|
|
# call DotNetLibXamarinTemplate (platform, rid, arch, _CORECLR_DEBUG, "-dotnet-coreclr-debug", _CORECLR,)
|
|
|
|
|
|
|
|
$(foreach platform,$(DOTNET_PLATFORMS),$(foreach rid,$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS),$(foreach arch,$(DOTNET_$(rid)_ARCHITECTURES),$(eval $(call DotNetLibXamarinTemplate,$(DOTNET_$(rid)_SDK_PLATFORM),$(rid),$(arch),,-dotnet,,.mono)))))
|
|
|
|
$(foreach platform,$(DOTNET_PLATFORMS),$(foreach rid,$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS),$(foreach arch,$(DOTNET_$(rid)_ARCHITECTURES),$(eval $(call DotNetLibXamarinTemplate,$(DOTNET_$(rid)_SDK_PLATFORM),$(rid),$(arch),_DEBUG,-dotnet-debug,,.mono)))))
|
2021-03-12 20:40:48 +03:00
|
|
|
$(foreach platform,$(DOTNET_PLATFORMS),$(foreach rid,$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS),$(foreach arch,$(DOTNET_$(rid)_ARCHITECTURES),$(eval $(call DotNetLibXamarinTemplate,$(DOTNET_$(rid)_SDK_PLATFORM),$(rid),$(arch),_CORECLR,-dotnet-coreclr,_CORECLR)))))
|
|
|
|
$(foreach platform,$(DOTNET_PLATFORMS),$(foreach rid,$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS),$(foreach arch,$(DOTNET_$(rid)_ARCHITECTURES),$(eval $(call DotNetLibXamarinTemplate,$(DOTNET_$(rid)_SDK_PLATFORM),$(rid),$(arch),_CORECLR_DEBUG,-dotnet-coreclr-debug,_CORECLR)))))
|
2020-06-15 18:47:18 +03:00
|
|
|
|
|
|
|
dotnet: $(DOTNET_TARGETS)
|
|
|
|
|
|
|
|
$(DOTNET_TARGET_DIRS):
|
|
|
|
$(Q) mkdir -p $@
|
|
|
|
|
|
|
|
ifdef ENABLE_DOTNET
|
|
|
|
all-local:: $(DOTNET_TARGETS)
|
|
|
|
install-local:: $(DOTNET_TARGETS)
|
|
|
|
endif
|
|
|
|
|
2016-04-21 15:19:32 +03:00
|
|
|
#
|
|
|
|
# Common
|
|
|
|
#
|
|
|
|
|
|
|
|
clean-local::
|
|
|
|
$(Q) rm -f *.o
|
|
|
|
$(Q) rm -f *.a
|
|
|
|
$(Q) rm -Rf .libs
|
|
|
|
$(Q) rm -f xamarin/mono-runtime.h mono-runtime.m delegates.h delegates.inc Delegates.generated.cs
|
|
|
|
|
|
|
|
|
|
|
|
include $(TOP)/mk/rules.mk
|
2020-03-06 18:42:21 +03:00
|
|
|
|
|
|
|
.SECONDARY: delegates.h delegates.inc
|