#
# $Id: GNUmakefile.68k,v 1.107 2010-10-20 13:50:16 obarthel Exp $
#
# :ts=8
#

##############################################################################

############################################
# find out the HOST operating system
# on which this makefile is run (default to AmigaOS)
HOST ?= $(shell uname)
ifeq ($(HOST),)
  HOST = AmigaOS
endif

CC = gcc
AR = ar -q
RANLIB = ranlib
COPY = copy clone buf=0
DELETE = delete all quiet
MAKEDIR = makedir
MAKE = $(MAKE_COMMAND) -f GNUmakefile.68k

# override certain things for non-native builds
ifneq ($(HOST), AmigaOS)
   CC = m68k-amigaos-gcc
   AR = m68k-amigaos-ar -q
   RANLIB = m68k-amigaos-ranlib
   COPY = cp
   DELETE = rm -rf
   MAKEDIR = mkdir -p
endif

##############################################################################

ifeq (,$(TYPE))
LIBC_OBJS	= libc_objs
LIBUNIX_OBJS	= libunix_objs
LIBM_OBJS	= libm_objs
LIBM881_OBJS	= libm881_objs
LIBNET_OBJS	= libnet_objs
LIBDEBUG_OBJS	= libdebug_objs
LIBAMIGA_OBJS	= libamiga_objs
else
LIBC_OBJS	= $(TYPE)/libc_objs
LIBUNIX_OBJS	= $(TYPE)/libunix_objs
LIBM_OBJS	= $(TYPE)/libm_objs
LIBM881_OBJS	= $(TYPE)/libm881_objs
LIBNET_OBJS	= $(TYPE)/libnet_objs
LIBDEBUG_OBJS	= $(TYPE)/libdebug_objs
LIBAMIGA_OBJS	= $(TYPE)/libamiga_objs
endif

##############################################################################

.c.o:
	@echo "Compiling $<"
	@$(CC) -c $(CFLAGS) $<

$(LIBC_OBJS)/%.o : %.c
	@echo "Compiling $< [$(TYPE):c]"
	@$(CC) -o $(LIBC_OBJS)/$*.o -c $(CFLAGS) $<

$(LIBUNIX_OBJS)/%.o : %.c
	@echo "Compiling $< [$(TYPE):unix]"
	@$(CC) -o $(LIBUNIX_OBJS)/$*.o -c $(CFLAGS) -DUNIX_PATH_SEMANTICS $<

$(LIBM_OBJS)/%.o : %.c
	@echo "Compiling $< [$(TYPE):m]"
	@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) -msoft-float -DIEEE_FLOATING_POINT_SUPPORT $<

$(LIBM881_OBJS)/%.o : %.c
	@echo "Compiling $< [$(TYPE):m881]"
	@$(CC) -o $(LIBM881_OBJS)/$*.o -c $(CFLAGS) -m68881 -DM68881_FLOATING_POINT_SUPPORT $<

$(LIBNET_OBJS)/%.o : %.c
	@echo "Compiling $< [$(TYPE):net]"
	@$(CC) -o $(LIBNET_OBJS)/$*.o -c $(CFLAGS) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT $<

$(LIBDEBUG_OBJS)/%.o : %.c
	@echo "Compiling $< [$(TYPE):debug]"
	@$(CC) -o $(LIBDEBUG_OBJS)/$*.o -c $(CFLAGS) $<

$(LIBAMIGA_OBJS)/%.o : %.c
	@echo "Compiling $< [$(TYPE):amiga]"
	@$(CC) -o $(LIBAMIGA_OBJS)/$*.o -c $(CFLAGS) $<

##############################################################################

ifeq (small_data_020,$(TYPE))
CODE_TYPE	:= -m68020-60
CODE_FLAGS	:= -fbaserel -DSMALL_DATA -DM68020 -DUSE_64_BIT_INTS
endif

ifeq (small_data,$(TYPE))
CODE_TYPE	:= -m68000
CODE_FLAGS	:= -fbaserel -DSMALL_DATA
endif

ifeq (small_data32,$(TYPE))
CODE_TYPE	:= -m68020-60
CODE_FLAGS	:= -fbaserel32 -DSMALL_DATA32 -DM68020 -DUSE_64_BIT_INTS
endif

ifeq (large_data_020,$(TYPE))
CODE_TYPE	:= -m68020-60
CODE_FLAGS	:= -DM68020 -DUSE_64_BIT_INTS
endif

ifeq (large_data,$(TYPE))
CODE_TYPE	:= -m68000
CODE_FLAGS	:=
endif

##############################################################################

WARNINGS = \
	-Wall -W -Wpointer-arith -Wsign-compare -Wmissing-prototypes \
	-Wundef -Wbad-function-cast -Wmissing-declarations -Wunused

#	-Wconversion -Wshadow

INCLUDES = -Iinclude -I. -Inetinclude
#OPTIONS = -fno-builtin -fno-common -DDEBUG
 OPTIONS = -fno-builtin -fno-common -DNDEBUG
#OPTIONS = -fno-builtin -fno-common -DNDEBUG -D__THREAD_SAFE
#OPTIONS = -fno-builtin -fno-common -D__MEM_DEBUG
#OPTIONS = -fno-builtin -fno-common -DDEBUG -D__MEM_DEBUG -DNO_INLINE_STDARG
#OPTIMIZE = -O3 -fomit-frame-pointer -funroll-loops    -finline-functions
OPTIMIZE = -O  -fomit-frame-pointer -fstrength-reduce -finline-functions
#OPTIMIZE = -O2 -fomit-frame-pointer
#DEBUG = -g

CFLAGS = \
	$(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) \
	$(CODE_FLAGS) $(INCLUDES) $(CODE_TYPE)

##############################################################################

C_LIB = \
	c.lib_rev.o \
	ctype_isalnum.o \
	ctype_isalpha.o \
	ctype_isascii.o \
	ctype_isblank.o \
	ctype_iscntrl.o \
	ctype_isdigit.o \
	ctype_isgraph.o \
	ctype_islower.o \
	ctype_isprint.o \
	ctype_ispunct.o \
	ctype_isspace.o \
	ctype_isupper.o \
	ctype_isxdigit.o \
	ctype_table.o \
	ctype_tolower.o \
	ctype_toupper.o \
	dirent_closedir.o \
	dirent_opendir.o \
	dirent_readdir.o \
	dirent_rewinddir.o \
	errno_data.o \
	fcntl_close.o \
	fcntl_creat.o \
	fcntl_fcntl.o \
	fcntl_get_default_file.o \
	fcntl_lock.o \
	fcntl_lseek.o \
	fcntl_open.o \
	fcntl_read.o \
	fcntl_write.o \
	ftw_ftw.o \
	ftw_nftw.o \
	inttypes_imaxdiv.o \
	inttypes_imaxabs.o \
	inttypes_strtoimax.o \
	inttypes_strtoumax.o \
	libgen_basename.o \
	libgen_dirname.o \
	locale_init_exit.o \
	locale_localeconv.o \
	locale_open_locale.o \
	locale_setlocale.o \
	mount_convertinfo.o \
	mount_fstatfs.o \
	mount_statfs.o \
	signal_checkabort.o \
	signal_data.o \
	signal_kill.o \
	signal_mask.o \
	signal_raise.o \
	signal_sigaddset.o \
	signal_sigblock.o \
	signal_sigemptyset.o \
	signal_sigmask.o \
	signal_signal.o \
	signal_sigprocmask.o \
	signal_sigsetmask.o \
	stat_chmod.o \
	stat_convertfileinfo.o \
	stat_fchmod.o \
	stat_fstat.o \
	stat_lstat.o \
	stat_lock.o \
	stat_mkdir.o \
	stat_rmdir.o \
	stat_stat.o \
	stat_umask.o \
	stdio_asprintf.o \
	stdio_change_fd_action.o \
	stdio_change_fd_user_data.o \
	stdio_clearerr.o \
	stdio_dropiobreadbuffer.o \
	stdio_duplicate_fd.o \
	stdio_examine_fh.o \
	stdio_fclose.o \
	stdio_fdhookentry.o \
	stdio_feof.o \
	stdio_ferror.o \
	stdio_fflush.o \
	stdio_fgetc.o \
	stdio_fgetpos.o \
	stdio_fgets.o \
	stdio_filliobreadbuffer.o \
	stdio_findvacantfdentry.o \
	stdio_findvacantiobentry.o \
	stdio_flockfile.o \
	stdio_flush.o \
	stdio_flush_all_files.o \
	stdio_flushiobwritebuffer.o \
	stdio_fopen.o \
	stdio_fprintf.o \
	stdio_fputc.o \
	stdio_fputs.o \
	stdio_fread.o \
	stdio_freopen.o \
	stdio_fscanf.o \
	stdio_fseek.o \
	stdio_fseeko.o \
	stdio_fsetpos.o \
	stdio_ftell.o \
	stdio_ftello.o \
	stdio_ftrylockfile.o \
	stdio_funlockfile.o \
	stdio_fwrite.o \
	stdio_getc.o \
	stdio_getc_unlocked.o \
	stdio_getchar.o \
	stdio_getchar_unlocked.o \
	stdio_gets.o \
	stdio_get_fd.o \
	stdio_get_file_descriptor.o \
	stdio_growfdtable.o \
	stdio_growiobtable.o \
	stdio_grow_file.o \
	stdio_initializefd.o \
	stdio_initializeiob.o \
	stdio_init_exit.o \
	stdio_file_init.o \
	stdio_iobhookentry.o \
	stdio_lock.o \
	stdio_locksemaphorename.o \
	stdio_nostdio.o \
	stdio_openiob.o \
	stdio_parent_of_fh.o \
	stdio_perror.o \
	stdio_popen.o \
	stdio_printf.o \
	stdio_putc.o \
	stdio_putc_unlocked.o \
	stdio_putchar.o \
	stdio_putchar_unlocked.o \
	stdio_puts.o \
	stdio_remove.o \
	stdio_remove_fd_alias.o \
	stdio_rename.o \
	stdio_resolve_fd_file.o \
	stdio_rewind.o \
	stdio_scanf.o \
	stdio_setbuf.o \
	stdio_setvbuf.o \
	stdio_snprintf.o \
	stdio_sprintf.o \
	stdio_sscanf.o \
	stdio_sscanf_hook_entry.o \
	stdio_tmpfile.o \
	stdio_tmpnam.o \
	stdio_translateioerror.o \
	stdio_ungetc.o \
	stdio_unlockfile.o \
	stdio_vasprintf.o \
	stdio_vasprintf_hook_entry.o \
	stdio_vfprintf.o \
	stdio_vfscanf.o \
	stdio_vprintf.o \
	stdio_vsnprintf.o \
	stdio_vsnprintf_hook_entry.o \
	stdio_vsprintf.o \
	stdio_vsprintf_hook_entry.o \
	stdio_vsscanf.o \
	stdio_vscanf.o \
	stdlib_abort.o \
	stdlib_abs.o \
	stdlib_alloca.o \
	stdlib_alloca_cleanup.o \
	stdlib_alloca_trap.o \
	stdlib_assertion_failure.o \
	stdlib_atexit.o \
	stdlib_atoi.o \
	stdlib_atol.o \
	stdlib_atoll.o \
	stdlib_bsearch.o \
	stdlib_calloc.o \
	stdlib_checkdetach.o \
	stdlib_constructor.o \
	stdlib_constructor_begin.o \
	stdlib_default_pool_size.o \
	stdlib_default_puddle_size.o \
	stdlib_destructor.o \
	stdlib_detach.o \
	stdlib_disablerequesters.o \
	stdlib_div.o \
	stdlib_divsi3.o \
	stdlib_divsi4.o \
	stdlib_dosbase.o \
	stdlib_exit.o \
	stdlib_free.o \
	stdlib_free_unused_slabs.o \
	stdlib_decay_unused_slabs.o \
	stdlib_getdefstacksize.o \
	stdlib_getenv.o \
	stdlib_getmemstats.o \
	stdlib_getsp.o \
	stdlib_get_errno.o \
	stdlib_get_slab_usage.o \
	stdlib_get_slab_allocations.o \
	stdlib_get_slab_stats.o \
	stdlib_isresident.o \
	stdlib_labs.o \
	stdlib_llabs.o \
	stdlib_ldiv.o \
	stdlib_lldiv.o \
	stdlib_lib_main.o \
	stdlib_lib_startup.o \
	stdlib_machine_test.o \
	stdlib_main.o \
	stdlib_main_stub.o \
	stdlib_malloc.o \
	stdlib_math.o \
	stdlib_mkdtemp.o \
	stdlib_mkstemp.o \
	stdlib_mktemp.o \
	stdlib_modsi3.o \
	stdlib_mulsi3.o \
	stdlib_never_free.o \
	stdlib_osliberror.o \
	stdlib_oslibversion.o \
	stdlib_priority.o \
	stdlib_process_name.o \
	stdlib_program_name.o \
	stdlib_putenv.o \
	stdlib_qsort.o \
	stdlib_rand.o \
	stdlib_rand_r.o \
	stdlib_realloc.o \
	stdlib_red_black.o \
	stdlib_resetmemstats.o \
	stdlib_semaphore.o \
	stdlib_setenv.o \
	stdlib_setjmp.o \
	stdlib_set_errno.o \
	stdlib_set_process_window.o \
	stdlib_shell_escape.o \
	stdlib_showerror.o \
	stdlib_slab.o \
	stdlib_slab_max_size.o \
	stdlib_slab_purge_threshold.o \
	stdlib_srand.o \
	stdlib_stacksize.o \
	stdlib_stack_usage.o \
	stdlib_arg.o \
	stdlib_stdio_window_spec.o \
	stdlib_strtol.o \
	stdlib_strtoll.o \
	stdlib_strtoul.o \
	stdlib_strtoull.o \
	stdlib_swapstack.o \
	stdlib_sysbase.o \
	stdlib_system.o \
	stdlib_termination_message.o \
	stdlib_threshold.o \
	stdlib_utilitybase.o \
	stdlib_udivsi3.o \
	stdlib_udivsi4.o \
	stdlib_umodsi3.o \
	stdlib_unsetenv.o \
	strings_ffs.o \
	strings_strcasecmp.o \
	strings_strncasecmp.o \
	string_bcmp.o \
	string_bcopy.o \
	string_bzero.o \
	string_index.o \
	string_memchr.o \
	string_memcmp.o \
	string_memcpy.o \
	string_memmove.o \
	string_memset.o \
	string_rindex.o \
	string_strcat.o \
	string_strchr.o \
	string_strcmp.o \
	string_strcoll.o \
	string_strcpy.o \
	string_strcspn.o \
	string_strdup.o \
	string_strerror.o \
	string_strerror_r.o \
	string_strlcat.o \
	string_strlcpy.o \
	string_strlen.o \
	string_strncat.o \
	string_strncmp.o \
	string_strncpy.o \
	string_strpbrk.o \
	string_strrchr.o \
	string_strspn.o \
	string_strstr.o \
	string_strtok.o \
	string_strtok_r.o \
	string_strxfrm.o \
	time_asctime.o \
	time_asctime_r.o \
	time_clock.o \
	time_converttime.o \
	time_convert_datestamp.o \
	time_convert_time.o \
	time_ctime.o \
	time_ctime_r.o \
	time_data.o \
	time_days_per_date.o \
	time_gettimeofday.o \
	time_gmtime.o \
	time_gmtime_r.o \
	time_localtime.o \
	time_localtime_r.o \
	time_mktime.o \
	time_numbertostring.o \
	time_strftime.o \
	time_time.o \
	time_weekday.o \
	uio_readv.o \
	uio_writev.o \
	ulimit_ulimit.o \
	unistd_access.o \
	unistd_chdir.o \
	unistd_chdir_exit.o \
	unistd_chown.o \
	unistd_currentpathname.o \
	unistd_dup.o \
	unistd_dup2.o \
	unistd_fchown.o \
	unistd_fdatasync.o \
	unistd_fdopen.o \
	unistd_fileno.o \
	unistd_fsync.o \
	unistd_ftruncate.o \
	unistd_getcwd.o \
	unistd_getopt.o \
	unistd_getpid.o \
	unistd_init_exit.o \
	unistd_isatty.o \
	unistd_lchown.o \
	unistd_link.o \
	unistd_lockf.o \
	unistd_readlink.o \
	unistd_realpath.o \
	unistd_sleep.o \
	unistd_symlink.o \
	unistd_sync_fd.o \
	unistd_timer.o \
	unistd_time_delay.o \
	unistd_truncate.o \
	unistd_unlink.o \
	unistd_unlink_retries.o \
	unistd_usleep.o \
	utime_utime.o \
	utsname_uname.o

UNIX_LIB = \
	unix.lib_rev.o \
	dirent_closedir.o \
	dirent_rewinddir.o \
	dirent_opendir.o \
	dirent_readdir.o \
	fcntl_creat.o \
	fcntl_fcntl.o \
	fcntl_open.o \
	fcntl_get_default_file.o \
	getopt_getopt_long.o \
	mount_convertinfo.o \
	mount_statfs.o \
	resource_getrlimit.o \
	resource_setrlimit.o \
	stat_chmod.o \
	stat_fstat.o \
	stat_lstat.o \
	stat_lock.o \
	stat_mkdir.o \
	stat_rmdir.o \
	stat_stat.o \
	stdio_ctermid.o \
	stdio_fdhookentry.o \
	stdio_fflush.o \
	stdio_fopen.o \
	stdio_init_exit.o \
	stdio_file_init.o \
	stdio_locksemaphorename.o \
	stdio_openiob.o \
	stdio_popen.o \
	stdio_record_locking.o \
	stdio_remove.o \
	stdio_rename.o \
	stdlib_alloca.o \
	stdlib_alloca_cleanup.o \
	stdlib_alloca_trap.o \
	stdlib_arg.o \
	stdlib_expand_wildcard.o \
	stdlib_expand_wildcard_check.o \
	stdlib_getmemstats.o \
	stdlib_main.o \
	stdlib_main_stub.o \
	stdlib_mkdtemp.o \
	stdlib_mkstemp.o \
	stdlib_mktemp.o \
	stdlib_malloc.o \
	stdlib_realloc.o \
	stdlib_resetmemstats.o \
	stdlib_system.o \
	systeminfo_sysinfo.o \
	termios_cfgetispeed.o \
	termios_cfgetospeed.o \
	termios_cfmakeraw.o \
	termios_cfsetispeed.o \
	termios_cfsetospeed.o \
	termios_console_fdhookentry.o \
	termios_tcdrain.o \
	termios_tcflow.o \
	termios_tcflush.o \
	termios_tcgetattr.o \
	termios_tcsendbreak.o \
	termios_tcsetattr.o \
	timeb_ftime.o \
	uio_readv.o \
	uio_writev.o \
	unistd_access.o \
	unistd_chdir.o \
	unistd_chdir_exit.o \
	unistd_chown.o \
	unistd_common_pathconf.o \
	unistd_def_path.o \
	unistd_def_path_delimiter.o \
	unistd_environ.o \
	unistd_execl.o \
	unistd_execle.o \
	unistd_execlp.o \
	unistd_execv.o \
	unistd_execve.o \
	unistd_execve_env_exit.o \
	unistd_execve_env_init.o \
	unistd_execve_exit.o \
	unistd_execvp.o \
	unistd_fpathconf.o \
	unistd_getcwd.o \
	unistd_lchown.o \
	unistd_link.o \
	unistd_lockf.o \
	unistd_pathconf.o \
	unistd_readlink.o \
	unistd_realpath.o \
	unistd_restorepathname.o \
	unistd_setcurrentpath.o \
	unistd_strip_double_slash.o \
	unistd_symlink.o \
	unistd_translatea2u.o \
	unistd_translaterel.o \
	unistd_translateu2a.o \
	unistd_truncate.o \
	unistd_ttyname.o \
	unistd_ttyname_r.o \
	unistd_unix_path_semantics.o \
	unistd_unlink.o \
	unistd_wildcard_expand.o \
	utime_utime.o

MATH_LIB = \
	complex_carg.o \
	complex_cargf.o \
	complex_cargl.o \
	complex_cimag.o \
	complex_cimagf.o \
	complex_cimagl.o \
	complex_conj.o \
	complex_conjf.o \
	complex_conjl.o \
	complex_creal.o \
	complex_crealf.o \
	complex_creall.o \
	fenv_feclearexcept.o \
	fenv_fegetenv.o \
	fenv_fegetexceptflag.o \
	fenv_fegetround.o \
	fenv_feholdexcept.o \
	fenv_feraiseexcept.o \
	fenv_fesetenv.o \
	fenv_fesetexceptflag.o \
	fenv_fetestexcept.o \
	fenv_fetestround.o \
	fenv_feupdateenv.o \
	math_acos.o \
	math_acosf.o \
	math_acosh.o \
	math_acoshf.o \
	math_asin.o \
	math_asinf.o \
	math_asinh.o \
	math_asinhf.o \
	math_atan.o \
	math_atan2.o \
	math_atan2f.o \
	math_atanf.o \
	math_atanh.o \
	math_atanhf.o \
	math_cbrt.o \
	math_cbrtf.o \
	math_ceil.o \
	math_ceilf.o \
	math_copysign.o \
	math_copysignf.o \
	math_cos.o \
	math_cosf.o \
	math_cosh.o \
	math_coshf.o \
	math_erf.o \
	math_erfc.o \
	math_erfcf.o \
	math_erff.o \
	math_exp.o \
	math_exp2.o \
	math_exp2f.o \
	math_expf.o \
	math_expm1.o \
	math_expm1f.o \
	math_fabs.o \
	math_fabsf.o \
	math_fdim.o \
	math_fdimf.o \
	math_floor.o \
	math_floorf.o \
	math_fma.o \
	math_fmaf.o \
	math_fmax.o \
	math_fmaxf.o \
	math_fmin.o \
	math_fminf.o \
	math_fmod.o \
	math_fmodf.o \
	math_fpclassify.o \
	math_frexp.o \
	math_frexpf.o \
	math_huge_val.o \
	math_huge_valf.o \
	math_hypot.o \
	math_hypotf.o \
	math_ilogb.o \
	math_ilogbf.o \
	math_inf.o \
	math_inff.o \
	math_init_exit.o \
	math_isfinite.o \
	math_isunordered.o \
	math_kernel_cosf.o \
	math_kernel_sinf.o \
	math_kernel_tanf.o \
	math_ldexp.o \
	math_ldexpf.o \
	math_lgamma.o \
	math_lgammaf.o \
	math_llrint.o \
	math_log.o \
	math_log10.o \
	math_log10f.o \
	math_log1p.o \
	math_log1pf.o \
	math_log2.o \
	math_log2f.o \
	math_logb.o \
	math_logbf.o \
	math_logf.o \
	math_lrint.o \
	math_lrintf.o \
	math_lround.o \
	math_lroundf.o \
	math_modf.o \
	math_modff.o \
	math_nan.o \
	math_nanf.o \
	math_nearbyint.o \
	math_nearbyintf.o \
	math_nextafter.o \
	math_nextafterf.o \
	math_pow.o \
	math_powf.o \
	math_remainder.o \
	math_remainderf.o \
	math_remquo.o \
	math_remquof.o \
	math_rem_pio2f.o \
	math_rint.o \
	math_rintf.o \
	math_round.o \
	math_roundf.o \
	math_scalbn.o \
	math_scalbnf.o \
	math_signbit.o \
	math_sin.o \
	math_sinf.o \
	math_sinh.o \
	math_sinhf.o \
	math_sqrt.o \
	math_sqrtf.o \
	math_tan.o \
	math_tanf.o \
	math_tanh.o \
	math_tanhf.o \
	math_tgamma.o \
	math_tgammaf.o \
	math_trunc.o \
	math_truncf.o \
	stdio_asprintf.o \
	stdio_flush.o \
	stdio_flush_all_files.o \
	stdio_fprintf.o \
	stdio_fscanf.o \
	stdio_printf.o \
	stdio_scanf.o \
	stdio_snprintf.o \
	stdio_sprintf.o \
	stdio_sscanf.o \
	stdio_vasprintf.o \
	stdio_vfprintf.o \
	stdio_vfscanf.o \
	stdio_vsscanf.o \
	stdio_vscanf.o \
	stdio_vprintf.o \
	stdio_vsnprintf.o \
	stdio_vsprintf.o \
	stdlib_atof.o \
	stdlib_strtod.o \
	stdlib_strtof.o \
	time_difftime.o

MATH_LIB_881 = \
	m881.lib_rev.o \
	$(MATH_LIB)

MATH_LIB_IEEE = \
	m.lib_rev.o \
	$(MATH_LIB) \
	math_adddf3.o \
	math_addsf3.o \
	math_divdf3.o \
	math_divsf3.o \
	math_eqdf2.o \
	math_eqsf2.o \
	math_extendsfdf2.o \
	math_fixdfsi.o \
	math_fixsfsi.o \
	math_fixunsdfsi.o \
	math_fixunssfsi.o \
	math_floatsidf.o \
	math_floatsisf.o \
	math_gedf2.o \
	math_gesf2.o \
	math_gtdf2.o \
	math_gtsf2.o \
	math_ledf2.o \
	math_lesf2.o \
	math_ltdf2.o \
	math_ltsf2.o \
	math_muldf3.o \
	math_mulsf3.o \
	math_nedf2.o \
	math_negdf2.o \
	math_negsf2.o \
	math_nesf2.o \
	math_subdf3.o \
	math_subsf3.o \
	math_truncdfsf2.o

NET_LIB = \
	net.lib_rev.o \
	socket_accept.o \
	socket_bind.o \
	socket_check_daemon.o \
	socket_connect.o \
	socket_gethostbyaddr.o \
	socket_gethostbyname.o \
	socket_gethostid.o \
	socket_gethostname.o \
	socket_getnetbyaddr.o \
	socket_getnetbyname.o \
	socket_getpeername.o \
	socket_getprotobyname.o \
	socket_getprotobynumber.o \
	socket_getservbyname.o \
	socket_getservbyport.o \
	socket_getsockname.o \
	socket_getsockopt.o \
	socket_get_descriptor.o \
	socket_inet_addr.o \
	socket_inet_aton.o \
	socket_inet_lnaof.o \
	socket_inet_makeaddr.o \
	socket_inet_netof.o \
	socket_inet_network.o \
	socket_inet_ntoa.o \
	socket_init_exit.o \
	socket_ioctl.o \
	socket_isdaemon.o \
	socket_listen.o \
	socket_obtain_daemon.o \
	socket_recv.o \
	socket_recvfrom.o \
	socket_recvmsg.o \
	socket_select_signal.o \
	socket_select.o \
	socket_wait_select.o \
	socket_send.o \
	socket_sendmsg.o \
	socket_sendto.o \
	socket_setsockopt.o \
	socket_shutdown.o \
	socket_socket.o \
	socket_hook_entry.o \
	socket_hstrerror.o \
	socket_get_h_errno.o \
	socket_set_h_errno.o \
	stat_umask.o \
	systeminfo_sysinfo.o \
	usergroup_crypt.o \
	usergroup_data.o \
	usergroup_endgrent.o \
	usergroup_endpwent.o \
	usergroup_getegid.o \
	usergroup_geteuid.o \
	usergroup_getgid.o \
	usergroup_getgrent.o \
	usergroup_getgrgid.o \
	usergroup_getgrnam.o \
	usergroup_getgroups.o \
	usergroup_getpass.o \
	usergroup_getpwent.o \
	usergroup_getpwnam.o \
	usergroup_getpwuid.o \
	usergroup_getuid.o \
	usergroup_initgroups.o \
	usergroup_init_exit.o \
	usergroup_rootmode.o \
	usergroup_setegid.o \
	usergroup_seteuid.o \
	usergroup_setgid.o \
	usergroup_setgrent.o \
	usergroup_setgroups.o \
	usergroup_setpwent.o \
	usergroup_setregid.o \
	usergroup_setreuid.o \
	usergroup_setsid.o \
	usergroup_setuid.o \
	utsname_uname.o

DEBUG_LIB = \
	debug.lib_rev.o \
	debug.o \
	debug_cmpstrexec.o \
	debug_kcmpstr.o \
	debug_kdofmt.o \
	debug_kgetc.o \
	debug_kgetch1.o \
	debug_kgetch2.o \
	debug_kgetchar1.o \
	debug_kgetchar2.o \
	debug_kgetnum1.o \
	debug_kgetnum2.o \
	debug_kmaygetch.o \
	debug_kmaygetchar.o \
	debug_kprintf1.o \
	debug_kprintf2.o \
	debug_kputc.o \
	debug_kputch1.o \
	debug_kputch2.o \
	debug_kputchar1.o \
	debug_kputchar2.o \
	debug_kputfmt.o \
	debug_kputs1.o \
	debug_kputs2.o \
	debug_kputstr1.o \
	debug_kputstr2.o \
	debug_kvprintf1.o \
	debug_kvprintf2.o \
	debug_level.o

AMIGA_LIB = \
	amiga.lib_rev.o \
	amiga_acrypt.o \
	amiga_addtof.o \
	amiga_argarraydone.o \
	amiga_argarrayinit.o \
	amiga_argint.o \
	amiga_argstring.o \
	amiga_beginio.o \
	amiga_callhook.o \
	amiga_callhooka.o \
	amiga_coercemethod.o \
	amiga_createextio.o \
	amiga_createport.o \
	amiga_createstdio.o \
	amiga_createtask.o \
	amiga_deleteextio.o \
	amiga_deleteport.o \
	amiga_deletestdio.o \
	amiga_deletetask.o \
	amiga_domethod.o \
	amiga_dosupermethod.o \
	amiga_dotimer.o \
	amiga_fastrand.o \
	amiga_freeievents.o \
	amiga_hookentry.o \
	amiga_hotkey.o \
	amiga_invertstring.o \
	amiga_newlist.o \
	amiga_rangerand.o \
	amiga_remtof.o \
	amiga_rexxvars.o \
	amiga_setsuperattrs.o \
	amiga_timedelay.o \
	amiga_waitbeam.o

MEMDEBUG_LIB = \
	stdio_vasprintf_debug.o \
	stdio_vasprintf_debug.o \
	stdio_vasprintf_hook_entry_debug.o \
	stdlib_alloca_debug.o \
	stdlib_calloc_debug.o \
	stdlib_free_debug.o \
	stdlib_malloc_debug.o \
	string_strdup_debug.o \
	unistd_getcwd_debug.o

##############################################################################

LIBS_68K := $(LIBC_OBJS)/libc.a $(LIBUNIX_OBJS)/libunix.a \
            $(LIBNET_OBJS)/libnet.a $(LIBDEBUG_OBJS)/libdebug.a $(LIBAMIGA_OBJS)/libamiga.a \
            $(LIBM_OBJS)/libm.a
LIBS_020 := $(LIBM881_OBJS)/libm881.a $(LIBS_68K)

##############################################################################

# The 881 math library won't build in plain 68k mode
ifneq (,$(findstring 68020,$(CODE_FLAGS)))
LIBS := $(LIBS_020)
else
LIBS := $(LIBS_68K)
endif

##############################################################################

STARTUPS := nrcrt0.o nbcrt0.o nr32crt0.o nb32crt0.o ncrt0.o

##############################################################################

all: \
	lib/nrcrt0.o \
	lib/nbcrt0.o \
	lib/ncrt0.o \
	lib/n32bcrt0.o \
	lib/n32rcrt0.o \
	lib/libm020/libm.a \
	lib/libm.a \
	lib/libb/libm.a \
	lib/libb/libm020/libm.a \
	lib/libb32/libm020/libm.a

##############################################################################

clean:
	-$(DELETE) $(TYPE) $(LIBS_020) $(STARTUPS) \
		$(LIBC_OBJS) $(LIBUNIX_OBJS) $(LIBM_OBJS) \
		$(LIBM881_OBJS) $(LIBNET_OBJS) $(LIBDEBUG_OBJS) \
		$(LIBAMIGA_OBJS)

realclean:
	$(MAKE) clean
	-$(DELETE) lib small_data_020 small_data small_data32 large_data_020 \
		large_data

##############################################################################

version:
	copy clone c.lib_rev.rev amiga.lib_rev.rev
	copy clone c.lib_rev.rev debug.lib_rev.rev
	copy clone c.lib_rev.rev m.lib_rev.rev
	copy clone c.lib_rev.rev m881.lib_rev.rev
	copy clone c.lib_rev.rev net.lib_rev.rev
	copy clone c.lib_rev.rev unix.lib_rev.rev
	bumprev 1 amiga.lib
	bumprev 1 c.lib
	bumprev 1 debug.lib
	bumprev 1 m.lib
	bumprev 1 m881.lib
	bumprev 1 net.lib
	bumprev 1 unix.lib

##############################################################################

cvs-tag:
	cvs -q tag V1_`type c.lib_rev.rev`

##############################################################################

kitchen_sink: $(TYPE) $(LIBS) $(STARTUPS)

##############################################################################

ifneq (,$(TYPE))
$(TYPE):
	$(MAKEDIR) $@
endif

##############################################################################

lib:
	-$(MAKEDIR) $@

lib/libb : lib
	-$(MAKEDIR) $@

lib/libb/libm020 : lib lib/libb
	-$(MAKEDIR) $@

lib/libb32/libm020 : lib lib/libb32
	-$(MAKEDIR) $@

lib/libb32 : lib
	-$(MAKEDIR) $@

lib/libm020 : lib
	-$(MAKEDIR) $@

lib/libb/libm020/libm.a: lib lib/libb/libm020
	$(MAKE) TYPE=small_data_020 kitchen_sink
	@$(COPY) $(foreach file,$(LIBS_020),small_data_020/$(file)) lib/libb/libm020

lib/libb/libm.a: lib lib/libb
	$(MAKE) TYPE=small_data kitchen_sink
	@$(COPY) $(foreach file,$(LIBS_68K),small_data/$(file)) lib/libb

lib/libb32/libm020/libm.a: lib lib/libb32 lib/libb32/libm020
	$(MAKE) TYPE=small_data32 kitchen_sink
	@$(COPY) $(foreach file,$(LIBS_020),small_data32/$(file)) lib/libb32/libm020

lib/libm020/libm.a: lib lib/libm020
	$(MAKE) TYPE=large_data_020 kitchen_sink
	@$(COPY) $(foreach file,$(LIBS_020),large_data_020/$(file)) lib/libm020

lib/libm.a: lib
	$(MAKE) TYPE=large_data kitchen_sink
	@$(COPY) $(foreach file,$(LIBS_68K),large_data/$(file)) lib

lib/nrcrt0.o : lib nrcrt0.o
	@$(COPY) nrcrt0.o lib

lib/nbcrt0.o : lib nbcrt0.o
	@$(COPY) nbcrt0.o lib

lib/ncrt0.o : lib ncrt0.o
	@$(COPY) ncrt0.o lib

lib/n32bcrt0.o : lib nb32crt0.o
	@$(COPY) nb32crt0.o lib

lib/n32rcrt0.o : lib nr32crt0.o
	@$(COPY) nr32crt0.o lib

##############################################################################

$(LIBAMIGA_OBJS)/amiga_hookentry.o : amiga_hookentry.c

$(LIBC_OBJS)/stdlib_getsp.o : stdlib_getsp.c

$(LIBC_OBJS)/stdlib_swapstack.o : stdlib_swapstack.c

$(LIBC_OBJS)/stdlib_setjmp.o : stdlib_setjmp.c

##############################################################################

$(LIBC_OBJS)/c.lib_rev.o : c.lib_rev.c c.lib_rev.h

$(LIBUNIX_OBJS)/unix.lib_rev.o : unix.lib_rev.c unix.lib_rev.h

$(LIBM_OBJS)/m.lib_rev.o : m.lib_rev.c m.lib_rev.h

$(LIBM881_OBJS)/m881.lib_rev.o : m881.lib_rev.c m881.lib_rev.h

$(LIBNET_OBJS)/net.lib_rev.o : net.lib_rev.c net.lib_rev.h

$(LIBDEBUG_OBJS)/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h

$(LIBAMIGA_OBJS)/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h

##############################################################################

$(LIBC_OBJS)/stdlib_stacksize.o : stdlib_stacksize.c stdlib_gcc_help.h

$(LIBC_OBJS)/stdlib_getdefstacksize.o : stdlib_getdefstacksize.c stdlib_gcc_help.h

$(LIBC_OBJS)/stdlib_shell_escape.o : stdlib_shell_escape.c stdlib_gcc_help.h

$(LIBC_OBJS)/stdlib_alloca.o : stdlib_alloca.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_calloc.o : stdlib_calloc.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_free.o : stdlib_free.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_malloc.o : stdlib_malloc.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_slab.o : stdlib_slab.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_slab_purge_threshold.o : stdlib_slab_purge_threshold.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_get_slab_stats.o : stdlib_get_slab_stats.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_free_unused_slabs.o : stdlib_free_unused_slabs.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_decay_unused_slabs.o : stdlib_decay_unused_slabs.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_get_slab_usage.o : stdlib_get_slab_usage.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_get_slab_allocations.o : stdlib_get_slab_allocations.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_realloc.o : stdlib_realloc.c stdlib_memory.h include/stdlib.h

$(LIBC_OBJS)/stdlib_red_black.o : stdlib_red_black.c stdlib_memory.h include/stdlib.h

##############################################################################

# The -fbaserel32 option requires the CPU type to be 68020, too.
ifneq (,$(findstring fbaserel32,$(CODE_FLAGS)))
LOCAL_CODE_FLAGS := $(CODE_FLAGS) $(CODE_TYPE)
else
LOCAL_CODE_FLAGS := $(CODE_FLAGS)
endif

$(LIBM881_OBJS)/math_init_exit.o : math_init_exit.c
	@echo "Compiling $< [$(TYPE):m881]"
	@$(CC) -o $(LIBM881_OBJS)/math_init_exit.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) -DM68881_FLOATING_POINT_SUPPORT $(INCLUDES) $<

$(LIBC_OBJS)/stdlib_machine_test.o : stdlib_machine_test.c
	@echo "Compiling $< [$(TYPE):c]"
	@$(CC) -o $(LIBC_OBJS)/stdlib_machine_test.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) $(INCLUDES) $<

$(LIBC_OBJS)/stdlib_showerror.o : stdlib_showerror.c
	@echo "Compiling $< [$(TYPE):c]"
	@$(CC) -o $(LIBC_OBJS)/stdlib_showerror.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) $(INCLUDES) $<

$(LIBC_OBJS)/stdlib_main.o : stdlib_main.c
	@echo "Compiling $< [$(TYPE):c]"
	@$(CC) -o $(LIBC_OBJS)/stdlib_main.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) $(INCLUDES) stdlib_main.c

##############################################################################

$(LIBC_OBJS)/stdlib_alloca_debug.o : stdlib_alloca.c
	@echo "Compiling $< [$(TYPE):c debug]"
	@$(CC) -o $(LIBC_OBJS)/stdlib_alloca_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG stdlib_alloca.c

$(LIBC_OBJS)/stdlib_calloc_debug.o : stdlib_calloc.c
	@echo "Compiling $< [$(TYPE):c debug]"
	@$(CC) -o $(LIBC_OBJS)/stdlib_calloc_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG stdlib_calloc.c

$(LIBC_OBJS)/stdlib_free_debug.o : stdlib_free.c
	@echo "Compiling $< [$(TYPE):c debug]"
	@$(CC) -o $(LIBC_OBJS)/stdlib_free_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG stdlib_free.c

$(LIBC_OBJS)/stdlib_malloc_debug.o : stdlib_malloc.c
	@echo "Compiling $< [$(TYPE):c debug]"
	@$(CC) -o $(LIBC_OBJS)/stdlib_malloc_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG stdlib_malloc.c

$(LIBC_OBJS)/stdlib_realloc_debug.o : stdlib_realloc.c
	@echo "Compiling $< [$(TYPE):c debug]"
	@$(CC) -o $(LIBC_OBJS)/stdlib_realloc_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG stdlib_realloc.c

$(LIBC_OBJS)/stdio_vasprintf_hook_entry_debug.o : stdio_vasprintf_hook_entry.c
	@echo "Compiling $< [$(TYPE):c debug]"
	@$(CC) -o $(LIBC_OBJS)/stdio_vasprintf_hook_entry_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG stdio_vasprintf_hook_entry.c

$(LIBC_OBJS)/stdio_vasprintf_debug.o : stdio_vasprintf.c
	@echo "Compiling $< [$(TYPE):c debug]"
	@$(CC) -o $(LIBC_OBJS)/stdio_vasprintf_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG stdio_vasprintf.c

$(LIBM_OBJS)/stdio_vasprintf_debug.o : stdio_vasprintf.c
	@echo "Compiling $< [$(TYPE):m debug]"
	@$(CC) -o $(LIBM_OBJS)/stdio_vasprintf_debug.o -c $(CFLAGS) -DIEEE_FLOATING_POINT_SUPPORT -D__USE_MEM_TREES -D__MEM_DEBUG stdio_vasprintf.c

$(LIBC_OBJS)/string_strdup_debug.o : string_strdup.c
	@echo "Compiling $< [$(TYPE):c debug]"
	@$(CC) -o $(LIBC_OBJS)/string_strdup_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG string_strdup.c

$(LIBC_OBJS)/unistd_getcwd_debug.o : unistd_getcwd.c
	@echo "Compiling $< [$(TYPE):c debug]"
	@$(CC) -o $(LIBC_OBJS)/unistd_getcwd_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG unistd_getcwd.c

$(LIBUNIX_OBJS)/unistd_getcwd_debug.o : unistd_getcwd.c
	@echo "Compiling $< [$(TYPE):unix debug]"
	@$(CC) -o $(LIBUNIX_OBJS)/unistd_getcwd_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG -DUNIX_PATH_SEMANTICS unistd_getcwd.c

##############################################################################

$(LIBC_OBJS) :
	$(MAKEDIR) $@

$(LIBC_OBJS)/libc.a : $(LIBC_OBJS) $(foreach file,$(C_LIB),$(LIBC_OBJS)/$(file))
	-$(DELETE) $@
	@$(AR) $@ $(foreach file,$(C_LIB),$(LIBC_OBJS)/$(file))
	$(RANLIB) $@

##############################################################################

$(LIBUNIX_OBJS) :
	$(MAKEDIR) $@

$(LIBUNIX_OBJS)/libunix.a : $(LIBUNIX_OBJS) $(foreach file,$(UNIX_LIB),$(LIBUNIX_OBJS)/$(file))
	-$(DELETE) $@
	@$(AR) $@ $(foreach file,$(UNIX_LIB),$(LIBUNIX_OBJS)/$(file))
	$(RANLIB) $@

##############################################################################

$(LIBM_OBJS) :
	$(MAKEDIR) $@

$(LIBM_OBJS)/libm.a : $(LIBM_OBJS) $(foreach file,$(MATH_LIB_IEEE),$(LIBM_OBJS)/$(file))
	-$(DELETE) $@
	@$(AR) $@ $(foreach file,$(MATH_LIB_IEEE),$(LIBM_OBJS)/$(file))
	$(RANLIB) $@

##############################################################################

$(LIBM881_OBJS) :
	$(MAKEDIR) $@

$(LIBM881_OBJS)/libm881.a : $(LIBM881_OBJS) $(foreach file,$(MATH_LIB_881),$(LIBM881_OBJS)/$(file))
	-$(DELETE) $@
	@$(AR) $@ $(foreach file,$(MATH_LIB_881),$(LIBM881_OBJS)/$(file))
	$(RANLIB) $@

##############################################################################

$(LIBNET_OBJS) :
	$(MAKEDIR) $@

$(LIBNET_OBJS)/libnet.a : $(LIBNET_OBJS) $(foreach file,$(NET_LIB),$(LIBNET_OBJS)/$(file))
	-$(DELETE) $@
	@$(AR) $@ $(foreach file,$(NET_LIB),$(LIBNET_OBJS)/$(file))
	$(RANLIB) $@

##############################################################################

$(LIBDEBUG_OBJS) :
	$(MAKEDIR) $@

$(LIBDEBUG_OBJS)/libdebug.a : $(LIBDEBUG_OBJS) $(foreach file,$(DEBUG_LIB),$(LIBDEBUG_OBJS)/$(file))
	-$(DELETE) $@
	@$(AR) $@ $(foreach file,$(DEBUG_LIB),$(LIBDEBUG_OBJS)/$(file))
	$(RANLIB) $@

##############################################################################

$(LIBAMIGA_OBJS) :
	$(MAKEDIR) $@

$(LIBAMIGA_OBJS)/libamiga.a : $(LIBAMIGA_OBJS) $(foreach file,$(AMIGA_LIB),$(LIBAMIGA_OBJS)/$(file))
	-$(DELETE) $@
	@$(AR) $@ $(foreach file,$(AMIGA_LIB),$(LIBAMIGA_OBJS)/$(file))
	$(RANLIB) $@

##############################################################################

nrcrt0.o : nrcrt0.S
	@echo "Assembling $< [resident]"
	@$(CC) -traditional -o $@ -c nrcrt0.S

nr32crt0.o : nrcrt0.S
	@echo "Assembling $< [resident32]"
	@$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c nrcrt0.S

nbcrt0.o : ncrt0.S
	@echo "Assembling $< [small_data]"
	@$(CC) -traditional -DSMALL_DATA -o $@ -c ncrt0.S

nb32crt0.o : ncrt0.S
	@echo "Assembling $< [small_data32]"
	@$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c ncrt0.S

ncrt0.o : ncrt0.S
	@echo "Assembling $< [large_data]"
	@$(CC) -traditional -o $@ -c ncrt0.S

##############################################################################

CONSTRUCTOR_FILES = \
	amiga_rexxvars.c \
	dirent_closedir.c \
	locale_init_exit.c \
	math_init_exit.c \
	sas_profile.c \
	socket_init_exit.c \
	stdio_file_init.c \
	stdio_init_exit.c \
	stdlib_alloca.c \
	stdlib_arg.c \
	stdlib_malloc.c \
	stdlib_program_name.c \
	stdlib_setenv.c \
	time_clock.c \
	unistd_chdir_exit.c \
	unistd_init_exit.c \
	unistd_timer.c \
	unistd_wildcard_expand.c \
	usergroup_init_exit.c

touch_constructor_files:
	touch $(CONSTRUCTOR_FILES)
