24 #
25
26 ################################################################################
27 #
28 # This Makefile, together with Tools.gmk, can be used to compile a set of
29 # gcc based cross compilation, portable, self contained packages, capable
30 # of building OpenJDK.
31 #
32 # In addition to the makefiles, access to Oracle Linux installation
33 # media is required. This has been tested against Oracle Enterprise Linux
34 # 6.4.
35 #
36 # By default this Makefile will build a native toolchain for the current
37 # platform if called with something like this:
38 #
39 # make tars BASE_OS=OEL6
40 #
41 # To build the full set of crosstools for additional platforms, use a command
42 # line looking like this:
43 #
44 # make cross_compile_target="aarch64-linux-gnu" BASE_OS=Fedora27
45 # or
46 # make cross_compile_target="arm-linux-gnueabihf" BASE_OS=Fedora27
47 #
48 # This is the makefile which iterates over all host and target platforms.
49 #
50
51 os := $(shell uname -o)
52 cpu := $(shell uname -p)
53
54 # Figure out what platform this is building on.
55 me := $(cpu)-$(if $(findstring Linux,$(os)),unknown-linux-gnu)
56
57 $(info Building on platform $(me))
58
59 #
60 # By default just build for the current platform, which is assumed to be Linux
61 #
62 ifeq ($(cross_compile_target), )
63 platforms := $(me)
64 host_platforms := $(platforms)
65 else
66 platforms := $(cross_compile_target)
67 host_platforms := $(me)
68 endif
69 target_platforms := $(platforms)
70 $(info host_platforms $(host_platforms))
71 $(info target_platforms $(target_platforms))
72
73 all compile : $(platforms)
74
75 ifeq (,$(SKIP_ME))
76 $(foreach p,$(filter-out $(me),$(platforms)),$(eval $(p) : $$(me)))
77 endif
78
79 OUTPUT_ROOT = $(abspath ../../build/devkit)
80 RESULT = $(OUTPUT_ROOT)/result
81
82 submakevars = HOST=$@ BUILD=$(me) \
83 RESULT=$(RESULT) PREFIX=$(RESULT)/$@ \
84 OUTPUT_ROOT=$(OUTPUT_ROOT)
85 $(host_platforms) :
86 @echo 'Building compilers for $@'
87 @echo 'Targets: $(target_platforms)'
88 for p in $(filter $@, $(target_platforms)) $(filter-out $@, $(target_platforms)); do \
89 $(MAKE) -f Tools.gmk download-rpms $(submakevars) TARGET=$$p && \
90 $(MAKE) -f Tools.gmk all $(submakevars) \
91 TARGET=$$p || exit 1 ; \
92 done
93 @echo 'Building ccache program for $@'
94 $(MAKE) -f Tools.gmk ccache $(submakevars) TARGET=$@
95 @echo 'All done"'
96
97 today := $(shell date +%Y%m%d)
98
99 define Mktar
100 $(1)_tar = $$(RESULT)/sdk-$(1)-$$(today).tar.gz
101 $$($(1)_tar) : PLATFORM = $(1)
102 TARFILES += $$($(1)_tar)
103 $$($(1)_tar) : $(1) $$(shell find $$(RESULT)/$(1))
104 endef
105
106 $(foreach p,$(host_platforms),$(eval $(call Mktar,$(p))))
107
108 tars : all $(TARFILES)
109 onlytars : $(TARFILES)
110 %.tar.gz :
111 @echo 'Creating compiler package $@'
112 cd $(RESULT)/$(PLATFORM) && tar -czf $@ *
113 touch $@
114
115 clean :
116 rm -rf $(addprefix ../../build/devkit/, result $(host_platforms))
117 dist-clean: clean
118 rm -rf $(addprefix ../../build/devkit/, src download)
119
120 FORCE :
121 .PHONY : all compile tars $(configs) $(host_platforms) clean dist-clean
|
24 #
25
26 ################################################################################
27 #
28 # This Makefile, together with Tools.gmk, can be used to compile a set of
29 # gcc based cross compilation, portable, self contained packages, capable
30 # of building OpenJDK.
31 #
32 # In addition to the makefiles, access to Oracle Linux installation
33 # media is required. This has been tested against Oracle Enterprise Linux
34 # 6.4.
35 #
36 # By default this Makefile will build a native toolchain for the current
37 # platform if called with something like this:
38 #
39 # make tars BASE_OS=OEL6
40 #
41 # To build the full set of crosstools for additional platforms, use a command
42 # line looking like this:
43 #
44 # make TARGETS="aarch64-linux-gnu" BASE_OS=Fedora
45 # or
46 # make TARGETS="arm-linux-gnueabihf ppc64-linux-gnu" BASE_OS=Fedora BASE_OS_VERSION=17
47 #
48 # to build several devkits for a specific OS version at once.
49 # You can find the final results under ../../build/devkit/result/<host>-to-<target>
50 #
51 # This is the makefile which iterates over all host and target platforms.
52 #
53
54 os := $(shell uname -o)
55 cpu := $(shell uname -p)
56
57 # Figure out what platform this is building on.
58 me := $(cpu)-$(if $(findstring Linux,$(os)),linux-gnu)
59
60 $(info Building on platform $(me))
61
62 #
63 # By default just build for the current platform, which is assumed to be Linux
64 #
65 ifeq ($(TARGETS), )
66 platforms := $(me)
67 host_platforms := $(platforms)
68 else
69 platforms := $(TARGETS)
70 host_platforms := $(me)
71 endif
72 target_platforms := $(platforms)
73 $(info host_platforms $(host_platforms))
74 $(info target_platforms $(target_platforms))
75
76 all compile : $(platforms)
77
78 ifeq (,$(SKIP_ME))
79 $(foreach p,$(filter-out $(me),$(platforms)),$(eval $(p) : $$(me)))
80 endif
81
82 OUTPUT_ROOT = $(abspath ../../build/devkit)
83 RESULT = $(OUTPUT_ROOT)/result
84
85 submakevars = HOST=$@ BUILD=$(me) RESULT=$(RESULT) OUTPUT_ROOT=$(OUTPUT_ROOT)
86
87 $(host_platforms) :
88 @echo 'Building compilers for $@'
89 @echo 'Targets: $(target_platforms)'
90 for p in $(filter $@, $(target_platforms)) $(filter-out $@, $(target_platforms)); do \
91 $(MAKE) -f Tools.gmk download-rpms $(submakevars) \
92 TARGET=$$p PREFIX=$(RESULT)/$@-to-$$p && \
93 $(MAKE) -f Tools.gmk all $(submakevars) \
94 TARGET=$$p PREFIX=$(RESULT)/$@-to-$$p && \
95 $(MAKE) -f Tools.gmk ccache $(submakevars) \
96 TARGET=$@ PREFIX=$(RESULT)/$@-to-$$p BUILDDIR=$(OUTPUT_ROOT)/$@/$$p || exit 1 ; \
97 done
98 @echo 'All done"'
99
100 today := $(shell date +%Y%m%d)
101
102 define Mktar
103 $(1)-to-$(2)_tar = $$(RESULT)/sdk-$(1)-to-$(2)-$$(today).tar.gz
104 $$($(1)-to-$(2)_tar) : PLATFORM = $(1)-to-$(2)
105 TARFILES += $$($(1)-to-$(2)_tar)
106 $$($(1)-to-$(2)_tar) : $$(shell find $$(RESULT)/$(1)-to-$(2) -type f)
107 endef
108
109 $(foreach p,$(host_platforms),$(foreach t,$(target_platforms),$(eval $(call Mktar,$(p),$(t)))))
110
111 tars : all $(TARFILES)
112 onlytars : $(TARFILES)
113 %.tar.gz :
114 @echo 'Creating compiler package $@'
115 cd $(RESULT) && tar -czf $@ $(PLATFORM)/*
116 touch $@
117
118 clean :
119 rm -rf $(addprefix ../../build/devkit/, result $(host_platforms))
120 dist-clean: clean
121 rm -rf $(addprefix ../../build/devkit/, src download)
122
123 FORCE :
124 .PHONY : all compile tars $(configs) $(host_platforms) clean dist-clean
|