Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #
  2. # Tiny C Compiler Makefile for libtcc1.a
  3. #
  4.  
  5. TOP = ..
  6. include $(TOP)/Makefile
  7. VPATH = $(top_srcdir)/lib $(top_srcdir)/win32/lib
  8.  
  9. ifndef TARGET # native library
  10.  ifdef CONFIG_WIN64
  11.   TARGET = x86_64-win
  12.  else
  13.  ifdef CONFIG_WIN32
  14.   TARGET = i386-win
  15.  else
  16.  ifeq ($(ARCH),i386)
  17.   TARGET = i386
  18.  else
  19.  ifeq ($(ARCH),x86-64)
  20.   TARGET = x86_64
  21.  else
  22.  ifeq ($(ARCH),arm)
  23.   TARGET = arm
  24.   XCC = $(CC)
  25.  else
  26.  ifeq ($(ARCH),arm64)
  27.   TARGET = arm64
  28.  else
  29.  endif
  30.  endif
  31.  endif
  32.  endif
  33.  endif
  34.  endif
  35. endif
  36.  
  37. BCHECK_O = bcheck.o
  38. DIR = $(TARGET)
  39.  
  40. native : ../libtcc1.a
  41. cross : $(DIR)/libtcc1.a
  42.  
  43. native : TCC = $(TOP)/tcc$(EXESUF)
  44. cross : TCC = $(TOP)/$(TARGET)-tcc$(EXESUF)
  45.  
  46. I386_O = libtcc1.o alloca86.o alloca86-bt.o $(BCHECK_O)
  47. X86_64_O = libtcc1.o alloca86_64.o alloca86_64-bt.o $(BCHECK_O)
  48. ARM_O = libtcc1.o armeabi.o alloca-arm.o
  49. WIN32_O = $(I386_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
  50. WIN64_O = $(X86_64_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
  51. ARM64_O = lib-arm64.o
  52.  
  53. # build TCC runtime library to contain PIC code, so it can be linked
  54. # into shared libraries
  55. PICFLAGS = -fPIC
  56.  
  57. # don't compile with -fstack-protector-strong, TCC doesn't handle it
  58. # correctly
  59. CFLAGS := $(filter-out -fstack-protector-strong,$(CFLAGS))
  60.  
  61. ifeq "$(TARGET)" "i386-win"
  62.  OBJ = $(addprefix $(DIR)/,$(WIN32_O))
  63.  TGT = -DTCC_TARGET_I386 -DTCC_TARGET_PE
  64.  XCC ?= $(TCC) -B$(top_srcdir)/win32 -I$(top_srcdir)/include
  65.  XAR ?= $(DIR)/tiny_libmaker$(EXESUF)
  66.  PICFLAGS =
  67. else
  68. ifeq "$(TARGET)" "x86_64-win"
  69.  OBJ = $(addprefix $(DIR)/,$(WIN64_O))
  70.  TGT = -DTCC_TARGET_X86_64 -DTCC_TARGET_PE
  71.  XCC = $(TCC) -B$(top_srcdir)/win32 -I$(top_srcdir)/include
  72.  XAR ?= $(DIR)/tiny_libmaker$(EXESUF)
  73.  PICFLAGS =
  74. else
  75. ifeq "$(TARGET)" "i386"
  76.  OBJ = $(addprefix $(DIR)/,$(I386_O))
  77.  TGT = -DTCC_TARGET_I386
  78.  XCC ?= $(TCC) -B$(TOP)
  79. else
  80. ifeq "$(TARGET)" "x86_64"
  81.  OBJ = $(addprefix $(DIR)/,$(X86_64_O))
  82.  TGT = -DTCC_TARGET_X86_64
  83.  XCC ?= $(TCC) -B$(TOP)
  84. else
  85. ifeq "$(TARGET)" "arm"
  86.  OBJ = $(addprefix $(DIR)/,$(ARM_O))
  87.  TGT = -DTCC_TARGET_ARM
  88.  XCC ?= $(TCC) -B$(TOP)
  89. else
  90. ifeq "$(TARGET)" "arm64"
  91.  OBJ = $(addprefix $(DIR)/,$(ARM64_O))
  92.  TGT = -DTCC_TARGET_ARM64
  93.  XCC ?= $(TCC) -B$(TOP)
  94. else
  95.  $(error libtcc1.a not supported on target '$(TARGET)')
  96. endif
  97. endif
  98. endif
  99. endif
  100. endif
  101. endif
  102.  
  103. XFLAGS = $(filter-out -b,$(CPPFLAGS) $(CFLAGS) $(PICFLAGS) $(TGT))
  104.  
  105. ifeq ($(TARGETOS),Darwin)
  106.  XAR = $(DIR)/tiny_libmaker$(EXESUF)
  107.  XFLAGS += -D_ANSI_SOURCE
  108.  BCHECK_O =
  109. endif
  110.  
  111. XAR ?= $(AR)
  112.  
  113. $(DIR)/libtcc1.a ../libtcc1.a : $(OBJ) $(XAR)
  114.         $(XAR) rcs $@ $(OBJ)
  115. $(DIR)/%.o : %.c
  116.         $(XCC) -c $< -o $@ $(XFLAGS)
  117. $(DIR)/%.o : %.S
  118.         $(XCC) -c $< -o $@ $(XFLAGS)
  119. $(DIR)/%$(EXESUF) : $(TOP)/win32/tools/%.c
  120.         $(CC) -o $@ $< $(XFLAGS) $(LDFLAGS)
  121.  
  122. $(OBJ) $(XAR) : $(DIR)/exists
  123. $(DIR)/exists :
  124.         mkdir -p $(DIR)
  125.         @echo $@ > $@
  126.  
  127. clean :
  128.         rm -rfv i386-win x86_64-win i386 x86_64 arm64
  129.