# # $Id: GNUmakefile.68k,v 1.107 2010-10-20 13:50:16 obarthel Exp $ # # vim:ts=8 ft=make: # ############################################################################## ############################################ # 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) ############################################################################## include libamiga.obj.gmk include libc.obj.gmk include libdebug.obj.gmk include libm.obj.gmk include libnet.obj.gmk include libunix.obj.gmk AMIGA_LIB := $(sort $(AMIGA_LIB_COMMON) $(AMIGA_LIB_OS3)) C_LIB := $(sort $(C_LIB_COMMON) $(C_LIB_OS3)) UNIX_LIB := $(sort $(UNIX_LIB_COMMON) $(UNIX_LIB_OS3)) 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)