source: mainline/Makefile@ dfeb4e2

Last change on this file since dfeb4e2 was dfeb4e2, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 8 years ago

Integrate ports into the main tree as a submodule.

A stripped down version of hsct.sh is added to tools, and Makefiles
gain new targets that implement part of hsct's prior functionality.

This arrangement improves usability and maintainability of ports,
reduces the likelihood of ports being broken by mainline changes,
and partially solves the issue with build logic being duplicated
in multiple places.

It is newly possible to build individual ports using make ports-NAME,
and all ports using make ports-all. This also installs the outputs to
uspace/dist, so ideally, simple make ports-all && make would create
an image with all ports included. This currently doesn't work only
because some ports fail to build.

  • Property mode set to 100644
File size: 4.7 KB
Line 
1#
2# Copyright (c) 2006 Martin Decky
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8#
9# - Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# - Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14# - The name of the author may not be used to endorse or promote products
15# derived from this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28
29# Just for this Makefile. Sub-makes will run in parallel if requested.
30.NOTPARALLEL:
31
32CCHECK = tools/sycek/ccheck
33CSCOPE = cscope
34FORMAT = clang-format
35CHECK = tools/check.sh
36CONFIG = tools/config.py
37AUTOTOOL = tools/autotool.py
38SANDBOX = autotool
39
40CONFIG_RULES = HelenOS.config
41
42COMMON_MAKEFILE = Makefile.common
43COMMON_HEADER = common.h
44
45CONFIG_MAKEFILE = Makefile.config
46CONFIG_HEADER = config.h
47ERRNO_HEADER = abi/include/abi/errno.h
48ERRNO_INPUT = abi/include/abi/errno.in
49
50.PHONY: all precheck cscope cscope_parts autotool config_auto config_default config distclean clean check releasefile release common boot kernel uspace
51
52all: kernel uspace
53 $(MAKE) -r -C boot PRECHECK=$(PRECHECK)
54
55common: $(COMMON_MAKEFILE) $(COMMON_HEADER) $(CONFIG_MAKEFILE) $(CONFIG_HEADER) $(ERRNO_HEADER)
56
57kernel: common
58 $(MAKE) -r -C kernel PRECHECK=$(PRECHECK)
59
60uspace: common
61 $(MAKE) -r -C uspace PRECHECK=$(PRECHECK)
62
63ports-%: common
64 $(MAKE) -r -C uspace $@ PRECHECK=$(PRECHECK)
65
66precheck: clean
67 $(MAKE) -r all PRECHECK=y
68
69cscope:
70 find abi kernel boot uspace -type f -regex '^.*\.[chsS]$$' | xargs $(CSCOPE) -b -k -u -f$(CSCOPE).out
71
72cscope_parts:
73 find abi -type f -regex '^.*\.[chsS]$$' | xargs $(CSCOPE) -b -k -u -f$(CSCOPE)_abi.out
74 find kernel -type f -regex '^.*\.[chsS]$$' | xargs $(CSCOPE) -b -k -u -f$(CSCOPE)_kernel.out
75 find boot -type f -regex '^.*\.[chsS]$$' | xargs $(CSCOPE) -b -k -u -f$(CSCOPE)_boot.out
76 find uspace -type f -regex '^.*\.[chsS]$$' | xargs $(CSCOPE) -b -k -u -f$(CSCOPE)_uspace.out
77
78format:
79 find abi kernel boot uspace -type f -regex '^.*\.[ch]$$' | xargs $(FORMAT) -i -sort-includes -style=file
80
81ccheck: $(CCHECK)
82 tools/ccheck.sh
83
84$(CCHECK):
85 cd tools && ./build-ccheck.sh
86
87doxy:
88 $(MAKE) -r -C doxygen
89
90# Pre-integration build check
91check: $(CHECK)
92ifdef JOBS
93 $(CHECK) -j $(JOBS)
94else
95 $(CHECK)
96endif
97
98# `sed` pulls a list of "compatibility-only" error codes from `errno.in`,
99# the following grep finds instances of those error codes in HelenOS code.
100check_errno:
101 @ ! cat abi/include/abi/errno.in | \
102 sed -n -e '1,/COMPAT_START/d' -e 's/__errno_entry(\([A-Z0-9]\+\).*/\\b\1\\b/p' | \
103 git grep -n -f - -- ':(exclude)abi' ':(exclude)uspace/lib/posix'
104
105# Autotool (detects compiler features)
106
107autotool $(COMMON_MAKEFILE) $(COMMON_HEADER): $(CONFIG_MAKEFILE) $(AUTOTOOL)
108 $(AUTOTOOL)
109 diff -q $(COMMON_HEADER).new $(COMMON_HEADER) 2> /dev/null; if [ $$? -ne 0 ]; then mv -f $(COMMON_HEADER).new $(COMMON_HEADER); fi
110
111# Build-time configuration
112
113config_default $(CONFIG_MAKEFILE) $(CONFIG_HEADER): $(CONFIG_RULES)
114ifeq ($(HANDS_OFF),y)
115 $(CONFIG) $< hands-off $(PROFILE)
116else
117 $(CONFIG) $< default $(PROFILE)
118endif
119
120config: $(CONFIG_RULES)
121 $(CONFIG) $<
122
123random-config: $(CONFIG_RULES)
124 $(CONFIG) $< random
125
126# Release files
127
128releasefile: all
129 $(MAKE) -r -C release releasefile
130
131release:
132 $(MAKE) -r -C release release
133
134# Cleaning
135
136distclean: clean
137 rm -f $(CSCOPE).out $(COMMON_MAKEFILE) $(COMMON_HEADER) $(CONFIG_MAKEFILE) $(CONFIG_HEADER) tools/*.pyc tools/checkers/*.pyc release/HelenOS-*
138
139clean:
140 rm -fr $(SANDBOX)
141 $(MAKE) -r -C kernel clean
142 $(MAKE) -r -C uspace clean
143 $(MAKE) -r -C boot clean
144 $(MAKE) -r -C doxygen clean
145
146$(ERRNO_HEADER): $(ERRNO_INPUT)
147 echo '/* Generated file. Edit errno.in instead. */' > $@.new
148 sed 's/__errno_entry(\([^,]*\),\([^,]*\),.*/#define \1 __errno_t(\2)/' < $< >> $@.new
149 mv $@.new $@
150
151-include Makefile.local
Note: See TracBrowser for help on using the repository browser.