|
|
1.1 ! root 1: This directory contains the -liberty library of free software. ! 2: It is a collection of subroutines used by various GNU programs. ! 3: Current members include: ! 4: ! 5: getopt -- get options from command line ! 6: obstack -- stacks of arbitrarily-sized objects ! 7: strerror -- error message strings corresponding to errno ! 8: strtol -- string-to-long conversion ! 9: strtoul -- string-to-unsigned-long conversion ! 10: ! 11: We expect many of the GNU subroutines that are floating around to ! 12: eventually arrive here. ! 13: ! 14: To build the library, do: ! 15: ! 16: ./configure HOSTTYPE ! 17: make ! 18: ! 19: Please report bugs and fixes to "[email protected]". Thank you. ! 20: ! 21: ADDING A NEW FILE ! 22: ================= ! 23: ! 24: There are two sets of files: Those that are "required" will be ! 25: included in the library for all configurations, while those ! 26: that are "optional" will be included in the library only if "needed." ! 27: ! 28: To add a new required file, edit Makefile to add the source file ! 29: name to CFILES and the object file to REQUIRED_OFILES. ! 30: ! 31: Adding a new optional file is more fragile. As a general rule, ! 32: an optional file will be included in the library if it provides ! 33: functionality missing in the "standard" C library. ! 34: For most hosts, the Makefile automatically figures out which ! 35: functionality is missing by compiling and linking a dummy test ! 36: program, and examining the error messages. ! 37: ! 38: So to get this to work, you should do the following: ! 39: ! 40: 1) Select one function defined in the file you're adding. ! 41: For example, the getcwd function. ! 42: 2) Add that function to the list in the file functions.def. ! 43: 3) The name of the new file must be the same as the function ! 44: you've chosen with the .c suffix added. E.g. getcwd() must be ! 45: defined in getcwd.c. (The file can define other functions as well.) ! 46: 4) In Makefile.in, add the name of the source file (e.g. getcwd.c) ! 47: to CFILES. ! 48: ! 49: The file you've added (e.g. getcwd.c) should compile and work ! 50: on all hosts where it is needed (e.g. not found when linking ! 51: the dummy.c program). It does not have to work or even ! 52: compile on hosts where it is not needed. ! 53: ! 54: HOW THE AUTOMATIC CONFIGURATION WORKS ! 55: ===================================== ! 56: ! 57: The libiberty.a target (in RULE1) depends on $(DO_ALSO). ! 58: For normal configurations, DO_ALSO=needed-list. ! 59: ! 60: So needed-list is first made. The needed-list rule compiles ! 61: dummy.c. Because dummy.c includes functions.def, the ! 62: resulting object file will contain a call to each of the ! 63: optional functions (for simplicity assume each optional file ! 64: defines a single function). This object file will be linked ! 65: against the standard libraries (as defined by using $(CC) ! 66: and various flags). Any function missing will causes the ! 67: linker to emit an error message. We assume the name ! 68: of the missing function(s) are in the error message(s). ! 69: The awk script find-needed.awk has been generated from ! 70: functions.def. It is used to search the linker output ! 71: messages for words that match the functions listed in ! 72: functions.def. The list of functions found is written ! 73: on a single line to the file needed-list. ! 74: ! 75: After needed-list has been generated, the libiberty.a ! 76: target (in RULE1) just calls 'make' recursively. ! 77: It passes the contents of needed-list using the ! 78: definition (expanded) HOST_OFILES="`cat needed-list`". ! 79: It also tells the inferior 'make' to use RULE2. ! 80: ! 81: The inferior 'make' is very conventional: The main ! 82: rule is $(RULE2) (which is libiberty.a). It depends ! 83: on a list of object files: $(REQUIRED_OFILES) $(HOST_OFILES) ! 84: (and $(EXTRA_OFILES), which is usually empty). The superior ! 85: 'make' passes in $(HOST_OFILES); the others are fixed ! 86: in the Makefile. ! 87: ! 88: ADDING A NEW CONFIGURATION ! 89: ========================== ! 90: ! 91: On most hosts you should be able to use the scheme for automatically ! 92: figuring out which files are needed. In that case, you probably ! 93: don't need a special Makefile stub for that configuration. ! 94: ! 95: If the fully automatic scheme doesn't work, you may be able to get ! 96: by with defining EXTRA_OFILES in your Makefile stub. This is ! 97: a list of object file names that should be treated as required ! 98: for this configuration - they will be included in libiberty.a, ! 99: regardless of whatever might be in the C library. Moreover, ! 100: when the dummy.c program is linked, it will be linked with ! 101: $(EXTRA_OFILES). Therefore, if a function in functions.def ! 102: is defined by one of the EXTRA_OFILES, it will not be listed as ! 103: "needed". Thus if your hal9000 host needs a special implementation ! 104: of getcwd, you can just create hal9000-getcwd.c, and define: ! 105: EXTRA_OFILES=hal9000-getcwd.o ! 106: Or if you want to use the libiberty version of strstr(), ! 107: even though there is a version in the C library (it might be ! 108: buggy or slow), just define: ! 109: EXTRA_OFILES=strstr.o ! 110: ! 111: You can create a "manual" host configuration FOO with a file ! 112: config/mh-FOO. In it, the HOST_OFILES macro should explicitly ! 113: list that subset of the optional files that should be in the ! 114: library. You should also set: ! 115: DO_ALSO = ! 116: This overrides all of the magic needed to automatically ! 117: determine which files are "needed." However, keeping that list ! 118: up to date is another matter... ! 119: ! 120: HOW THE MANUAL CONFIGURATION WORKS ! 121: ================================== ! 122: ! 123: This also uses a recursive make, but the superior make ! 124: does not do anything interesting - it just calls the ! 125: inferior make with HOST_OFILES defined as $(HOST_OFILES), ! 126: which is the list you created in your configuration. ! 127: ! 128: You probably don't want to depend on manual configuration, ! 129: because keeping the HOST_OFILES list up-to-date will be a pain.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.