windows-nt/Source/XPSP1/NT/admin/netui/common/doc/codeseg.txt
2020-09-26 16:20:57 +08:00

109 lines
4.8 KiB
Plaintext

**************CODE SEGMENT OPTIMIZATION**********************
6/28/91 Yi-Hsin Sung
---------------------------------------------------
I. How to make use of the code segment optimization
---------------------------------------------------
Finally, there is an easy way to do it! All you have to do is:
1. Decide on which files go into the same segment.
2. Name the segments using macros SEG00, SEG01, ... in local rules.mk
SEG00 = string_0
SEG01 = string_1 (Must be defined before the include)
:
:
!include ..\rules.mk
Note: Don't append _text to the segment names in order to
differentiate between default segment names given by the linker
and segments named by you.
Note: Always start with SEG00 and continue with SEG01, SEG02,...
The rules (in uioptseg.mk and uidepseg.mk) for code
segment optimization will only be included if SEG00 is defined.
Note: The limit is 8 segments per directory in the current uidepseg.mk
and uioptseg.mk. However, it's easy to increase the number of
segments. The method will be described later on.
3. List the files:
All files listed in macros ending with _00 will end up in SEG00.
Similarly, files listed in macros ending with _01 will end up in SEG01.
And so on.
CXXSRC_COMMON_00 = string.cxx strmisc.cxx .....
CXXSRC_COMMON_01 = strchr.cxx .....
CXXSRC_LM21_00 = ....
CXXSRC_LM30_00 = ....
CXXSRC_WIN_00 = ....
CXXSRC_OS2_00 = ....
CXXSRC_DOS_00 = ....
and all the corresponding CSRC macros.
4. Execute "nmake depend" to generate a new depend.mk.
----------------------------------------------------------
II. If you want to use more than 8 segments per directory,
----------------------------------------------------------
1. Get the makefile in $(UI)\common\src
2. There are two new targets in the makefile, uidepend and uiglobal.
"nmake uidepend" will create the files uideprul.mk and uidepseg.mk
which will be included in uidepend.mk. "nmake uiglobal" will create
the files uirules.mk and uioptseg.mk which will be included in
uiglobal.mk as needed.
a. Add a $(SED) at the end of target uidepend
Add a $(SED) at the end of target uiglobal
Look at the last few lines of both targets to write the in-line
SED script.
c. Change the line "echo !IFDEF SEG07" to "echo !IFDEF SEG(# segments)"
If # segments is single digit, append a zero in front.
d. "nmake uidepend uiglobal"
-------------------------------------------------
III. If you don't want code segment optimization,
-------------------------------------------------
NOTHING will be affected by all the changes. As long as you
don't define SEG00, no additional rules will be included.
-------------------------------------------------------------------
IV. If you want to change build rules originally in uiglobal.mk or
rules in uidepend.mk
-------------------------------------------------------------------
master copy automatically generated files included by
___________________________________________________________
uiglobal.src uirules.mk uiglobal.mk
uioptseg.mk
___________________________________________________________
uidepend.src uideprul.mk uidepend.mk
uidepopt.mk
___________________________________________________________
Make changes in uiglobal.src and uidepend.src only.
-------------------------------------------------------------------
V. If you want to define some segments as preload, or ... (something
besides the default attributes)
-------------------------------------------------------------------
1. For libraries in $(UI)\common\lib, there is a .def file associated
with each of them with the same name but with the extension .def.
For example, uistrw.def is associated with uistrw.lib.
The ORIGINAL copy of this .def file is in the directory
which builds the library (the makefile in that directory should
say $(LIBUTIL) ). In the string library case, the .def is in
$(UI)\common\src\string\string. This .def is copied over to
$(UI)\common\lib whenever the library is rebuilt. If there is no
.def associated with the library, then a dummy .def is created in
$(UI)\common\lib. If you want to make some segments in some library
preload or ..., just change the ORIGINAL .def file or if none exist,
create a new one (Make sure you create this file in the directory
that says $(LIBUTIL)).
2. For the segments not in the libraries, you have to add the segment
name and attributes to the project's .def file. The usual stuff!
Look at the makefile in $(UI)\shell\bin for some insight.