# $Id: Libmake,v 1.3 2005/10/14 17:28:53 svitak Exp $ # # Libmake: A Makefile template for creating a new user library. # # SYNOPSIS: It is recommended that each library have its own makefile # and its own subdirectory for clarity of organization. That makefile # should be based on this template makefile. The subdirectory should # contain all of the object files needed to compile the library as well # as all header files, support files, and the script file for loading # the library (e.g. userlib.g). The parent directory (the level above # each library subdirectory) should contain a makefile based on the file # "Usermake". # # PROCEDURE: # 0) Copy this makefile to the subdirectory containing the particular # library you wish to build. # # 1) Edit the makefile to define values for the variables below: # # LIBRARY_NAME # Set this to the desired name of the library. In the example # library provided in Scripts/newlib, the name of the library is # "example". # # FUNCTIONS # Set this to the name of the file containing the list of public # function names in the library. # # Note: The FUNCTIONS file is not necessary in GENESIS 2.x, # because public function names are added automatically when # referenced in the library startup script. Functions not # referenced by an addfunc or object startup command may be # declared as public functions with the hashfunc startup # command. # # If you are converting a 1.4 library to 2.0 you may use # the FUNCTIONS file by following the instructions below. # # STRUCTURES # Set this to the name of the file containing the structure # definitions for objects in the library. # # EXT_HEADER # Set this to the name of the header file containing the # appropriate include references needed to compile the library # files. # # TARGET_OBJ # Set this to the name of the library object which will be # compiled This is normally just the LIBRARY_NAME with 'lib.o' # appended to it. # # OBJECTS # List the user object files (with the .o extension) which will be # a part of the library. # # ---------------------------------------------------------------------- # BEGINNING OF USER-CONFIGURABLE SECTION # ---------------------------------------------------------------------- # Provide values for the variables below. Here is an example of what # the values might be like: # LIBRARY_NAME = example # STARTUP = examplelib.g # STRUCTURES = example_struct.h # EXT_HEADER = example_ext.h # TARGET_OBJ = examplelib.o LIBRARY_NAME = STARTUP = STRUCTURES = EXT_HEADER = TARGET_OBJ = OBJECTS = # If really you want to use a FUNCTIONS file you can by setting it here # and uncommenting the FSYMBOLTAB and FSYMBOLTAB_C lines. In all # likelyhood you will not need the FUNCTIONS file at all. # FUNCTIONS = examplefuncs # FSYMBOLTAB = $(LIBRARY_NAME)_f@.o # FSYMBOLTAB_C = $(LIBRARY_NAME)_f@.c # ---------------------------------------------------------------------- # BEGINNING OF COMMON SECTION # # NOTHING BEYOND THIS POINT SHOULD HAVE TO BE MODIFIED BY THE USER # ---------------------------------------------------------------------- SHELL = /bin/sh # INSTALLDIR is passed in from the Usermake makefile. If you're not using # Usermake, either edit your top level makefile to pass it in or hard # code the GENESIS 2.0 installation directory here. GENESIS_LIB = $(INSTALLDIR)/lib GENESIS_INCLUDE = -I. -I$(INSTALLDIR)/include HEADERS = $(STRUCTURES) default : $(TARGET_OBJ) $(OBJECTS) : $(HEADERS) .c.o: $(CC) $(CFLAGS) $(GENESIS_INCLUDE) $< -c $(LIBRARY_NAME)_g@.c $(LIBRARY_NAME)_g@.h: $(STARTUP) - $(GENESIS_LIB)/code_g $(STARTUP) $(EXT_HEADER) $(LIBRARY_NAME) # make the data structure section of the symbol table $(LIBRARY_NAME)_d@.c : $(STRUCTURES) $(GENESIS_LIB)/code_sym - $(CPP) $(GENESIS_INCLUDE) $(STRUCTURES) > $(TMPDIR)/$(STRUCTURES) - $(GENESIS_LIB)/code_sym $(TMPDIR)/$(STRUCTURES) $(LIBRARY_NAME) \ -I $(EXT_HEADER) -NI -o $(LIBRARY_NAME)_d@.c - rm $(TMPDIR)/$(STRUCTURES) # make the function list section of the symbol table $(LIBRARY_NAME)_f@.c : $(FUNCTIONS) $(GENESIS_LIB)/code_func - $(GENESIS_LIB)/code_func $(FUNCTIONS) $(LIBRARY_NAME) \ > $(LIBRARY_NAME)_f@.c # make the library header function $(LIBRARY_NAME)_l@.c: $(LIBRARY_NAME)_g@.c $(LIBRARY_NAME)_d@.c $(FSYMBOLTAB_C) $(GENESIS_LIB)/code_lib $(OBJECTS) - $(GENESIS_LIB)/code_lib $(LIBRARY_NAME) -o $(LIBRARY_NAME)_l@.c SYMBOLTAB = $(LIBRARY_NAME)_d@.o $(LIBRARY_NAME)_g@.o $(FSYMBOLTAB) $(LIBRARY_NAME)_l@.o $(TARGET_OBJ): $(SYMBOLTAB) $(OBJECTS) ld -r -o $(TARGET_OBJ) $(OBJECTS) $(SYMBOLTAB) clean: -(rm -rf *.o; rm -rf *@.[ch]) # End of Libmake.