root/trunk/Makefile

Revision 67, 9.1 KB (checked in by jc.lefebvre, 4 years ago)

Changed to ZLIB License.

Line 
1#****************************************************************************
2#
3# [ nCore ]
4#
5# Copyright (c) 2001-2008 Jean-Charles Lefebvre <jcl ATNOSPAM jcl DOT name>
6#
7# This file is part of nCore.
8#
9# This software is provided 'as-is', without any express or implied
10# warranty.  In no event will the authors be held liable for any damages
11# arising from the use of this software.
12#
13# Permission is granted to anyone to use this software for any purpose,
14# including commercial applications, and to alter it and redistribute it
15# freely, subject to the following restrictions :
16#
17# 1. The origin of this software must not be misrepresented; you must not
18#    claim that you wrote the original software. If you use this software
19#    in a product, an acknowledgment in the product documentation would be
20#    appreciated but is not required.
21# 2. Altered source versions must be plainly marked as such, and must not
22#    be misrepresented as being the original software.
23# 3. This notice may not be removed or altered from any source distribution.
24#
25#****************************************************************************
26
27
28
29#----------------------------------------------------------------------------
30# Environment
31#----------------------------------------------------------------------------
32# BUILD_OS enum(cygwin, mingw, linux, macosx)
33#   Autodetect OS if this value is not defined...
34ifndef BUILD_OS
35  BUILD_OS = linux
36endif
37#ifndef BUILD_OS
38#  ifneq ($(strip "$(WINDIR)$(windir)"),)
39#    ifneq ($(strip $(shell uname | grep "CYGWIN")),)
40#      BUILD_OS = cygwin
41#      $(warning Assuming you are running "Cygwin" environment !)
42#    else
43#      BUILD_OS = mingw
44#      $(warning Assuming you are running "MinGW" environment !)
45#    endif
46#  else
47#    ARCH_NAME := $(shell uname)
48#    ifeq "$(ARCH_NAME)" "Darwin"
49#      BUILD_OS = macosx
50#      $(warning Assuming you are running "Darwin" architecture !)
51#    else
52#      BUILD_OS = linux
53#      $(warning Assuming you are running "Linux" environment !)
54#    endif
55#  endif
56#endif
57
58# BUILD_TARGET enum(nocross, arm, arm9tdmi)
59#   Use this if you want to make cross-compiling
60#   Only used on Linux or Cygwin platforms !
61ifndef BUILD_TARGET
62  BUILD_TARGET = nocross
63endif
64
65# BUILD_TYPE enum(debug, release)
66ifndef BUILD_TYPE
67  BUILD_TYPE = release
68endif
69
70# BUILD_LIB_PREFIX
71BUILD_LIB_PREFIX=lib
72
73# BUILD_SUFFIX
74ifeq "$(BUILD_TYPE)" "debug"
75  BUILD_SUFFIX=D
76else
77  BUILD_SUFFIX=
78endif
79
80# CMD_* (shell commands)
81ifeq "$(BUILD_OS)_$(BUILD_TARGET)" "linux_nocross"
82  CMD_PRINT = @echo "$(1)"
83  CMD_COPY  = cp -rf $(1) $(2)
84  CMD_MKDIR = mkdir -p $(1)
85  CMD_RM    = rm -f $(1)
86  CMD_RMDIR = rm -rf $(1)
87  CMD_C     = gcc
88  CMD_CXX   = g++
89  CMD_LIB   = ar
90  CMD_STRIP = strip
91endif
92ifeq "$(BUILD_OS)_$(BUILD_TARGET)" "linux_arm"
93  CMD_PRINT = @echo "$(1)"
94  CMD_COPY  = cp -rf $(1) $(2)
95  CMD_MKDIR = mkdir -p $(1)
96  CMD_RM    = rm -f $(1)
97  CMD_RMDIR = rm -rf $(1)
98  CMD_C     = arm-linux-gcc
99  CMD_CXX   = arm-linux-g++
100  CMD_LIB   = arm-linux-ar
101  CMD_STRIP = arm-linux-strip
102endif
103ifeq "$(BUILD_OS)_$(BUILD_TARGET)" "linux_arm9tdmi"
104  CMD_PRINT = @echo "$(1)"
105  CMD_COPY  = cp -rf $(1) $(2)
106  CMD_MKDIR = mkdir -p $(1)
107  CMD_RM    = rm -f $(1)
108  CMD_RMDIR = rm -rf $(1)
109  CMD_C     = arm-9tdmi-linux-gnu-gcc
110  CMD_CXX   = arm-9tdmi-linux-gnu-g++
111  CMD_LIB   = arm-9tdmi-linux-gnu-ar
112  CMD_STRIP = arm-9tdmi-linux-gnu-strip
113endif
114ifeq "$(BUILD_OS)" "mingw"
115  CMD_PRINT = @echo "$(1)"
116  CMD_COPY  = cp -rf $(1) $(2)
117  CMD_MKDIR = mkdir -p $(1)
118  CMD_RM    = rm -f $(1)
119  CMD_RMDIR = rm -rf $(1)
120 #CMD_PRINT = @echo $(1)
121 #CMD_COPY  = copy /y $(subst /,\\,$(1)) $(subst /,\\,$(2))
122 #CMD_MKDIR = if not exist $(subst /,\\,$(1)) mkdir $(subst /,\\,$(1))
123 #CMD_RM    = if exist $(subst /,\\,$(1)) del /F /Q $(subst /,\\,$(1))
124 #CMD_RMDIR = if exist $(subst /,\\,$(1)) rmdir /S /Q $(subst /,\\,$(1))
125  CMD_C     = gcc.exe
126  CMD_CXX   = g++.exe
127  CMD_LIB   = ar.exe
128  CMD_STRIP = strip.exe
129endif
130
131
132# EXT_* (files extensions)
133ifeq "$(BUILD_OS)" "mingw"
134  EXT_EXE = .exe
135  EXT_DLL = .dll
136  EXT_LIB = .a
137# EXT_OBJ = .obj
138  EXT_OBJ = .o
139else
140  EXT_EXE =
141  EXT_DLL = .so
142  EXT_LIB = .a
143  EXT_OBJ = .o
144endif
145
146
147#----------------------------------------------------------------------------
148# Sources, objects and final targets
149#----------------------------------------------------------------------------
150# directories
151DIR_BIN        = ./bin
152DIR_DATA       = ./data
153DIR_INC        = ./include
154DIR_LIB        = ./lib
155DIR_OBJ        = ./obj
156DIR_OBJ_NCORE  = $(DIR_OBJ)/nCore/$(BUILD_TYPE)
157DIR_OBJ_TESTER = $(DIR_OBJ)/nCoreTester/$(BUILD_TYPE)
158DIR_SRC_NCORE  = ./src/nCore
159DIR_SRC_TESTER = ./src/nCoreTester
160
161# list of source files
162SRC_NCORE  = $(wildcard $(DIR_SRC_NCORE)/*.cpp)
163SRC_TESTER = $(wildcard $(DIR_SRC_TESTER)/*.cpp)
164
165# list of object files (those lists are built from the SRC_* variables)
166OBJ_NCORE  = $(notdir    $(SRC_NCORE))
167OBJ_NCORE := $(patsubst  %.cpp,%$(EXT_OBJ),$(OBJ_NCORE))
168OBJ_NCORE := $(addprefix $(DIR_OBJ_NCORE)/,$(OBJ_NCORE))
169
170OBJ_TESTER  = $(notdir    $(SRC_TESTER))
171OBJ_TESTER := $(patsubst  %.cpp,%$(EXT_OBJ),$(OBJ_TESTER))
172OBJ_TESTER := $(addprefix $(DIR_OBJ_TESTER)/,$(OBJ_TESTER))
173
174# final target files (executables, dll, archives, ...)
175#FINAL_NCORE_IMPLIB = $(DIR_OBJ_NCORE)/$(BUILD_LIB_PREFIX)nCore$(BUILD_SUFFIX)$(EXT_LIB)
176#FINAL_NCORE_DLL    = $(DIR_OBJ_NCORE)/$(BUILD_LIB_PREFIX)nCore$(BUILD_SUFFIX)$(EXT_DLL)
177FINAL_NCORE_STATIC = $(DIR_OBJ_NCORE)/$(BUILD_LIB_PREFIX)nCore$(BUILD_SUFFIX)$(EXT_LIB)
178FINAL_TESTER       = $(DIR_OBJ_TESTER)/nCoreTester$(BUILD_SUFFIX)$(EXT_EXE)
179
180
181
182#----------------------------------------------------------------------------
183# Compiler & Linker flags
184#----------------------------------------------------------------------------
185# Check environment variables
186#
187# ifdef windir
188#  override CPATH=.:c:/prog/mingw/include:c:/prog/mingw/include/c++/3.4.2:c:/progra~1/mssql7/devtools/include
189#  override LIBRARY_PATH=.;c:/prog/mingw/lib;c:/progra~1/mssql7/devtools/lib
190# else
191#   override CPATH=.:/usr/include:/usr/include/c++/3.3
192#   override LIBRARY_PATH=.;/usr/lib
193# endif
194#
195#ifdef windir
196#  ifndef CPATH
197#    $(error The CPATH environment variable is not defined !)
198#  endif
199#  ifndef LIBRARY_PATH
200#    $(error The LIBRARY_PATH environment variable is not defined !)
201#  endif
202#endif
203
204# Common Flags
205FLAGS_CXX_COMMON = -c -fno-rtti -Wall
206FLAGS_LIB_COMMON = rcs
207FLAGS_LNK_COMMON =
208#ifeq "$(BUILD_TARGET)" "arm"
209#  FLAGS_CXX_COMMON := $(FLAGS_CXX_COMMON) -DNCORE_TARGET_ARM
210#endif
211ifeq "$(BUILD_TYPE)" "debug"
212  FLAGS_CXX_COMMON := $(FLAGS_CXX_COMMON) -Winline -g3 -D_DEBUG
213  FLAGS_LNK_COMMON := $(FLAGS_LNK_COMMON)
214else
215  FLAGS_CXX_COMMON := $(FLAGS_CXX_COMMON) -O3
216  FLAGS_LNK_COMMON := $(FLAGS_LNK_COMMON) -O3 -s
217endif
218
219# FLAGS_*_NCORE_STATIC
220FLAGS_CXX_NCORE_STATIC = $(FLAGS_CXX_COMMON) -I$(DIR_INC)
221FLAGS_LIB_NCORE_STATIC = $(FLAGS_LIB_COMMON)
222
223# FLAGS_*_TESTER
224FLAGS_CXX_TESTER = $(FLAGS_CXX_COMMON) -I$(DIR_INC)
225FLAGS_LNK_TESTER = $(FLAGS_LNK_COMMON) -L$(DIR_LIB) -lnCore$(BUILD_SUFFIX) -lpthread -ldl -lm -luuid
226ifndef windir
227  FLAGS_LNK_TESTER += -Wl,-rpath,. -Wl,-rpath,./bin
228endif
229
230
231
232
233#****************************************************************************
234#****************************************************************************
235#
236# Targets
237#
238#****************************************************************************
239#****************************************************************************
240#----------------------------------------------------------------------------
241# m a i n
242#----------------------------------------------------------------------------
243.PHONY : all clean mrproper prebuild makefiledebug \
244         ncore ncoretester
245
246
247#----------------------------------------------------------------------------
248# Global
249#----------------------------------------------------------------------------
250all : ncore ncoretester
251
252ncore : $(FINAL_NCORE_STATIC)
253
254ncoretester : $(FINAL_TESTER)
255
256clean :
257    -$(call CMD_RMDIR,$(DIR_BIN))
258    -$(call CMD_RMDIR,$(DIR_LIB))
259    -$(call CMD_RMDIR,$(DIR_OBJ))
260
261mrproper : clean
262
263prebuild :
264    $(call CMD_MKDIR,$(DIR_BIN))
265    $(call CMD_MKDIR,$(DIR_LIB))
266    $(call CMD_MKDIR,$(DIR_OBJ_NCORE))
267    $(call CMD_MKDIR,$(DIR_OBJ_TESTER))
268
269makefiledebug :
270    $(call CMD_PRINT,$(DIR_BIN))
271    $(call CMD_PRINT,$(FLAGS_LIB_NCORE_STATIC))
272    $(call CMD_PRINT,---)
273
274
275#----------------------------------------------------------------------------
276# nCore library (static)
277#----------------------------------------------------------------------------
278$(FINAL_NCORE_STATIC) : prebuild $(OBJ_NCORE)
279    $(CMD_LIB) $(FLAGS_LIB_NCORE_STATIC) $@ $(OBJ_NCORE)
280    $(call CMD_COPY,$@,$(DIR_LIB))
281
282$(OBJ_NCORE) : $(SRC_NCORE)
283    $(CMD_CXX) $(FLAGS_CXX_NCORE_STATIC) $(DIR_SRC_NCORE)/$(basename $(notdir $@)).cpp -o $@
284
285
286#----------------------------------------------------------------------------
287# Test Application
288#----------------------------------------------------------------------------
289$(FINAL_TESTER) : prebuild $(FINAL_NCORE_STATIC) $(OBJ_TESTER)
290    $(CMD_CXX) -o $@ $(OBJ_TESTER) $(FLAGS_LNK_TESTER)
291    $(CMD_STRIP) $@
292    $(call CMD_COPY,$(FINAL_TESTER),$(DIR_BIN))
293
294$(OBJ_TESTER) : $(SRC_TESTER)
295    $(CMD_CXX) $(FLAGS_CXX_TESTER) $(DIR_SRC_TESTER)/$(basename $(notdir $@)).cpp -o $@
296#   $(CMD_CXX) $(FLAGS_CXX_TESTER) $(DIR_SRC_TESTER)/$(findstring $(basename $(notdir $@)),$(SRC_TESTER)).cpp -o $@
Note: See TracBrowser for help on using the browser.