% Copyright 1996-2000 Critical Mass, Inc. All rights reserved. % See file COPYRIGHT-CMASS for details. % % Standard configuration file for FreeBSD 3.x with ELF object files % %-------------------------------------------------- compilation environment --- %M3_PROFILING = TRUE % set by cm3 since 5.1.2 (-profile option) %M3_PROFILING = FALSE readonly TARGET = "PPC_DARWIN" % code generation target if M3_PROFILING readonly BUILD_DIR = TARGET & "p" % code generation target else readonly BUILD_DIR = TARGET % directory for results end readonly OS_TYPE = "POSIX" % { "WIN32" or "POSIX" } readonly WORD_SIZE = "32BITS" % { "32BITS" or "64BITS" } readonly GNU_PLATFORM = "powerpc-apple-darwin6.3" % "cpu-vendor-os" string for GNU %readonly INSTALL_KEY = BEGIN_CONFIG % "What is your installation key?" % 14 %-- user specified key %END_CONFIG readonly NAMING_CONVENTIONS = "0" % object files libraries % 0=Unix => .o .io .mo libXX.a % 1=Unix with a grumpy C compiler => .o _i.o _m.o libXX.a % 2=Windows NT or Windows 95 => .obj .io .mo XX.lib % %-------------------------------------------------- default compile options --- % "set_config_options" is called before starting the compilation. It should % be used to provide system-wide default options. proc set_config_options () is m3_option ("-why") %-- produce a listing that explains what's happening and why m3_debug (TRUE) %-- produce object code with debugging symbols M3_OPTIONS += "-w1" %-- produce "level 1" warnings end %--------------------------------------------------------- Reactor defaults --- % The first time a user runs Reactor, it will configure itself to use % the executables defined below. %INITIAL_REACTOR_BROWSER = BEGIN_CONFIG % "What should be the default World-Wide Web browser for new Reactor users?" % 0 "netscape" % 6 "/usr/local/bin" "netscape" % 6 "/usr/local/netscape/bin" "netscape" % 6 "/usr/local/netscape/bin" "netscape-3" % 6 "/usr/local/netscape/bin" "netscape-2" % 6 "/usr/local/netscape" "netscape" % 6 "/usr/local/mosaic" "mosaic" % 6 "/usr/local/moasic" "Xmosaic" %END_CONFIG % A World-Wide Web browser. Reactor passes it an initial URL % its first command-line argument. INITIAL_REACTOR_EDITOR = "vi" % A text editor. Reactor passes it " +" on the % command-line when it wants to edit initially positioned % at . %------------------------------------------------------------- export paths --- % During the installation, destination directories that do not exists % will be created. You need the necessary permissions to do so; otherwise, % the installation will fail, but can be restarted after you have % fixed the permissions. PREFIX = @PREFIX@ INSTALL_ROOT = @INSTALL_ROOT@ BIN_INSTALL = INSTALL_ROOT & "/bin" % executables if M3_PROFILING LIB_INSTALL = INSTALL_ROOT & "/libp" % libraries else LIB_INSTALL = INSTALL_ROOT & "/lib" % libraries end PKG_INSTALL = INSTALL_ROOT & "/pkg" % packages DOC_INSTALL = INSTALL_ROOT & "/doc" % documents EMACS_INSTALL = INSTALL_ROOT & "/elisp" % emacs lisp code MAN_INSTALL = INSTALL_ROOT & "/man" % man pages HTML_INSTALL = INSTALL_ROOT & "/www" % public hypertext % On some systems (e.g. AFS) you must install public files in a different % place from where you use them. If that is the case for your system, % specify the "use" location here, otherwise leave them alone. % USE_ROOT = @USE_ROOT@ BIN_USE = USE_ROOT & "/bin" % executables LIB_USE = USE_ROOT & "/lib" % libraries PKG_USE = INSTALL_ROOT & "/pkg" % packages readonly INSTALL_IMPLS = TRUE % TRUE % => save all source files during the install % => makes debugging easier and browsing more fruitful % FALSE % => save only the exported interfaces and templates % => makes the installed system slightly smaller. %------------------------------------------------ external system libraries --- % SYSTEM_LIBS provides a mapping from Modula-3 names for the common % external libraries to site-dependent information about how they % are accessed. If SYSTEM_LIBS{x} is defined it should be a list % of linker arguments that are used when linking against that library. % If SYSTEM_LIBS{x} is not defined, the Modula-3 system will assume % that the library is not available. SYSTEM_LIBS = { "LIBC" : [ "-lm" ], % "LEX-YACC" : [ "-L/usr/lib", "-ll" ], % "FLEX-BISON" : [ "-L/usr/lib", "-lfl" ], "POSTGRES95" : [ "-L/usr/local/pgsql/lib", "-lpq" ], "OPENGL" : [ "-L/usr/X11R6/lib", "-lGLU", "-lGL", "-lXext" ], % FIXME: What is this? PKG_USE & "/pgodbc/FreeBSD3/libpgodbc.a" ], "MOTIF" : [ "-L/usr/X11R6/lib", "-lXm" ], "X11" : [ "-L/usr/X11R6/lib", "-lXaw", "-lXmu", "-lXext", "-lXt", "-lSM", "-lICE", "-lX11" ], "TCP" : [ ] } % SYSTEM_LIBORDER defines the order in which SYSTEM_LIBS should be % scanned by the linker. SYSTEM_LIBORDER = [ "OPENGL", "DECPEX", "MOTIF", "X11", "TCP", "ODBC", "POSTGRES95", "FLEX-BISON", "LEX-YACC", "LIBC" ] %---------------------------------------------------------- system programs --- readonly SYSTEM_CC = "gcc" readonly SYSTEM_AR = "ar" readonly SYSTEM_RANLIB = "ranlib" readonly SYSTEM_ASM = "as" %--------------------------------------------------------- Modula-3 backend --- % For platforms without an integrated backend, "m3_backend" is called to % translate Modula-3 intermediate code to object code. readonly m3back = "@" & BIN_USE & "/cm3cg" proc m3_backend (source, object, optimize, debug) is local args = [ "-quiet", source, "-o", object, "-fPIC" ] if optimize args += "-O" end if debug args += "-g" end if M3_PROFILING args += "-p" end return try_exec (m3back, args) end M3_BACKEND_MODE = "3" % -- defines how the frontend, backend, and assembler interact % "0" -- don't call m3_backend, M3CG produces object code % "1" -- don't call m3_backend, M3CG produces assembly code % "2" -- call m3_backend, it produces object code % "3" -- call m3_backend, it produces assembly code %--------------------------------------------------------------- C compiler --- % "compile_c" is called to compile C source files. Note that this function % is only called if your program or library explicitly includes C source % code, the system distributed by Critical Mass does not. proc compile_c (source, object, options, optimize, debug) is local args = [ "-fPIC", options ] if optimize args += "-O" end if debug args += "-g" end if M3_PROFILING args += "-pg" end return try_exec ("@" & SYSTEM_CC, args, "-c", source) end %---------------------------------------------------------------- assembler --- % "assemble" is called to assemble .s or .asm files. Note that this function % is only called if your program or library explicitly includes assembly source % code, the system distributed by Critical Mass does not. proc assemble (source, object) is return try_exec ("@" & SYSTEM_ASM, source, "-o", object) end %--------------------------------------------------------- library creation --- % "make_lib" is called to combine a collection of object modules into % a library. proc make_lib (lib, options, objects, imported_libs, shared) is local vmaj = "5" local vmin = "2" local version = vmaj & "." & vmin local ret_code = 0 local lib_a = format ("lib%s.a", lib) local lib_so = format ("lib%s.dylib", lib) local lib_sox = format ("lib%s.%s.dylib", lib, vmaj) local lib_soxx = format ("lib%s.%s.dylib", lib, version) local lib_pn = PREFIX & "/" & lib_soxx % first, build the non-shared library ret_code = try_exec ("@" & SYSTEM_AR, "cru", lib_a, objects) if not equal (ret_code, 0) return ret_code end ret_code = try_exec ("@" & SYSTEM_RANLIB, lib_a) if not equal (ret_code, 0) return ret_code end if shared % build the shared library ret_code = try_exec ("@libtool -dynamic -flat_namespace", "-undefined suppress -compatibility_version", vmaj, "-current_version", version, "-install_name", lib_pn, "-o", lib_soxx, objects, "-lcc_dynamic") if not equal (ret_code, 0) delete_file (lib_a) return ret_code end % create the version aliases link_file(lib_soxx, lib_sox) link_file(lib_sox, lib_so) % finally, make sure the shared library stuff gets installed properly install_derived (lib_soxx) install_derived_link (lib_soxx, lib_sox) install_derived_link (lib_sox, lib_so) install_link_to_derived (lib_soxx, LIB_INSTALL) install_link_to_derived (lib_sox, LIB_INSTALL) install_link_to_derived (lib_so, LIB_INSTALL) else delete_file (lib_so) delete_file (lib_sox) delete_file (lib_soxx) end return 0 end %------------------------------------------------------------------- % "skip_lib" is called when the compiler decides it doesn't need to % call "make_lib", but it wants to discover the names of the derived % files that should be deleted or shipped. proc skip_lib (lib, shared) is local vmaj = "5" local vmin = "2" local version = vmaj & "." & vmin local ret_code = 0 local lib_a = format ("lib%s.a", lib) local lib_so = format ("lib%s.dylib", lib) local lib_sox = format ("lib%s.%s.dylib", lib, vmaj) local lib_soxx = format ("lib%s.%s.dylib", lib, version) if shared % make sure the shared library stuff gets installed properly install_derived (lib_soxx) install_derived (lib_sox) install_derived (lib_so) install_link_to_derived (lib_soxx, LIB_INSTALL) install_link_to_derived (lib_sox, LIB_INSTALL) install_link_to_derived (lib_so, LIB_INSTALL) else delete_file (lib_so) delete_file (lib_sox) delete_file (lib_soxx) end return 0 return 0 end %------------------------------------------------------------------- linker --- % "m3_link" is called to produce a final executable. %--- "-pdb:none" enables the use of windbg with the resulting executable. proc m3_link (prog, options, objects, imported_libs, shared) is local args = [] if M3_PROFILING args += "-pg" end args += [ "-o", prog, "-fPIC", options, objects, imported_libs ] args += [ "-shared-libgcc" ] return try_exec ("@" & SYSTEM_CC, args) end %------------------------------------------------------------------- % "skip_link" is called when the compiler decides it doesn't need to % call "m3_link", but it wants to discover the names of the derived % files that should be deleted or shipped. proc skip_link (prog, shared) is return 0 end %------------------------------------------------------------ misc. options --- % Note, most of these options can be set from the command line. Otherwise, % they can be set "permanently" here in the config file or in as needed % in user's m3makefiles. M3_FRONT_FLAGS = [ ] % --- internal configuration options passed directly to the Modula-3 front-end M3_OPTIONS = [ ] % --- user options passed directly to the Modula-3 front-end % M3_KEEP_FILES = TRUE % --- keep intermediate and temporary files % M3_WINDOWS_GUI = TRUE % --- generate a Windows GUI subsystem program instead of a console one. % M3_COVERAGE = TRUE % --- compile & link with coverage options M3_COVERAGE_LIB = LIB_USE & "/report_coverage.o" % --- library linked in programs compiled with "-Z" coverage option % M3_SPLIT_LIBNAMES = TRUE % --- split library names and pass -L/-l arguments to the linker M3_SPLIT_LIBNAMES_IF_SHARED = TRUE % --- split library names and pass -L/-l arguments to the linker if linking % dynamically, pass full library names else % (assumes M3_SPLIT_LIBNAMES = FALSE) % M3_SHARED_LIB_ARG = "-Wl,-R" % --- pass "-R" flags to the linker too... % M3_BOOTSTRAP = TRUE % --- generate bootstrap code (assembly) instead of finaly object code % M3_COMPILE_ONCE = TRUE % --- don't recompile code to improve opaque object references % SYS_HAS_LOADER = TRUE % --- generate a loader info file with objects, libraries and timestamps % M3_SKIP_LINK = TRUE % --- skip the final link for programs, presumably to use the loader instead % M3_MAIN_IN_C = TRUE % --- generate the Modula-3 main program as C code X11_WITH_SHARED_MEM = TRUE % --- X11 libraries include the shared memory extensions (XShm...) %M3_NEED_STANDALONE_LINKS = TRUE % --- linker is broken and we need to build a directory of symbolic % links pointing to the non-shared libraries. %-------------------------------------------------------------------- emacs --- % If you have emacs and want to compile ".el" files to ".elc" files, % fill in the function below. Otherwise, comment out or delete the % entire function. Note, the distributed code assumes gnuemacs version 19 % or later. readonly proc emacs_compile (el) is exec ("emacs -batch -f batch-byte-compile", el) end %------------------------------------------------------------- GNU variants --- % The two large pieces of GNU software used by the Modula-3 system % gcc(=m3cc) and gdb(=m3gdb) often require slightly different C compilers % or flags. They are specified here. Note that they may be overridden % from the m3build command line. % % To use the GNU defaults for CC and CFLAGS, specify "*". % GNU_CC = "gcc" GNU_CFLAGS = "-g" GNU_MAKE = "make"