tarball,crossplatform.mk: improve cross-platform shell command functions. let errors...
[sdk] / compiler / ecc / Makefile.bootstrap
1 .PHONY: all objdir cleantarget clean realclean distclean
2
3 # CORE VARIABLES
4
5 MODULE := ecc
6 VERSION := 
7 CONFIG := bootstrap
8 ifndef COMPILER
9 COMPILER := default
10 endif
11
12 TARGET_TYPE = executable
13
14 # FLAGS
15
16 ECFLAGS =
17 ifndef DEBIAN_PACKAGE
18 CFLAGS =
19 LDFLAGS =
20 endif
21 PRJ_CFLAGS =
22 CECFLAGS =
23 OFLAGS =
24 LIBS =
25
26 ifdef DEBUG
27 NOSTRIP := y
28 endif
29
30 CONSOLE = -mconsole
31
32 # INCLUDES
33
34 _CF_DIR = .configs/
35
36 include $(_CF_DIR)crossplatform.mk
37 include $(_CF_DIR)$(TARGET_PLATFORM)-$(COMPILER).cf
38
39 # POST-INCLUDES VARIABLES
40
41 OBJ = obj/$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/
42
43 RES = 
44
45 _ECSOURCES = \
46         ecc.ec
47
48 ECSOURCES = $(call shwspace,$(_ECSOURCES))
49
50 _COBJECTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(C),$(notdir $(_ECSOURCES))))
51
52 _SYMBOLS = $(addprefix $(OBJ),$(patsubst %.ec,%$(S),$(notdir $(_ECSOURCES))))
53
54 _IMPORTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(I),$(notdir $(_ECSOURCES))))
55
56 _ECOBJECTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(O),$(notdir $(_ECSOURCES))))
57
58 _BOWLS = $(addprefix $(OBJ),$(patsubst %.ec,%$(B),$(notdir $(_ECSOURCES))))
59
60 COBJECTS = $(call shwspace,$(_COBJECTS))
61
62 SYMBOLS = $(call shwspace,$(_SYMBOLS))
63
64 IMPORTS = $(call shwspace,$(_IMPORTS))
65
66 ECOBJECTS = $(call shwspace,$(_ECOBJECTS))
67
68 BOWLS = $(call shwspace,$(_BOWLS))
69
70 SOURCES = $(ECSOURCES)
71
72 PRJ_CFLAGS += \
73          $(if $(DEBUG), -g, -O2 -ffast-math) $(FPIC) -Wall -DREPOSITORY_VERSION="\"$(REPOSITORY_VER)\"" \
74                          -DECERE_BOOTSTRAP \
75                          -DECERE_STATIC
76
77 ECFLAGS += -module $(MODULE)
78 ECFLAGS += \
79          -nolinenumbers
80
81 CECFLAGS += -cpp $(_CPP)
82
83 # TARGETS
84
85 all: objdir $(COBJECTS) $(OBJ)$(MODULE).main.c
86
87 objdir:
88         $(if $(wildcard $(OBJ)),,$(call mkdir,$(OBJ)))
89         $(if $(ECERE_SDK_SRC),$(if $(wildcard $(call escspace,$(ECERE_SDK_SRC)/crossplatform.mk)),,@$(call echo,Ecere SDK Source Warning: The value of ECERE_SDK_SRC is pointing to an incorrect ($(ECERE_SDK_SRC)) location.)),)
90         $(if $(ECERE_SDK_SRC),,$(if $(ECP_DEBUG)$(ECC_DEBUG)$(ECS_DEBUG),@$(call echo,ECC Debug Warning: Please define ECERE_SDK_SRC before using ECP_DEBUG, ECC_DEBUG or ECS_DEBUG),))
91
92 $(OBJ)$(MODULE).main.ec: $(SYMBOLS) $(COBJECTS)
93         @$(call rm,$(OBJ)symbols.lst)
94         @$(call touch,$(OBJ)symbols.lst)
95         @$(call echo,$(SYMBOLS)) >> $(OBJ)symbols.lst
96         @$(call echo,$(IMPORTS)) >> $(OBJ)symbols.lst
97         $(ECS) -console $(ARCH_FLAGS) $(ECSLIBOPT) @$(OBJ)symbols.lst -symbols obj/$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX) -o $(call quote_path,$@)
98
99 $(OBJ)$(MODULE).main.c: $(OBJ)$(MODULE).main.ec
100         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) -c $(OBJ)$(MODULE).main.ec -o $(OBJ)$(MODULE).main.sym -symbols $(OBJ)
101         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(OBJ)$(MODULE).main.ec -o $(call quote_path,$@) -symbols $(OBJ)
102
103 $(SYMBOLS): | objdir
104
105 # SYMBOL RULES
106
107 $(OBJ)ecc.sym: ecc.ec
108         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) -c $(call quote_path,ecc.ec) -o $(call quote_path,$@)
109
110 # C OBJECT RULES
111
112 $(OBJ)ecc.c: ecc.ec $(OBJ)ecc.sym | $(SYMBOLS)
113         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,ecc.ec) -o $(call quote_path,$@) -symbols $(OBJ)
114
115 cleantarget: objdir
116         $(call rm,$(OBJ)$(MODULE).main.c $(OBJ)$(MODULE).main.ec $(OBJ)$(MODULE).main$(I) $(OBJ)$(MODULE).main$(S))
117         $(call rm,$(OBJ)symbols.lst)
118         $(call rm,$(OBJ)objects.lst)
119
120 clean: cleantarget
121         $(call rm,$(_ECOBJECTS))
122         $(call rm,$(_COBJECTS))
123         $(call rm,$(_BOWLS))
124         $(call rm,$(_IMPORTS))
125         $(call rm,$(_SYMBOLS))
126
127 realclean: cleantarget
128         $(call rmr,$(OBJ))
129
130 distclean: cleantarget
131         $(call rmr,obj/)