source: mainline/uspace/lib/c/Makefile@ 924786bf

Last change on this file since 924786bf was d2f75eb, checked in by GitHub <noreply@…>, 7 years ago

Replace autogen.py with something simpler. (#30)

Instead of generating headers for certain structures, the headers are written manually and we automate checking correctness instead. Checking is performed by generating a C source with a bunch of static asserts, using a simple awk script. This is then treated as a normal source file.

The primary motivation for this change is to reduce the complexity of the build process. Also, the .ag files we used previously are more difficult to understand than regular C code, and at least one IDE (GNOME Builder) completely refuses to open them.

  • Property mode set to 100644
File size: 5.6 KB
Line 
1#
2# Copyright (c) 2005 Martin Decky
3# Copyright (c) 2007 Jakub Jermar
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9#
10# - Redistributions of source code must retain the above copyright
11# notice, this list of conditions and the following disclaimer.
12# - Redistributions in binary form must reproduce the above copyright
13# notice, this list of conditions and the following disclaimer in the
14# documentation and/or other materials provided with the distribution.
15# - The name of the author may not be used to endorse or promote products
16# derived from this software without specific prior written permission.
17#
18# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28#
29
30USPACE_PREFIX = ../..
31ROOT_PATH = $(USPACE_PREFIX)/..
32
33CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config
34
35LINKER_SCRIPTS = \
36 $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld \
37 $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld \
38 $(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld
39
40PRE_DEPEND =
41EXTRA_OUTPUT = $(LINKER_SCRIPTS)
42EXTRA_CLEAN = $(LINKER_SCRIPTS)
43LIBRARY = libc
44SOVERSION = 0.0
45
46-include $(CONFIG_MAKEFILE)
47-include arch/$(UARCH)/Makefile.inc
48
49ARCH_AUTOGENS_PROBE_C := $(ARCH_AUTOGENS_AG:%.ag.h=.ag.c)
50ARCH_AUTOGENS_PROBE_S := $(ARCH_AUTOGENS_AG:%.ag.h=.ag.s)
51
52PRE_DEPEND += $(ARCH_AUTOGENS_AG)
53EXTRA_CLEAN += $(ARCH_AUTOGENS_AG) $(ARCH_AUTOGENS_PROBE_C) $(ARCH_AUTOGENS_PROBE_S)
54
55GENERIC_SOURCES = \
56 generic/libc.c \
57 generic/ddi.c \
58 generic/as.c \
59 generic/bd.c \
60 generic/bd_srv.c \
61 generic/perm.c \
62 generic/cap.c \
63 generic/clipboard.c \
64 generic/config.c \
65 generic/context.c \
66 generic/corecfg.c \
67 generic/devman.c \
68 generic/device/hw_res.c \
69 generic/device/hw_res_parsed.c \
70 generic/device/pio_window.c \
71 generic/device/clock_dev.c \
72 generic/device/led_dev.c \
73 generic/dirent.c \
74 generic/dhcp.c \
75 generic/dnsr.c \
76 generic/dlfcn.c \
77 generic/elf/elf.c \
78 generic/elf/elf_load.c \
79 generic/elf/elf_mod.c \
80 generic/event.c \
81 generic/errno.c \
82 generic/gsort.c \
83 generic/loc.c \
84 generic/mem.c \
85 generic/str.c \
86 generic/str_error.c \
87 generic/strtol.c \
88 generic/l18n/langs.c \
89 generic/fibril.c \
90 generic/fibril_synch.c \
91 generic/pcb.c \
92 generic/smc.c \
93 generic/smp_memory_barrier.c \
94 generic/thread.c \
95 generic/tls.c \
96 generic/task.c \
97 generic/futex.c \
98 generic/imath.c \
99 generic/inet/addr.c \
100 generic/inet/endpoint.c \
101 generic/inet/host.c \
102 generic/inet/hostname.c \
103 generic/inet/hostport.c \
104 generic/inet/tcp.c \
105 generic/inet/udp.c \
106 generic/inet.c \
107 generic/inetcfg.c \
108 generic/inetping.c \
109 generic/io/asprintf.c \
110 generic/io/input.c \
111 generic/io/io.c \
112 generic/io/chardev.c \
113 generic/io/chardev_srv.c \
114 generic/io/chargrid.c \
115 generic/io/output.c \
116 generic/io/printf.c \
117 generic/io/log.c \
118 generic/io/logctl.c \
119 generic/io/kio.c \
120 generic/io/klog.c \
121 generic/io/serial.c \
122 generic/io/snprintf.c \
123 generic/io/vprintf.c \
124 generic/io/vsnprintf.c \
125 generic/io/printf_core.c \
126 generic/io/con_srv.c \
127 generic/io/console.c \
128 generic/io/table.c \
129 generic/io/visualizer.c \
130 generic/io/window.c \
131 generic/iplink.c \
132 generic/iplink_srv.c \
133 generic/irc.c \
134 generic/irq.c \
135 generic/ieee_double.c \
136 generic/power_of_ten.c \
137 generic/double_to_str.c \
138 generic/malloc.c \
139 generic/sysinfo.c \
140 generic/ipc.c \
141 generic/ns.c \
142 generic/async.c \
143 generic/loader.c \
144 generic/getopt.c \
145 generic/adt/checksum.c \
146 generic/adt/circ_buf.c \
147 generic/adt/list.c \
148 generic/adt/hash_table.c \
149 generic/adt/odict.c \
150 generic/adt/prodcons.c \
151 generic/time.c \
152 generic/stdio.c \
153 generic/stdlib.c \
154 generic/udebug.c \
155 generic/vfs/canonify.c \
156 generic/vfs/inbox.c \
157 generic/vfs/mtab.c \
158 generic/vfs/vfs.c \
159 generic/rcu.c \
160 generic/setjmp.c \
161 generic/stack.c \
162 generic/stacktrace.c \
163 generic/arg_parse.c \
164 generic/stats.c \
165 generic/assert.c \
166 generic/pio_trace.c \
167 generic/qsort.c \
168 generic/uuid.c \
169 generic/vbd.c \
170 generic/vol.c
171
172ifeq ($(CONFIG_RTLD),y)
173 GENERIC_SOURCES += \
174 generic/rtld/rtld.c \
175 generic/rtld/dynamic.c \
176 generic/rtld/module.c \
177 generic/rtld/symbol.c
178endif
179
180ARCH_SOURCES += $(ARCH_AUTOCHECK_HEADERS:%.h=%.check.c)
181
182SOURCES = \
183 $(GENERIC_SOURCES) \
184 $(ARCH_SOURCES)
185
186TEST_SOURCES = \
187 test/adt/circ_buf.c \
188 test/fibril/timer.c \
189 test/main.c \
190 test/io/table.c \
191 test/odict.c \
192 test/qsort.c \
193 test/sprintf.c \
194 test/str.c
195
196include $(USPACE_PREFIX)/Makefile.common
197
198$(LIBC_PREFIX)/arch/$(UARCH)/_link.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in
199 $(CC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -E -x c $< | grep -v "^\#" > $@
200
201$(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in
202 $(CC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DSHLIB -E -x c $< | grep -v "^\#" > $@
203
204$(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in
205 $(CC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DDLEXE -E -x c $< | grep -v "^\#" > $@
206
207AUTOCHECK = $(realpath $(ROOT_PATH)/tools/autocheck.awk)
208
209%.check.c: %.h $(AUTOCHECK)
210 cd $(<D) && $(AUTOCHECK) $(<F) > $(@F)
Note: See TracBrowser for help on using the repository browser.