blob: 159957aa42cf7a1a75aa46d6e58ede58027286e1 [file] [log] [blame]
Eric Andersen85208e22002-04-12 12:05:57 +00001# Makefile for busybox
2#
Mike Frysinger0d4ee682005-09-24 06:01:57 +00003# Copyright (C) 1999-2005 by Erik Andersen <andersen@codepoet.org>
Eric Andersen85208e22002-04-12 12:05:57 +00004#
Mike Frysinger0d4ee682005-09-24 06:01:57 +00005# Licensed under the GPL v2, see the file LICENSE in this tarball.
Eric Andersen85208e22002-04-12 12:05:57 +00006
Bernhard Reutner-Fischer07a79e72006-03-09 09:03:37 +00007srcdir:=$(top_srcdir)/libbb
8objdir:=$(top_builddir)/libbb
Eric Andersen85208e22002-04-12 12:05:57 +00009
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +000010LIBBB-n:=
11LIBBB-y:= \
Eric Andersen90898442003-08-06 11:20:52 +000012 bb_asprintf.c ask_confirmation.c change_identity.c chomp.c \
Eric Andersen976a55e2003-10-22 10:23:04 +000013 compare_string_array.c concat_path_file.c copy_file.c copyfd.c \
Bernhard Reutner-Fischer0e8727d2006-01-30 15:29:55 +000014 create_icmp_socket.c create_icmp6_socket.c \
Eric Andersen976a55e2003-10-22 10:23:04 +000015 device_open.c dump.c error_msg.c error_msg_and_die.c find_mount_point.c \
16 find_pid_by_name.c find_root_device.c fgets_str.c full_read.c \
Bernhard Reutner-Fischerd5bd1372005-09-20 21:06:17 +000017 full_write.c get_last_path_component.c get_line_from_file.c \
Rob Landley87b95732006-02-21 15:04:07 +000018 herror_msg.c herror_msg_and_die.c \
Rob Landley2454ebd2005-10-27 22:50:04 +000019 human_readable.c inet_common.c inode_hash.c isdirectory.c \
Bernhard Reutner-Fischerbee9eb12005-09-29 12:55:10 +000020 kernel_version.c last_char_is.c login.c loop.c \
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +000021 make_directory.c md5.c mode_string.c mtab_file.c \
Bernhard Reutner-Fischerd5bd1372005-09-20 21:06:17 +000022 obscure.c parse_mode.c parse_number.c perror_msg.c \
Eric Andersen976a55e2003-10-22 10:23:04 +000023 perror_msg_and_die.c print_file.c get_console.c \
Bernhard Reutner-Fischer0e8727d2006-01-30 15:29:55 +000024 process_escape_sequence.c procps.c qmodule.c \
Eric Andersen976a55e2003-10-22 10:23:04 +000025 read_package_field.c recursive_action.c remove_file.c \
Glenn L McGrathfe4704e2003-10-09 13:40:17 +000026 restricted_shell.c run_parts.c run_shell.c safe_read.c safe_write.c \
Rob Landley87b95732006-02-21 15:04:07 +000027 safe_strncpy.c setup_environment.c sha1.c simplify_path.c \
Eric Andersen36adca82004-06-22 10:07:17 +000028 trim.c u_signal_names.c vdprintf.c verror_msg.c \
Rob Landleyc5b1d4d2006-03-13 15:45:16 +000029 vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c xstat.c \
Manuel Novoa III cad53642003-03-19 09:13:01 +000030 xgethostbyname.c xgethostbyname2.c xreadlink.c xregcomp.c xgetlarg.c \
Eric Andersen976a55e2003-10-22 10:23:04 +000031 get_terminal_width_height.c fclose_nonstdin.c fflush_stdout_and_exit.c \
32 getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \
Eric Andersen6f9a7782004-05-01 01:27:30 +000033 perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \
Paul Fox0b621582005-08-09 19:38:05 +000034 warn_ignoring_args.c concat_subpath_file.c vfork_daemon_rexec.c \
Rob Landley84cb7672006-01-06 20:59:09 +000035 bb_echo.c bb_do_delay.c
Eric Andersen51b8bd62002-07-03 11:46:38 +000036
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +000037# conditionally compiled objects:
38LIBBB-$(CONFIG_FEATURE_SHADOWPASSWDS)+=pwd2spwd.c
39LIBBB-$(CONFIG_FEATURE_MTAB_SUPPORT)+= mtab.c
Bernhard Reutner-Fischer0e8727d2006-01-30 15:29:55 +000040LIBBB-$(CONFIG_PASSWD)+= pw_encrypt.c
41LIBBB-$(CONFIG_SULOGIN)+= pw_encrypt.c
42LIBBB-$(CONFIG_FEATURE_HTTPD_AUTH_MD5)+= pw_encrypt.c
43LIBBB-$(CONFIG_VLOCK)+= correct_password.c
44LIBBB-$(CONFIG_SU)+= correct_password.c
Bernhard Reutner-Fischercd985552006-01-31 08:17:13 +000045LIBBB-$(CONFIG_LOGIN)+= correct_password.c
Rob Landley52460632005-09-25 23:36:12 +000046
Eric Andersen85208e22002-04-12 12:05:57 +000047
Bernhard Reutner-Fischere3ec99d2006-03-02 18:23:13 +000048LIBBB-y:=$(patsubst %,$(srcdir)/%,$(LIBBB-y))
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +000049
50# 1:N objects
Eric Andersen7daa0762004-10-08 07:46:08 +000051LIBBB_MSRC0:=$(srcdir)/messages.c
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +000052LIBBB_M0:=full_version \
53 memory_exhausted invalid_date io_error \
54 read_error write_error name_longer_than_foo unknown \
55 can_not_create_raw_socket perm_denied_are_you_root \
56 shadow_file passwd_file group_file gshadow_file nologin_file \
57 securetty_file motd_file \
58 msg_standard_input msg_standard_output shell_file \
59 bb_dev_null bb_common_bufsiz1
60LIBBB_MOBJ0:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M0))
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +000061$(LIBBB_MOBJ0):$(LIBBB_MSRC0)
Manuel Novoa III cad53642003-03-19 09:13:01 +000062
Eric Andersen7daa0762004-10-08 07:46:08 +000063LIBBB_MSRC1:=$(srcdir)/xfuncs.c
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +000064LIBBB_M1:=xmalloc xrealloc xcalloc xstrdup xstrndup \
65 xfopen xopen xread xread_all xread_char \
66 xferror xferror_stdout xfflush_stdout strlen
67LIBBB_MOBJ1:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M1))
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +000068$(LIBBB_MOBJ1):$(LIBBB_MSRC1)
Manuel Novoa III cad53642003-03-19 09:13:01 +000069
Eric Andersen7daa0762004-10-08 07:46:08 +000070LIBBB_MSRC2:=$(srcdir)/printf.c
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +000071LIBBB_M2:=bb_vfprintf bb_vprintf bb_fprintf bb_printf
72LIBBB_MOBJ2:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M2))
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +000073$(LIBBB_MOBJ2):$(LIBBB_MSRC2)
Manuel Novoa III cad53642003-03-19 09:13:01 +000074
Eric Andersen7daa0762004-10-08 07:46:08 +000075LIBBB_MSRC3:=$(srcdir)/xgetularg.c
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +000076LIBBB_M3:=xgetularg_bnd_sfx xgetlarg_bnd_sfx getlarg10_sfx \
77 xgetularg_bnd xgetularg10_bnd xgetularg10
78LIBBB_MOBJ3:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M3))
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +000079$(LIBBB_MOBJ3):$(LIBBB_MSRC3)
Manuel Novoa III cad53642003-03-19 09:13:01 +000080
Eric Andersen7daa0762004-10-08 07:46:08 +000081LIBBB_MSRC4:=$(srcdir)/safe_strtol.c
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +000082LIBBB_M4:=safe_strtoi safe_strtod safe_strtol safe_strtoul
83LIBBB_MOBJ4:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M4))
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +000084$(LIBBB_MOBJ4):$(LIBBB_MSRC4)
Eric Andersen24794452004-03-06 22:11:45 +000085
Bernhard Reutner-Fischerd5bd1372005-09-20 21:06:17 +000086LIBBB_MSRC5:=$(srcdir)/bb_pwd.c
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +000087LIBBB_M5:=bb_xgetpwnam bb_xgetgrnam bb_getgrgid bb_getpwuid \
88 bb_getug get_ug_id
89LIBBB_MOBJ5:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M5))
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +000090$(LIBBB_MOBJ5):$(LIBBB_MSRC5)
Bernhard Reutner-Fischerd5bd1372005-09-20 21:06:17 +000091
Bernhard Reutner-Fischerbee9eb12005-09-29 12:55:10 +000092LIBBB_MSRC6:=$(srcdir)/llist.c
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +000093LIBBB_M6:=llist_add_to llist_add_to_end llist_free_one llist_free
94LIBBB_MOBJ6:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M6))
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +000095$(LIBBB_MOBJ6):$(LIBBB_MSRC6)
Bernhard Reutner-Fischerbee9eb12005-09-29 12:55:10 +000096
Eric Andersen85208e22002-04-12 12:05:57 +000097
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +000098# We need the names of the object files built from MSRC for the L_ defines
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +000099LIBBB_ALL_MDEFS:=$(LIBBB_M0) $(LIBBB_M1) $(LIBBB_M2) $(LIBBB_M3) $(LIBBB_M4) $(LIBBB_M5) $(LIBBB_M6)
100
101# All multi objects
102libbb_MOBJ$(os):=$(LIBBB_MOBJ0) $(LIBBB_MOBJ1) $(LIBBB_MOBJ2) $(LIBBB_MOBJ3) $(LIBBB_MOBJ4) $(LIBBB_MOBJ5) $(LIBBB_MOBJ6)
Eric Andersen85208e22002-04-12 12:05:57 +0000103
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +0000104LIBBB_ALL_MSRC:=$(LIBBB_MSRC0) $(LIBBB_MSRC1) $(LIBBB_MSRC2) $(LIBBB_MSRC3) \
105 $(LIBBB_MSRC4) $(LIBBB_MSRC5) $(LIBBB_MSRC6)
Eric Andersen85208e22002-04-12 12:05:57 +0000106
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +0000107LIBBB-y:=$(sort $(LIBBB-y))
Manuel Novoa III cad53642003-03-19 09:13:01 +0000108
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +0000109needcrypt-y:=
110ifneq ($(findstring $(srcdir)/pw_encrypt.c,$(LIBBB-y)),)
111needcrypt-y:=y
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +0000112endif
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +0000113ifneq ($(findstring $(srcdir)/correct_password.c,$(LIBBB-y)),)
114needcrypt-y:=y
115endif
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +0000116ifeq ($(CONFIG_FEATURE_FULL_LIBBUSYBOX),y)
117needcrypt-y:=y
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +0000118endif
Manuel Novoa III cad53642003-03-19 09:13:01 +0000119
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +0000120ifeq ($(needcrypt-y),y)
121 LIBRARIES := -lcrypt $(filter-out -lcrypt,$(LIBRARIES))
122endif
Manuel Novoa III cad53642003-03-19 09:13:01 +0000123
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +0000124# all 1:1 objects
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +0000125libbb_OBJ$(os):=$(patsubst $(srcdir)/%.c,$(objdir)/%$(os),$(LIBBB-y))
Eric Andersen24794452004-03-06 22:11:45 +0000126
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +0000127LIBBB_SRC-y:=$(sort $(LIBBB-y) $(LIBBB_ALL_MSRC))
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +0000128LIBBB_SRC-a:=$(wildcard $(srcdir)/*.c)
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +0000129LIBRARY_SRC-y+=$(LIBBB_SRC-y)
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +0000130LIBRARY_SRC-a+=$(LIBBB_SRC-a)
Bernhard Reutner-Fischerd5bd1372005-09-20 21:06:17 +0000131
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +0000132# all defines needed for 1:N objects
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +0000133LIBBB_DEFINE-y:=$(patsubst %,-DL_%,$(LIBBB_ALL_MDEFS))
Bernhard Reutner-Fischer7ca61b62006-01-15 14:04:57 +0000134LIBRARY_DEFINE-y+=$(LIBBB_DEFINE-y)
135LIBRARY_DEFINE-a+=$(LIBBB_DEFINE-y)
136
Bernhard Reutner-Fischer5d261262006-03-01 22:54:48 +0000137ifeq ($(om),.osm)
138# XXX FIXME:
139# also create a pattern for the non-shared case
140$(LIBBB_MOBJ0:.osm=.om): $(LIBBB_MSRC0)
141$(LIBBB_MOBJ1:.osm=.om): $(LIBBB_MSRC1)
142$(LIBBB_MOBJ2:.osm=.om): $(LIBBB_MSRC2)
143$(LIBBB_MOBJ3:.osm=.om): $(LIBBB_MSRC3)
144$(LIBBB_MOBJ4:.osm=.om): $(LIBBB_MSRC4)
145$(LIBBB_MOBJ5:.osm=.om): $(LIBBB_MSRC5)
146$(LIBBB_MOBJ6:.osm=.om): $(LIBBB_MSRC6)
147endif
148
Bernhard Reutner-Fischer07a79e72006-03-09 09:03:37 +0000149$(libbb_OBJ.os): $(objdir)/%.os: $(srcdir)/%.c
150$(libbb_OBJ.o): $(objdir)/%.o: $(srcdir)/%.c
151$(objdir)/libbb.a: $(libbb_OBJ$(os)) $(libbb_MOBJ$(os))
152libraries-y:=$(libraries-y) $(objdir)/libbb.a
153