|
|
1.1 root 1: #
2: # Common makefile fragment for use by driverkit-based driver projects.
3: #
4:
5: #
6: # OBJROOT and SYMROOT are overridden by RC tools for builds from read-only
7: # source.
8: #
9: SRCROOT = .
10: OBJROOT = .
11: SYMROOT = .
12: OFILE_DIR = $(OBJROOT)
13: SYM_DIR = $(SYMROOT)/sym
14: PRODUCT_ROOT = $(SYMROOT)
15: TAR = /usr/bin/gnutar
16: RM = /bin/rm
17: ifneq "" "$(wildcard /bin/mkdirs)"
18: MKDIRS = /bin/mkdirs
19: else
20: MKDIRS = /bin/mkdir -p
21: endif
22: #
23: # Macros used for compiling.
24: #
25: DRIVER_CFILES= $(COMMON_CFILES) $(OTHER_CFILES)
26: DRIVER_MFILES= $(COMMON_MFILES) $(OTHER_MFILES)
27:
28: OFILES= $(DRIVER_CFILES:.c=.o) $(DRIVER_MFILES:.m=.o) $(OTHER_OFILES) $(INSTANCE_VAR).o
29:
30: #
31: # For installsrc and tags.
32: #
33: COMMONSOURCE= $(DRIVER_CFILES) $(DRIVER_MFILES) \
34: $(COMMON_PUBLIC_HFILES) $(COMMON_PRIVATE_HFILES) $(OTHER_SOURCE)
35:
36:
37: VPATH = $(PRODUCT_ROOT):$(OFILE_DIR):$(SYM_DIR):$(OPT_VPATH)
38:
39: all tool:: project tags always
40:
41: #
42: # For building kern-loadable modules.
43: #
44: relocrelease: $(SYMROOT) $(OBJROOT) always
45: @echo '******** Building $(BUILD_NAME) ********'; \
46: if [ -n "$(ARCHS)" ]; then \
47: my_rc_cflags=""; \
48: for i in "$(ARCHS)"; do \
49: my_rc_cflags="$$my_rc_cflags -arch $$i"; \
50: done; \
51: else \
52: my_rc_cflags=$(RC_CFLAGS); \
53: fi; \
54: $(MAKE) $(BUILD_NAME) \
55: "OBJROOT=$(OBJROOT)" \
56: "SYMROOT=$(SYMROOT)" \
57: "PRODUCT_ROOT=$(PRODUCT_ROOT)" \
58: "OFILE_DIR=$(OFILE_DIR)/relocrelease" \
59: "SYM_DIR=$(SYM_DIR)" \
60: "LIBS=$(RELEASE_KERN_LIBS)" \
61: "LDFLAGS= $(KL_RELEASE_FLAGS) $$my_rc_cflags" \
62: "EXTRA_CFLAGS=$(RELEASE_CFLAGS) $$my_rc_cflags $(OTHER_CFLAGS)"
63:
64: #
65: # For building debug versions of kern-loadable modules.
66: #
67: relocdebug: $(SYMROOT) $(OBJROOT) always
68: @echo '******** Building debug $(BUILD_NAME) ********'; \
69: if [ -n "$(ARCHS)" ]; then \
70: my_rc_cflags=""; \
71: for i in "$(ARCHS)"; do \
72: my_rc_cflags="$$my_rc_cflags -arch $$i"; \
73: done; \
74: else \
75: my_rc_cflags=$(RC_CFLAGS); \
76: fi; \
77: $(MAKE) $(BUILD_NAME) \
78: "OBJROOT=$(OBJROOT)" \
79: "SYMROOT=$(SYMROOT)" \
80: "PRODUCT_ROOT=$(PRODUCT_ROOT)" \
81: "OFILE_DIR=$(OFILE_DIR)/relocdebug" \
82: "SYM_DIR=$(SYM_DIR)" \
83: "LIBS=$(DEBUG_KERN_LIBS)" \
84: "LDFLAGS= $(KL_DEBUG_FLAGS) $$my_rc_cflags" \
85: "EXTRA_CFLAGS=$(DEBUG_CFLAGS) $$my_rc_cflags $(OTHER_CFLAGS)"
86:
87: project: relocrelease
88:
89: debug: relocdebug
90:
91: installsrc:: SRCROOT
92: @($(MAKE) copy "DEST=$(SRCROOT)")
93:
94: copy:: DEST $(DEST)
95: $(TAR) cf - $(COMMONSOURCE) | (cd $(DEST); $(TAR) xpBf -)
96: chown -Rf root.wheel $(DEST)
97:
98: installhdrs:: DSTROOT $(DSTROOT)$(PUBLIC_INSTALL_HDR_DIR)
99: @if [ -n "${COMMON_PUBLIC_HFILES}" ]; \
100: then \
101: install -c -m 644 $(COMMON_PUBLIC_HFILES) \
102: $(DSTROOT)$(PUBLIC_INSTALL_HDR_DIR); \
103: fi
104:
105: $(OFILE_DIR) $(PRODUCT_ROOT) $(DSTROOT)$(PUBLIC_INSTALL_HDR_DIR) \
106: $(OBJROOT) $(SRCROOT) $(SYMROOT) $(DEST):
107: @$(MKDIRS) $@
108:
109: tags: $(OBJROOT) always
110: $(RM) -f tags
111: ctags -d -o $(OBJROOT)/tags $(COMMONSOURCE)
112:
113: always:
114:
115: depend::
116:
117: clean:
118: $(RM) -rf $(OFILE_DIR)/*relocdebug $(OFILE_DIR)/*relocrelease \
119: $(BUILD_NAME) $(SYM_DIR) *.d Makedep *~ tags \
120: $(OTHER_CLEAN_FILES)
121:
122: #
123: # Build kern-loadable relocatable.
124: # Main Makefile Must define:
125: # SERVER_NAME
126: # INSTANCE_VAR
127: #
128: # May define:
129: # OTHER_DEPENDS (typically which will force a mig run).
130: #
131: $(BUILD_NAME): $(PRODUCT_ROOT) $(OFILE_DIR) $(OFILES) \
132: $(LOAD_COMMAND_FILE) $(UNLOAD_COMMAND_FILE) $(OTHER_DEPENDS)
133: $(KL_LD) $(LDFLAGS) -o $(PRODUCT_ROOT)/$@ $(OFILES) $(LIBS) \
134: -n $(SERVER_NAME) $(LOAD_COMMANDS) $(UNLOAD_COMMANDS) -i $(INSTANCE_VAR)
135:
136: #
137: # Make the global instance
138: #
139: $(INSTANCE_VAR).m:
140: @echo Creating $(INSTANCE_VAR).m; \
141: echo "#import <objc/Object.h>\n#import <kernserv/kern_server_types.h>\n\nkern_server_t $(INSTANCE_VAR);\n\n@interface $(SERVER_NAME)KernelServerInstance : Object\n{}\n+ (kern_server_t *)kernelServerInstance;\n@end\n\n@implementation $(SERVER_NAME)KernelServerInstance\n+ (kern_server_t *)kernelServerInstance\n{\n\treturn &$(INSTANCE_VAR);\n}\n@end\n" > $(OFILE_DIR)/$@
142:
143: strip::
144: @echo $(STRIP) $(RELOCATABLE_STRIP_OPTS) \
145: $(DSTROOT)$(PARENT_DIR)/$(NAME); \
146: $(STRIP) $(RELOCATABLE_STRIP_OPTS) \
147: $(DSTROOT)$(PARENT_DIR)/$(NAME)
148:
149: #
150: # The additional -I here picks up possible header files which are
151: # created in the build directory (say, by MIG).
152: #
153: .c.o .m.o:
154: $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -I$(OFILE_DIR) \
155: -o $(OFILE_DIR)/$@ -dependency-file $(OFILE_DIR)/$(*F).d
156:
157: SRCROOT DSTROOT DEST:
158: @if [ ! -n "${$@}" ]; \
159: then \
160: echo Must define $@; \
161: exit 1; \
162: fi
163:
164: -include Makedep
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.