From edb51b569f41f47215b0db68aa9ec2a0894362ef Mon Sep 17 00:00:00 2001 From: "Clifford T. Matthews" Date: Sat, 20 Jun 2009 07:27:44 -0600 Subject: [PATCH] GNU Build system appears to work for hardcoded SDL front end and SDL sound. --- src/Makefile.am | 76 +++++++++++++++++++++++++++++++++---- src/TODO | 20 ++++++++-- src/config/os/msdos/msdos.c | 4 +- src/configure.ac | 31 +++++++++++++-- src/error.c | 4 +- src/include/rsys/version.h | 1 - src/main.c | 4 +- 7 files changed, 119 insertions(+), 21 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 3fe26b4..80463a9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,7 +2,7 @@ bin_PROGRAMS = executor -noinst_PROGRAMS = map_to_c mkseedtables mkultable mksspairtable +noinst_PROGRAMS = map_to_c mkseedtables mkultable mksspairtable opfind ctl_bitmap_c_files = arrow_up_active.c arrow_up_inactive.c \ arrow_down_active.c arrow_down_inactive.c \ @@ -33,6 +33,10 @@ mkultable_SOURCES = mkultable.c mksspairtable_SOURCES = mksspairtable.c +opfind_SOURCES = config/arch/i386/opfind.c + +opfind_CPPFLAGS = -DCOMPILE_FOR_BUILD $(AM_CPPFLAGS) + seedtables.c: mkseedtables ./mkseedtables > $@ @@ -85,7 +89,7 @@ qd_sources = qBit.c qCConv.c qCGrafPort.c qCRegular.c qColor.c qColorMgr.c \ qColorutil.c qCursor.c qGrafport.c qIMIV.c qIMV.c qIMVxfer.c \ qMisc.c qPaletteMgr.c qPen.c qPicstuff.c qPicture.c \ qPixMapConv.c qPoint.c qPoly.c qRect.c qRegion.c qRegular.c \ - qScale.c qStandard.c qStdArc.c qStdBits.c qStdLine.cq qStdOval.c \ + qScale.c qStandard.c qStdArc.c qStdBits.c qStdLine.c qStdOval.c \ qStdPic.c qStdPoly.c qStdRRect.c qStdRect.c qStdRgn.c \ qStdText.c qText.c qGWorld.c qGDevice.c qIMVI.c qHooks.c \ xdata.c xdblt.c rawpatblt.c rawsrcblt.c dirtyrect.c srcblt.c \ @@ -121,14 +125,70 @@ misc_sources = desk.c device.c disk.c diskinit.c dump.c trapname.c font.c \ splash.c icon.c redrawscreen.c ini.c checkpoint.c qt.c cleanup.c \ paramline.c fauxdbm.c custom.c commtool.c cfm.c local_charset.c pef_hash.c \ interfacelib.c mixed_mode.c suffix_maps.c appearance.c lockrange.c \ - emutrap.c emutraptables.c emustubs.c + emutrap.c emutraptables.c emustubs.c unix_like.c parse.y check_structs.c \ + executor.c mkvol/mkvol.c crc.c -executor_SOURCES = $(ctl_sources) $(dial_sources) $(file_sources) \ - $(hfs_sources) $(list_sources) $(menu_sources) \ - $(print_sources) $(qd_sources) $(res_sources) \ - $(te_sources) $(wind_sources) $(ae_sources) \ - $(sound_sources) $(num_sources) $(misc_sources) +front_end_sdl_sources = config/front-ends/sdl/SDL_bmp.c \ + config/front-ends/sdl/sdlevents.c \ + config/front-ends/sdl/sdl_mem.c \ + config/front-ends/sdl/sdlquit.c \ + config/front-ends/sdl/sdlscrap.c \ + config/front-ends/sdl/sdlwin.c \ + config/front-ends/sdl/sdlwm.c \ + config/front-ends/sdl/sdlX.c \ + config/front-ends/sdl/syswm_map.c \ + config/front-ends/sdl/winmain.c +sound_sdl_sources = config/sound/sdl/sdl-sound.c +os_linux_sources = config/os/linux/linux.c \ + config/os/linux/linux_except.c \ + config/os/linux/lowglobals-mem.c + +arch_i386_sources = config/arch/i386/x86patblt.S \ + config/arch/i386/x86srcblt.S \ + config/arch/i386/xdstubtables.c \ + config/arch/i386/sbstubtables.c \ + config/arch/i386/i386.c + +x86patblt.$(OBJEXT): pat-blitters.s + +x86srcblt.$(OBJEXT): src-blitters.s + +pat-blitters-stamp pat-blitters.h pat-blitters.s: \ + config/arch/i386/opfind.c config/arch/i386/opfind.h \ + config/arch/i386/metaasm.pl config/arch/i386/pat-blitters.meta + $(srcdir)/config/arch/i386/metaasm.pl $(METAASM_ARGS)\ + $(srcdir)/config/arch/i386/pat-blitters.meta\ + pat-blitters.s pat-blitters.h\ + config/arch/i386/opfind.c + $(RM) opfind asmsamples.h + touch pat-blitters-stamp + +# We have src-blitters-stamp depend on pat-blitters-stamp so we don't +# try to do two metaasm's at once. They would fight over `opfind'. +src-blitters-stamp src-blitters.h src-blitters.s: \ + config/arch/i386/opfind.c config/arch/i386/opfind.h \ + config/arch/i386/metaasm.pl \ + config/arch/i386/src-blitters.meta \ + config/arch/i386/src-shift.meta \ + config/arch/i386/src-noshift.meta \ + config/arch/i386/src-shift-fgbk.meta \ + config/arch/i386/src-noshift-fgbk.meta \ + pat-blitters-stamp config/arch/i386/src-blitters-core.meta + $(srcdir)/config/arch/i386/metaasm.pl -define DST_SEG= $(METAASM_ARGS)\ + $(srcdir)/config/arch/i386/src-blitters.meta\ + src-blitters.s src-blitters.h\ + config/arch/i386/opfind.c + $(RM) opfind + touch src-blitters-stamp + +executor_SOURCES = $(ctl_sources) $(dial_sources) $(file_sources) \ + $(hfs_sources) $(list_sources) $(menu_sources) \ + $(print_sources) $(qd_sources) $(res_sources) \ + $(te_sources) $(wind_sources) $(ae_sources) \ + $(sound_sources) $(num_sources) $(misc_sources) \ + $(front_end_sdl_sources) $(sound_sdl_sources) \ + $(os_linux_sources) $(arch_i386_sources) AM_CPPFLAGS=-I$(srcdir)/include -I$(srcdir)/config/front-ends/$(front_end) -I$(srcdir)/config/os/$(host_os) -I$(srcdir)/config/arch/$(host_cpu) diff --git a/src/TODO b/src/TODO index d892dea..d01aa1a 100644 --- a/src/TODO +++ b/src/TODO @@ -1,7 +1,21 @@ - Make it so people can select the front-end and the sound, but that - we default to SDL if it's available + GNU build fixes - Make it so if we don't find libsyn68k, we die properly + Make it so people can select the front-end and the + sound, but that we default to SDL if it's available + + Make it so if we don't find libsyn68k, we die properly + (unless we're on a 68k) + + See if there's a more elegant way to identify the build + parameters than our current per-target override using + -DCOMPILE_FOR_BUILD + + See if there's a more elegant solution to the blitters + code (can we nuke the config/arch/i386 prefixes in the + dependencies? should we make it so both source and pattern + blitters can be done in parallel? + + test parallel builds CToPascalCall -- look hard for arguments that sometimes take a pointer and sometimes take a long diff --git a/src/config/os/msdos/msdos.c b/src/config/os/msdos/msdos.c index 1760934..4989aa7 100644 --- a/src/config/os/msdos/msdos.c +++ b/src/config/os/msdos/msdos.c @@ -162,8 +162,8 @@ os_init (void) void msdos_print_info (void) { - printf ("This is %s, compiled %s.\n", - ROMlib_executor_full_name, ROMlib_executor_build_time); + printf ("This is %s.\n", + ROMlib_executor_full_name); /* Print out CPU type. */ if (arch_type == ARCH_TYPE_I386) diff --git a/src/configure.ac b/src/configure.ac index f388087..cd00922 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -12,6 +12,7 @@ AC_PROG_CC AM_PROG_CC_C_O AC_PROG_RANLIB AM_PROG_AS +AC_PROG_YACC AC_CHECK_PROG([PERL], [perl], [perl]) AC_ARG_VAR([PERL], [perl for generating blitters]) @@ -22,23 +23,47 @@ AC_SYS_LARGEFILE AC_CHECK_LIB(syn68k, initialize_68k_emulator) -# TODO: may not want to look for SDL if people have chosen an alternate -# front-end. +# Right now we blindly look for the libraries we need for the SDL Linux +# port since that's the first one I'll get going with the this file. -AC_CHECK_LIB(sdl, SDL_Init) +AC_CHECK_LIB(SDL, SDL_Init) +AC_CHECK_LIB(db, __db_ndbm_open) +AC_CHECK_LIB(X11, XInitThreads) +AC_CHECK_LIB(m, pow) AC_CONFIG_FILES([Makefile]) + +# Normalize to our old names + +case ${build_cpu} in + i[[3456]]86) + build_cpu=i386 + ;; +esac + +case ${host_cpu} in + i[[3456]]86) + host_cpu=i386 + ;; +esac + case ${build_os} in darwin*) build_os=macosx ;; + linux*) + build_os=linux + ;; esac case ${host_os} in darwin*) host_os=macosx ;; + linux*) + host_os=linux + ;; esac # This is a temporary cheat that forces us to use SDL. diff --git a/src/error.c b/src/error.c index 2cae49a..b56f5c5 100644 --- a/src/error.c +++ b/src/error.c @@ -278,11 +278,11 @@ err_vprintf (const char *fmt, va_list ap) if (!beenhere_p) { fprintf (fp, - "This is %s, compiled %s.\n" + "This is %s.\n" "Using %u.%02u MB for applzone, " "%u.%02u MB for syszone, %u.%02u MB for stack\n" "Approximate command line: %s\n", - ROMlib_executor_full_name, ROMlib_executor_build_time, + ROMlib_executor_full_name, ROMlib_applzone_size / MB, (ROMlib_applzone_size % MB) * 100 / MB, ROMlib_syszone_size / MB, diff --git a/src/include/rsys/version.h b/src/include/rsys/version.h index 41f4070..c0f7d6e 100644 --- a/src/include/rsys/version.h +++ b/src/include/rsys/version.h @@ -23,7 +23,6 @@ extern const char ROMlib_executor_version[]; extern char *ROMlib_executor_full_name; -extern const char ROMlib_executor_build_time[]; #define PLATFORM_MOD 10 /* last decimal digit of serial number is platform */ #define COMPOSITE_MOD 100 /* 2nd to last digit is price class */ diff --git a/src/main.c b/src/main.c index f9013ab..3d58ef3 100644 --- a/src/main.c +++ b/src/main.c @@ -1052,8 +1052,8 @@ parse_drive_opt (const char *opt_name, const char *opt_value) static void print_info (void) { - printf ("This is %s, compiled %s.\n", - ROMlib_executor_full_name, ROMlib_executor_build_time); + printf ("This is %s, compiled.\n", + ROMlib_executor_full_name); #if defined (i386) /* Print out CPU type. */