| 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... |
|---|
| 34 | ifndef BUILD_OS |
|---|
| 35 | BUILD_OS = linux |
|---|
| 36 | endif |
|---|
| 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 ! |
|---|
| 61 | ifndef BUILD_TARGET |
|---|
| 62 | BUILD_TARGET = nocross |
|---|
| 63 | endif |
|---|
| 64 | |
|---|
| 65 | # BUILD_TYPE enum(debug, release) |
|---|
| 66 | ifndef BUILD_TYPE |
|---|
| 67 | BUILD_TYPE = release |
|---|
| 68 | endif |
|---|
| 69 | |
|---|
| 70 | # BUILD_LIB_PREFIX |
|---|
| 71 | BUILD_LIB_PREFIX=lib |
|---|
| 72 | |
|---|
| 73 | # BUILD_SUFFIX |
|---|
| 74 | ifeq "$(BUILD_TYPE)" "debug" |
|---|
| 75 | BUILD_SUFFIX=D |
|---|
| 76 | else |
|---|
| 77 | BUILD_SUFFIX= |
|---|
| 78 | endif |
|---|
| 79 | |
|---|
| 80 | # CMD_* (shell commands) |
|---|
| 81 | ifeq "$(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 |
|---|
| 91 | endif |
|---|
| 92 | ifeq "$(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 |
|---|
| 102 | endif |
|---|
| 103 | ifeq "$(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 |
|---|
| 113 | endif |
|---|
| 114 | ifeq "$(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 |
|---|
| 129 | endif |
|---|
| 130 | |
|---|
| 131 | |
|---|
| 132 | # EXT_* (files extensions) |
|---|
| 133 | ifeq "$(BUILD_OS)" "mingw" |
|---|
| 134 | EXT_EXE = .exe |
|---|
| 135 | EXT_DLL = .dll |
|---|
| 136 | EXT_LIB = .a |
|---|
| 137 | # EXT_OBJ = .obj |
|---|
| 138 | EXT_OBJ = .o |
|---|
| 139 | else |
|---|
| 140 | EXT_EXE = |
|---|
| 141 | EXT_DLL = .so |
|---|
| 142 | EXT_LIB = .a |
|---|
| 143 | EXT_OBJ = .o |
|---|
| 144 | endif |
|---|
| 145 | |
|---|
| 146 | |
|---|
| 147 | #---------------------------------------------------------------------------- |
|---|
| 148 | # Sources, objects and final targets |
|---|
| 149 | #---------------------------------------------------------------------------- |
|---|
| 150 | # directories |
|---|
| 151 | DIR_BIN = ./bin |
|---|
| 152 | DIR_DATA = ./data |
|---|
| 153 | DIR_INC = ./include |
|---|
| 154 | DIR_LIB = ./lib |
|---|
| 155 | DIR_OBJ = ./obj |
|---|
| 156 | DIR_OBJ_NCORE = $(DIR_OBJ)/nCore/$(BUILD_TYPE) |
|---|
| 157 | DIR_OBJ_TESTER = $(DIR_OBJ)/nCoreTester/$(BUILD_TYPE) |
|---|
| 158 | DIR_SRC_NCORE = ./src/nCore |
|---|
| 159 | DIR_SRC_TESTER = ./src/nCoreTester |
|---|
| 160 | |
|---|
| 161 | # list of source files |
|---|
| 162 | SRC_NCORE = $(wildcard $(DIR_SRC_NCORE)/*.cpp) |
|---|
| 163 | SRC_TESTER = $(wildcard $(DIR_SRC_TESTER)/*.cpp) |
|---|
| 164 | |
|---|
| 165 | # list of object files (those lists are built from the SRC_* variables) |
|---|
| 166 | OBJ_NCORE = $(notdir $(SRC_NCORE)) |
|---|
| 167 | OBJ_NCORE := $(patsubst %.cpp,%$(EXT_OBJ),$(OBJ_NCORE)) |
|---|
| 168 | OBJ_NCORE := $(addprefix $(DIR_OBJ_NCORE)/,$(OBJ_NCORE)) |
|---|
| 169 | |
|---|
| 170 | OBJ_TESTER = $(notdir $(SRC_TESTER)) |
|---|
| 171 | OBJ_TESTER := $(patsubst %.cpp,%$(EXT_OBJ),$(OBJ_TESTER)) |
|---|
| 172 | OBJ_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) |
|---|
| 177 | FINAL_NCORE_STATIC = $(DIR_OBJ_NCORE)/$(BUILD_LIB_PREFIX)nCore$(BUILD_SUFFIX)$(EXT_LIB) |
|---|
| 178 | FINAL_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 |
|---|
| 205 | FLAGS_CXX_COMMON = -c -fno-rtti -Wall |
|---|
| 206 | FLAGS_LIB_COMMON = rcs |
|---|
| 207 | FLAGS_LNK_COMMON = |
|---|
| 208 | #ifeq "$(BUILD_TARGET)" "arm" |
|---|
| 209 | # FLAGS_CXX_COMMON := $(FLAGS_CXX_COMMON) -DNCORE_TARGET_ARM |
|---|
| 210 | #endif |
|---|
| 211 | ifeq "$(BUILD_TYPE)" "debug" |
|---|
| 212 | FLAGS_CXX_COMMON := $(FLAGS_CXX_COMMON) -Winline -g3 -D_DEBUG |
|---|
| 213 | FLAGS_LNK_COMMON := $(FLAGS_LNK_COMMON) |
|---|
| 214 | else |
|---|
| 215 | FLAGS_CXX_COMMON := $(FLAGS_CXX_COMMON) -O3 |
|---|
| 216 | FLAGS_LNK_COMMON := $(FLAGS_LNK_COMMON) -O3 -s |
|---|
| 217 | endif |
|---|
| 218 | |
|---|
| 219 | # FLAGS_*_NCORE_STATIC |
|---|
| 220 | FLAGS_CXX_NCORE_STATIC = $(FLAGS_CXX_COMMON) -I$(DIR_INC) |
|---|
| 221 | FLAGS_LIB_NCORE_STATIC = $(FLAGS_LIB_COMMON) |
|---|
| 222 | |
|---|
| 223 | # FLAGS_*_TESTER |
|---|
| 224 | FLAGS_CXX_TESTER = $(FLAGS_CXX_COMMON) -I$(DIR_INC) |
|---|
| 225 | FLAGS_LNK_TESTER = $(FLAGS_LNK_COMMON) -L$(DIR_LIB) -lnCore$(BUILD_SUFFIX) -lpthread -ldl -lm -luuid |
|---|
| 226 | ifndef windir |
|---|
| 227 | FLAGS_LNK_TESTER += -Wl,-rpath,. -Wl,-rpath,./bin |
|---|
| 228 | endif |
|---|
| 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 | #---------------------------------------------------------------------------- |
|---|
| 250 | all : ncore ncoretester |
|---|
| 251 | |
|---|
| 252 | ncore : $(FINAL_NCORE_STATIC) |
|---|
| 253 | |
|---|
| 254 | ncoretester : $(FINAL_TESTER) |
|---|
| 255 | |
|---|
| 256 | clean : |
|---|
| 257 | -$(call CMD_RMDIR,$(DIR_BIN)) |
|---|
| 258 | -$(call CMD_RMDIR,$(DIR_LIB)) |
|---|
| 259 | -$(call CMD_RMDIR,$(DIR_OBJ)) |
|---|
| 260 | |
|---|
| 261 | mrproper : clean |
|---|
| 262 | |
|---|
| 263 | prebuild : |
|---|
| 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 | |
|---|
| 269 | makefiledebug : |
|---|
| 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 $@ |
|---|