MAXBOOTSIZE = 458240␊ |
␊ |
␊ |
#␊ |
# Strings used to retrieve the start location for the Symbols.dylib module␊ |
#␊ |
SYMBOLS_MODULE = Symbols.dylib␊ |
SYMBOL_START= _symbols_module_start␊ |
SYMBOL_ADDR = $(shell printf "%d" 0x`nm -s __DATA __data $(SYMROOT)/boot.sys | grep " $(SYMBOL_START)$$" | cut -f 1 -d " "`)␊ |
DATA_OFFSET = $(shell otool -l $(SYMROOT)/boot.sys | grep __data -A 4 | grep __DATA -A 3 | tail -n 1 | cut -f 6 -d " ")␊ |
DATA_ADDR = $(shell printf "%d" `otool -l $(SYMROOT)/boot.sys | grep __data -A 4 | grep __DATA -A 3 | head -n 2 | tail -n 1 | cut -f 8 -d " "`)␊ |
PATCH_ADDR = $(shell echo ${SYMBOL_ADDR}-${DATA_ADDR}+${DATA_OFFSET} | bc)␊ |
␊ |
␊ |
optionrom: CFLAGS += -DOPTION_ROM␊ |
␊ |
all embedtheme optionrom: $(DIRS_NEEDED) boot␊ |
␊ |
boot: machOconv embedded.h $(OBJS) $(LIBDEP)␊ |
boot: embedded.h $(OBJS) $(LIBDEP)␊ |
␉$(LD) -static -Wl,-preload -Wl,-segaddr,__INIT,$(BOOT2ADDR) \␊ |
␉ -nostdlib -arch i386 -Wl,-segalign,20 \␊ |
␉␉-o $(SYMROOT)/boot.sys $(filter %.o,$^) $(LIBS) -lcc_kext␊ |
␉machOconv $(SYMROOT)/boot.sys $(SYMROOT)/boot␊ |
␉␊ |
␉@make embed_symbols␉␉# this is done in a sub process after boot.sys exists so the strings are populated correctly␊ |
␊ |
␉size $(SYMROOT)/boot.sys␊ |
␉ls -l $(SYMROOT)/boot␊ |
␉@( size=`ls -l $(SYMROOT)/boot | awk '{ print $$5}'` ; \␊ |
|
␉ exit 1;\␊ |
␉ fi)␊ |
␊ |
embed_symbols: machOconv Symbols.dylib␊ |
␉@echo ================= Embedding Symbols.dylib =================␊ |
␉machOconv $(SYMROOT)/boot.sys $(SYMROOT)/boot␊ |
␉stat -f%z $(SYMROOT)/boot | perl -ane "print pack('V',@F[0]);" | dd conv=notrunc of=${SYMROOT}/boot.sys bs=1 count=4 seek=$(PATCH_ADDR)␊ |
␊ |
␉machOconv $(SYMROOT)/boot.sys $(SYMROOT)/boot␊ |
␉dd if=${SYMROOT}/${SYMBOLS_MODULE} of=${SYMROOT}/boot bs=1 seek=`stat -f%z $(SYMROOT)/boot`␊ |
␉${RM} $(SYMROOT)/${SYMBOLS_MODULE}␊ |
␉␊ |
␊ |
␊ |
prompt.o: vers.h␊ |
vers.h:␊ |
␉@echo "#define I386BOOT_VERSION \"5.0.132\"" > $(SYMROOT)/vers.h␊ |
|
embedded.h:␊ |
␉@cd $(SYMROOT)/../../doc && xxd -i BootHelp.txt > $(SYMROOT)/embedded.h␊ |
␊ |
Symbols.dylib: Symbols.o␊ |
␉@echo ================= Compiling ${SYMBOLS_MODULE} =================␊ |
␉@ld -arch i386 \␊ |
␉-undefined dynamic_lookup \␊ |
␉-alias _Symbols_start start \␊ |
␉-dylib -read_only_relocs suppress \␊ |
␉-S -x -dead_strip_dylibs \␊ |
␉-no_uuid \␊ |
␉-bind_at_load \␊ |
␉-current_version 1.0.0 \␊ |
␉-compatibility_version 1.0.0 \␊ |
␉-final_output Symbols \␊ |
␉${OBJROOT}/Symbols.o \␊ |
␉-o $(SYMROOT)/${SYMBOLS_MODULE} ␊ |
␊ |
␉@size $(SYMROOT)/${SYMBOLS_MODULE}␊ |
␊ |
Symbols.o:␊ |
␉@rm -rf $(SYMROOT)/Symbols.h␊ |
␉@echo "typedef struct {" >> $(SYMROOT)/Symbols.h␊ |
␉@echo "␉char*␉symbol;" >> $(SYMROOT)/Symbols.h␊ |
␉@echo "␉unsigned int␉addr;" >> $(SYMROOT)/Symbols.h␊ |
␉@echo "} symbol_t;" >> $(SYMROOT)/Symbols.h ␊ |
␉@echo "" >> $(SYMROOT)/Symbols.h␊ |
␉␊ |
␉@nm -g $(SYMROOT)/boot.sys | tr . _ | awk '{print "static char "$$3"_string[] = \""$$3"\";"}' >> $(SYMROOT)/Symbols.h␊ |
␊ |
␉@echo "symbol_t symbolList[] = {" >> $(SYMROOT)/Symbols.h␊ |
␉@nm -g $(SYMROOT)/boot.sys | tr . _ | awk '{print "␉{.symbol = "$$3"_string, .addr = 0x"$$1"},";}' >> $(SYMROOT)/Symbols.h␊ |
␉@echo "};" >> $(SYMROOT)/Symbols.h␊ |
␊ |
␉$(CC) $(CPPFLAGS) $(CFLAGS) $(DEFINES) -c Symbols.c $(INC) -o $(OBJROOT)/Symbols.o ␊ |
␊ |
␊ |
install_i386:: all $(INSTALLDIR)␊ |
␉cp $(SYMROOT)/boot $(OTHER_FILES) $(INSTALLDIR)␊ |
␉cd $(INSTALLDIR); chmod u+w boot $(OTHER_FILES)␊ |