Makefile 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. ##
  2. ## SerialICE
  3. ##
  4. ## Copyright (C) 2009 coresystems GmbH
  5. ##
  6. ## This program is free software; you can redistribute it and/or modify
  7. ## it under the terms of the GNU General Public License as published by
  8. ## the Free Software Foundation; version 2 of the License.
  9. ##
  10. ## This program is distributed in the hope that it will be useful,
  11. ## but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ## GNU General Public License for more details.
  14. ##
  15. ## You should have received a copy of the GNU General Public License
  16. ## along with this program; if not, write to the Free Software
  17. ## Foundation, Inc.
  18. ##
  19. VERSION="1.5"
  20. # romcc requires lots of stack space, and win32 seems to have a fixed size
  21. # stack. Give romcc some room on mingw and cygwin.
  22. _OS=$(shell uname -s | cut -c -7)
  23. STACK=
  24. ifeq ($(_OS),MINGW32)
  25. STACK=-Wl,--stack,16384000
  26. endif
  27. ifeq ($(_OS),CYGWIN_)
  28. STACK=-Wl,--stack,16384000
  29. endif
  30. export src := $(shell pwd)
  31. export srctree := $(src)
  32. export srck := $(src)/util/kconfig
  33. export obj := $(src)/build
  34. export objk := $(src)/build/util/kconfig
  35. export KERNELVERSION := $(shell echo $(VERSION) )
  36. export KCONFIG_AUTOHEADER := $(obj)/config.h
  37. export KCONFIG_AUTOCONFIG := $(obj)/auto.conf
  38. CONFIG_SHELL := sh
  39. KBUILD_DEFCONFIG := configs/defconfig
  40. UNAME_RELEASE := $(shell uname -r)
  41. HAVE_DOTCONFIG := $(wildcard .config)
  42. MAKEFLAGS += -rR --no-print-directory
  43. # Make is silent per default, but 'make V=1' will show all compiler calls.
  44. ifneq ($(V),1)
  45. Q := @
  46. endif
  47. PCREFLAGS=-I/opt/local/include -L/opt/local/lib -lpcre
  48. ifneq ($(shell which i386-elf-gcc),)
  49. CROSS=i386-elf-
  50. endif
  51. AS=$(CROSS)as --32
  52. CC=$(CROSS)gcc -m32
  53. CPP=$(CROSS)cpp
  54. OBJCOPY=$(CROSS)objcopy
  55. NM=$(CROSS)nm
  56. LDFLAGS=-Wa,--divide -nostdlib -nostartfiles -static -T serialice.ld -Wl,--defsym,ALIGNED_ROMSIZE=$(CONFIG_ROMSIZE)
  57. SOURCES = serialice.c serialice.h chipset.c serial.c types.h mainboard/*.c
  58. HOSTCC ?= gcc
  59. HOSTCXX ?= g++
  60. HOSTCFLAGS := -O2 -Wall -I$(srck) -I$(objk)
  61. HOSTCXXFLAGS := -I$(srck) -I$(objk)
  62. INCLUDES = -I$(obj)
  63. CFLAGS := -Wall -Werror -Os $(INCLUDES)
  64. OBJECTS = serialice.o
  65. OBJS = $(patsubst %,$(obj)/%,$(OBJECTS))
  66. ifeq ($(strip $(HAVE_DOTCONFIG)),)
  67. all: config
  68. else
  69. include $(src)/.config
  70. TARGET-$(CONFIG_BUILD_ROMCC) = $(obj)/serialice.rom
  71. TARGET-$(CONFIG_BUILD_XMMSTACK) = $(obj)/serialice-gcc.rom
  72. all: $(TARGET-y)
  73. endif
  74. prepare:
  75. $(Q)mkdir -p $(obj)/util/kconfig/lxdialog
  76. clean:
  77. $(Q)printf " CLEAN\n"
  78. $(Q)rm -rf $(obj)/*.elf $(obj)/*.o
  79. $(Q)cd $(obj); rm -f romcc serialice.S *.o *.o.s
  80. $(Q)cd $(obj); rm -f serialice.elf serialice.rom serialice.map
  81. $(Q)cd $(obj); rm -f serialice-gcc.elf serialice-gcc.rom serialice-gcc.map
  82. $(Q)cd $(obj); rm -f serialice-gcc.S serialice-pre.s xmmstack serialice-gcc.map
  83. distclean: clean
  84. $(Q)printf " DISTCLEAN\n"
  85. $(Q)rm -rf build
  86. $(Q)rm -f .config .config.old ..config.tmp .kconfig.d .tmpconfig*
  87. include util/kconfig/Makefile
  88. .PHONY: $(PHONY) prepare clean distclean
  89. $(obj)/serialice.rom: $(obj)/serialice.elf
  90. $(Q)printf " OBJCOPY $(subst $(shell pwd)/,,$(@))\n"
  91. $(Q)$(OBJCOPY) -O binary $< $@
  92. $(obj)/serialice.elf: $(obj)/serialice.o $(obj)/start.o $(src)/serialice.ld
  93. $(Q)printf " LINK $(subst $(shell pwd)/,,$(@))\n"
  94. $(Q)$(CC) $(LDFLAGS) -o $@ $(obj)/serialice.o $(obj)/start.o
  95. $(Q)$(NM) $@ | sort -u > $(obj)/serialice.map
  96. $(obj)/serialice.S: $(SOURCES) $(obj)/romcc
  97. $(Q)printf " ROMCC $(subst $(shell pwd)/,,$(@))\n"
  98. $(Q)$(obj)/romcc -mcpu=i386 $(INCLUDES) -I. -Imainboard -Isouthbridge -Isuperio -DVERSION=\"$(VERSION)\" -o $@.tmp $<
  99. $(Q)printf ".section \".rom.text\"\n.globl main\nmain:\n" > $@
  100. $(Q)cat $@.tmp >> $@
  101. $(Q)rm $@.tmp
  102. $(obj)/romcc.o: $(src)/util/romcc.c
  103. $(Q)printf " HOSTCC $(subst $(shell pwd)/,,$(@))\n"
  104. $(Q)$(HOSTCC) $(HOSTCFLAGS) -c -o $@ $^
  105. $(obj)/romcc: $(obj)/romcc.o
  106. $(Q)printf " HOSTCC $(subst $(shell pwd)/,,$(@))\n"
  107. $(Q)$(HOSTCC) $(HOSTCFLAGS) $(STACK) -o $@ $^
  108. # #####################################################################
  109. $(obj)/serialice-gcc.rom: $(obj)/serialice-gcc.elf
  110. $(Q)printf " OBJCOPY $(subst $(shell pwd)/,,$(@))\n"
  111. $(Q)$(OBJCOPY) -O binary $< $@
  112. $(obj)/serialice-gcc.elf: $(obj)/serialice-gcc.o $(obj)/start.o serialice.ld
  113. $(Q)printf " LINK $(subst $(shell pwd)/,,$(@))\n"
  114. $(Q)$(CC) $(LDFLAGS) -o $@ $(obj)/serialice-gcc.o $(obj)/start.o
  115. $(Q)$(NM) $@ | sort -u > $(obj)/serialice-gcc.map
  116. $(obj)/serialice-pre.s: $(SOURCES) $(obj)/xmmstack
  117. $(Q)printf " CC $(subst $(shell pwd)/,,$(@))\n"
  118. $(Q)$(CC) -O2 -march=i486 -mno-stackrealign -mpreferred-stack-boundary=2 $(INCLUDES) -I. -Imainboard -fomit-frame-pointer -fno-stack-protector -DVERSION=\"$(VERSION)\" -S $< -o $(obj)/serialice-pre.s
  119. $(obj)/serialice-gcc.S: $(obj)/serialice-pre.s
  120. $(Q)printf " XMMSTACK $(subst $(shell pwd)/,,$(@))\n"
  121. $(Q)$(obj)/xmmstack -xmm $(obj)/serialice-pre.s
  122. $(Q)mv $(obj)/serialice-pre.sn.s $(obj)/serialice-gcc.S
  123. $(obj)/xmmstack: $(src)/util/xmmstack.c
  124. $(Q)printf " HOSTCC $(subst $(shell pwd)/,,$(@))\n"
  125. $(Q)$(HOSTCC) $(HOSTCFLAGS) $(PCREFLAGS) -o $@ $^
  126. # #####################################################################
  127. $(obj)/%.o: $(src)/%.S
  128. $(Q)printf " CPP $(subst $(shell pwd)/,,$(@))\n"
  129. $(Q)$(CPP) $(INCLUDES) -DVERSION=\"$(VERSION)\" -o $@.s $^
  130. $(Q)printf " AS $(subst $(shell pwd)/,,$(@))\n"
  131. $(Q)$(AS) -o $@ $@.s
  132. $(obj)/%.o: $(obj)/%.S
  133. $(Q)printf " CPP $(subst $(shell pwd)/,,$(@))\n"
  134. $(Q)$(CPP) $(INCLUDES) -DVERSION=\"$(VERSION)\" -o $@.s $^
  135. $(Q)printf " AS $(subst $(shell pwd)/,,$(@))\n"
  136. $(Q)$(AS) -o $@ $@.s
  137. # #####################################################################
  138. dongle: $(TARGET-y)
  139. dongle.py -v -c /dev/cu.usbserial-00* $(TARGET-y) EOF