b048d9311aa79a028f5e6a57bcf27d5902b6cd3a
[mono.git] / mcs / build / profiles / basic.make
1 # -*- makefile -*-
2
3 with_mono_path = MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH"
4 with_mono_path_monolite = MONO_PATH="$(topdir)/class/lib/monolite$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH"
5
6 BOOTSTRAP_MCS = $(EXTERNAL_MCS)
7 MCS = $(with_mono_path) $(INTERNAL_MCS)
8
9 PROFILE_MCS_FLAGS = -d:NET_1_1 -d:ONLY_1_1 -d:BOOTSTRAP_WITH_OLDLIB
10 NO_SIGN_ASSEMBLY = yes
11 NO_TEST = yes
12 NO_INSTALL = yes
13 FRAMEWORK_VERSION = 1.0
14
15 .PHONY: profile-check do-profile-check
16 profile-check:
17         @:
18
19 ifeq (.,$(thisdir))
20 all-recursive: do-profile-check
21 clean-local: clean-profile
22 endif
23
24 clean-profile:
25         -rm -f $(PROFILE_CS) $(PROFILE_EXE) $(PROFILE_OUT)
26
27 PROFILE_CS  = $(topdir)/build/deps/basic-profile-check.cs
28 PROFILE_EXE = $(PROFILE_CS:.cs=.exe)
29 PROFILE_OUT = $(PROFILE_CS:.cs=.out)
30
31 do-profile-check:
32         @ok=:; \
33         rm -f $(PROFILE_EXE) $(PROFILE_OUT); \
34         $(MAKE) -s $(PROFILE_OUT) > /dev/null 2>&1 || ok=false; \
35         rm -f $(PROFILE_EXE) $(PROFILE_OUT); \
36         if $$ok; then :; else \
37             echo "*** The compiler '$(EXTERNAL_MCS)' doesn't appear to be usable." 1>&2 ; \
38             if test -f $(topdir)/class/lib/monolite/mcs.exe; then \
39                 monolite_corlib_version=`$(with_mono_path_monolite) $(ILDISASM) $(topdir)/class/lib/monolite/mscorlib.dll | sed -n 's,.*mono_corlib_version.*int32.*(\([^)]*\)),\1,p'`; \
40                 source_corlib_version=`sed -n 's,.*mono_corlib_version.*=[^0-9]*\([0-9]*\)[^0-9]*$$,\1,p' $(topdir)/class/corlib/System/Environment.cs`; \
41                 case $$monolite_corlib_version in \
42                 0x* | 0X*) monolite_corlib_version=`echo $$monolite_corlib_version | sed 's,^0[xX],,'`; \
43                   monolite_corlib_version=`(echo 16; echo i; echo $$monolite_corlib_version; echo p) | dc` ;; esac ; \
44                 if test x$$monolite_corlib_version = x$$source_corlib_version; then \
45                     echo "*** Falling back to using pre-compiled binaries.  Be warned, this may not work." 1>&2 ; \
46                     ( cd $(topdir)/jay && $(MAKE) ); \
47                     ( cd $(topdir)/mcs && $(MAKE) PROFILE=basic cs-parser.cs ); \
48                     ( cd $(topdir)/class/lib/monolite/ && cp *.exe *.dll ../basic ); \
49                     case `ls -1t $(topdir)/class/lib/basic/mcs.exe $(topdir)/mcs/cs-parser.cs | sed 1q` in \
50                     $(topdir)/class/lib/basic/mcs.exe) : ;; \
51                     *) sleep 5; cp $(topdir)/class/lib/monolite/mcs.exe $(topdir)/class/lib/basic ;; \
52                     esac; \
53                 else \
54                     echo "*** The contents of your 'monolite' directory are out-of-date" 1>&2; \
55                     echo "*** You may want to try 'make get-monolite-latest'" 1>&2; \
56                     echo "*** The source has version $$source_corlib_version, but monolite has version $$monolite_corlib_version" 1>&2; \
57                     exit 1; fi; \
58             else \
59                 echo "*** You need a C# compiler installed to build MCS (make sure mcs works from the command line)" 1>&2 ; \
60                 echo "*** Read INSTALL.txt for information on how to bootstrap a Mono installation." 1>&2 ; \
61                 exit 1; fi; fi
62
63 $(PROFILE_CS): $(topdir)/build/profiles/basic.make
64         echo 'class X { static int Main () { return 0; } }' > $@
65
66 $(PROFILE_EXE): $(PROFILE_CS)
67         $(EXTERNAL_MCS) /out:$@ $<
68
69 $(PROFILE_OUT): $(PROFILE_EXE)
70         $(EXTERNAL_RUNTIME) $< > $@ 2>&1