| 1 | # $Id: $
|
|---|
| 2 | ## @file
|
|---|
| 3 | #
|
|---|
| 4 | # kBuild Makefile for kLIBC (formerly known as InnoTek LIBC).
|
|---|
| 5 | #
|
|---|
| 6 | # Copyright (c) 2006 knut st. osmundsen <[email protected]>
|
|---|
| 7 | #
|
|---|
| 8 | #
|
|---|
| 9 | # This file is part of kLIBC.
|
|---|
| 10 | #
|
|---|
| 11 | # kLIBC is free software; you can redistribute it and/or modify
|
|---|
| 12 | # it under the terms of the GNU General Public License as published by
|
|---|
| 13 | # the Free Software Foundation; either version 2 of the License, or
|
|---|
| 14 | # (at your option) any later version.
|
|---|
| 15 | #
|
|---|
| 16 | # kLIBC is distributed in the hope that it will be useful,
|
|---|
| 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|---|
| 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|---|
| 19 | # GNU General Public License for more details.
|
|---|
| 20 | #
|
|---|
| 21 | # You should have received a copy of the GNU General Public License
|
|---|
| 22 | # along with kLIBC; if not, write to the Free Software
|
|---|
| 23 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|---|
| 24 | #
|
|---|
| 25 | #
|
|---|
| 26 |
|
|---|
| 27 |
|
|---|
| 28 | # Include the top-level Config.kmk.
|
|---|
| 29 | include $(PATH_ROOT)/Config.kmk
|
|---|
| 30 |
|
|---|
| 31 | # Undo the packing pass the toplevel config insists on.
|
|---|
| 32 | DEFAULT_PASSES := $(filter-out PACKING,$(DEFAULT_PASSES))
|
|---|
| 33 |
|
|---|
| 34 | #
|
|---|
| 35 | # Configuration.
|
|---|
| 36 | #
|
|---|
| 37 | ifndef CFG_LIBC_NO_VARIANT_LIBS
|
|---|
| 38 | ifndef CFG_LIBC_LOGSTRICT_LIBS
|
|---|
| 39 | ifndef CFG_LIBC_PROFILED_LIBS
|
|---|
| 40 | CFG_LIBC_LOGSTRICT_LIBS := 1
|
|---|
| 41 | CFG_LIBC_PROFILED_LIBS := 1
|
|---|
| 42 | endif
|
|---|
| 43 | endif
|
|---|
| 44 | endif
|
|---|
| 45 |
|
|---|
| 46 | #
|
|---|
| 47 | # Global definitions.
|
|---|
| 48 | #
|
|---|
| 49 | DEFS = \
|
|---|
| 50 | IN_INNOTEK_LIBC \
|
|---|
| 51 | __IN_INNOTEK_LIBC__
|
|---|
| 52 | DEFS.os2 = __OS2__
|
|---|
| 53 | DEFS.win32 = __NT__
|
|---|
| 54 | DEFS.win64 = __NT__
|
|---|
| 55 |
|
|---|
| 56 |
|
|---|
| 57 | #
|
|---|
| 58 | # Paths to directories and files.
|
|---|
| 59 | #
|
|---|
| 60 | PATH_LIBC_ROOT = $(PATH_ROOT)/libc
|
|---|
| 61 | PATH_LIBC_SRC = $(PATH_LIBC_ROOT)/src
|
|---|
| 62 | PATH_LIBC_INC = $(PATH_LIBC_ROOT)/include
|
|---|
| 63 | LIBC-STD.H = $(PATH_OBJ)/libc/libc-std.h
|
|---|
| 64 | LIBC_GENALIAS = $(PATH_TARGET)/genalias/genalias$(HOSTSUFF_EXE)
|
|---|
| 65 | LIBC_GENALIAS_FORMAT.win32 = coff
|
|---|
| 66 | LIBC_GENALIAS_FORMAT.win64 = coff
|
|---|
| 67 | ifdef LIBC_GENALIAS_FORMAT.$(BUILD_TARGET)
|
|---|
| 68 | LIBC_GENALIAS_FORMAT := $(LIBC_GENALIAS_FORMAT.$(BUILD_TARGET))
|
|---|
| 69 | else
|
|---|
| 70 | LIBC_GENALIAS_FORMAT := aout
|
|---|
| 71 | endif
|
|---|
| 72 |
|
|---|
| 73 | #
|
|---|
| 74 | # Templates
|
|---|
| 75 | #
|
|---|
| 76 | TEMPLATE_libc =
|
|---|
| 77 | TEMPLATE_libc_TOOL = GCC3
|
|---|
| 78 | TEMPLATE_libc_INCS = $(PATH_LIBC_INC) $(dir $(LIBC-STD.H))
|
|---|
| 79 | TEMPLATE_libc_INCS.win32 = $(PATH_LIBC_SRC)/w32api/include
|
|---|
| 80 | TEMPLATE_libc_INCS.win64 = $(TEMPLATE_libc_INCS.win32)
|
|---|
| 81 | TEMPLATE_libc_DEPS = $(LIBC-STD.H)
|
|---|
| 82 | TEMPLATE_libc_INST = usr/lib/
|
|---|
| 83 | TEMPLATE_libc_CFLAGS = $(TEMPLATE_lib_CFLAGS) -std=gnu99
|
|---|
| 84 |
|
|---|
| 85 | TEMPLATE_libc.logstrict =
|
|---|
| 86 | TEMPLATE_libc.logstrict_TOOL = GCC3
|
|---|
| 87 | TEMPLATE_libc.logstrict_INCS = $(TEMPLATE_libc_INCS)
|
|---|
| 88 | TEMPLATE_libc.logstrict_INCS.win32 = $(TEMPLATE_libc_INCS.win32)
|
|---|
| 89 | TEMPLATE_libc.logstrict_INCS.win64 = $(TEMPLATE_libc_INCS.win64)
|
|---|
| 90 | TEMPLATE_libc.logstrict_DEFS = $(TEMPLATE_libc_DEFS) __LIBC_STRICT DEBUG_LOGGING
|
|---|
| 91 | TEMPLATE_libc.logstrict_DEPS = $(TEMPLATE_libc_DEPS)
|
|---|
| 92 | TEMPLATE_libc.logstrict_INST = $(TEMPLATE_libc_INST)
|
|---|
| 93 | TEMPLATE_libc.logstrict_CFLAGS = $(TEMPLATE_libc_CFLAGS)
|
|---|
| 94 |
|
|---|
| 95 | TEMPLATE_libc.profiled =
|
|---|
| 96 | TEMPLATE_libc.profiled_TOOL = GCC3
|
|---|
| 97 | TEMPLATE_libc.profiled_INCS = $(TEMPLATE_libc_INCS)
|
|---|
| 98 | TEMPLATE_libc.profiled_INCS.win32 = $(TEMPLATE_libc_INCS.win32)
|
|---|
| 99 | TEMPLATE_libc.profiled_INCS.win64 = $(TEMPLATE_libc_INCS.win64)
|
|---|
| 100 | TEMPLATE_libc.profiled_DEFS = $(TEMPLATE_libc_DEFS) __LIBC_PROFILED
|
|---|
| 101 | TEMPLATE_libc.profiled_DEPS = $(TEMPLATE_libc_DEPS)
|
|---|
| 102 | TEMPLATE_libc.profiled_INST = $(TEMPLATE_libc_INST)
|
|---|
| 103 | TEMPLATE_libc.profiled_CFLAGS = $(TEMPLATE_libc_CFLAGS)
|
|---|
| 104 |
|
|---|
| 105 | TEMPLATE_libcsub = LIBC Sub-Library.
|
|---|
| 106 | TEMPLATE_libcsub_EXTENDS = libc
|
|---|
| 107 | TEMPLATE_libcsub_NOINST = 1
|
|---|
| 108 |
|
|---|
| 109 | TEMPLATE_libcsub.logstrict = LIBC Sub-Library, Logging + Strict.
|
|---|
| 110 | TEMPLATE_libcsub.logstrict_EXTENDS = libc.logstrict
|
|---|
| 111 | TEMPLATE_libcsub.logstrict_NOINST = 1
|
|---|
| 112 |
|
|---|
| 113 | TEMPLATE_libcsub.profiled = LIBC Sub-Library, Profiled.
|
|---|
| 114 | TEMPLATE_libcsub.profiled_EXTENDS = libc.profiled
|
|---|
| 115 | TEMPLATE_libcsub.profiled_NOINST = 1
|
|---|
| 116 |
|
|---|
| 117 |
|
|---|
| 118 | # Intel assembly libs (default templates uses AT&T assembly).
|
|---|
| 119 |
|
|---|
| 120 | TEMPLATE_libcasm =
|
|---|
| 121 | TEMPLATE_libcasm_TOOL = GCC3
|
|---|
| 122 | TEMPLATE_libcasm_TOOL.os2 = GCC3OMF
|
|---|
| 123 | TEMPLATE_libcasm_ASTOOL = ALP
|
|---|
| 124 | TEMPLATE_libcasm_INCS = $(PATH_LIBC_INC) $(dir $(LIBC-STD.H))
|
|---|
| 125 | TEMPLATE_libcasm_INST = usr/lib/
|
|---|
| 126 | TEMPLATE_libcasm_ASFLAGS = -Sv:ALP
|
|---|
| 127 |
|
|---|
| 128 | TEMPLATE_libcasm.logstrict =
|
|---|
| 129 | TEMPLATE_libcasm.logstrict_TOOL = GCC3
|
|---|
| 130 | TEMPLATE_libcasm.logstrict_TOOL.os2 = GCC3OMF
|
|---|
| 131 | TEMPLATE_libcasm.logstrict_ASTOOL = ALP
|
|---|
| 132 | TEMPLATE_libcasm.logstrict_DEFS = $(TEMPLATE_libcasm_DEFS) __LIBC_STRICT DEBUG_LOGGING
|
|---|
| 133 | TEMPLATE_libcasm.logstrict_INCS = $(TEMPLATE_libcasm_INCS)
|
|---|
| 134 | TEMPLATE_libcasm.logstrict_INST = $(TEMPLATE_libcasm_INST)
|
|---|
| 135 | TEMPLATE_libcasm.logstrict_ASFLAGS = $(TEMPLATE_libcasm_ASFLAGS)
|
|---|
| 136 |
|
|---|
| 137 | TEMPLATE_libcasm.profiled =
|
|---|
| 138 | TEMPLATE_libcasm.profiled_TOOL = GCC3
|
|---|
| 139 | TEMPLATE_libcasm.profiled_TOOL.os2 = GCC3OMF
|
|---|
| 140 | TEMPLATE_libcasm.profiled_ASTOOL = ALP
|
|---|
| 141 | TEMPLATE_libcasm.profiled_DEFS = $(TEMPLATE_libcasm_DEFS) __LIBC_PROFILED
|
|---|
| 142 | TEMPLATE_libcasm.profiled_INCS = $(TEMPLATE_libcasm_INCS)
|
|---|
| 143 | TEMPLATE_libcasm.profiled_INST = $(TEMPLATE_libcasm_INST)
|
|---|
| 144 | TEMPLATE_libcasm.profiled_ASFLAGS = $(TEMPLATE_libcasm_ASFLAGS)
|
|---|
| 145 |
|
|---|
| 146 | TEMPLATE_libcsubasm =
|
|---|
| 147 | TEMPLATE_libcsubasm_EXTENDS = libcasm
|
|---|
| 148 | TEMPLATE_libcsubasm_NOINST = 1
|
|---|
| 149 |
|
|---|
| 150 | TEMPLATE_libcsubasm.logstrict =
|
|---|
| 151 | TEMPLATE_libcsubasm.logstrict_EXTENDS = libcasm.logstrict
|
|---|
| 152 | TEMPLATE_libcsubasm.logstrict_NOINST = 1
|
|---|
| 153 |
|
|---|
| 154 | TEMPLATE_libcsubasm =
|
|---|
| 155 | TEMPLATE_libcsubasm.profiled_EXTENDS = libcasm.profiled
|
|---|
| 156 | TEMPLATE_libcsubasm.profiled_NOINST = 1
|
|---|
| 157 |
|
|---|
| 158 |
|
|---|
| 159 | # Only permit #include <include/emx/bigint.h>.
|
|---|
| 160 | TEMPLATE_bldprog = Build programs
|
|---|
| 161 | TEMPLATE_bldprog_TOOL = GCC3
|
|---|
| 162 | TEMPLATE_bldprog_DEFS = __LIBC_BUILD_PROGRAM__
|
|---|
| 163 | TEMPLATE_bldprog_INCS = $(PATH_LIBC_ROOT)
|
|---|
| 164 |
|
|---|
| 165 |
|
|---|
| 166 | #
|
|---|
| 167 | # Macro which configures additional library targets.
|
|---|
| 168 | #
|
|---|
| 169 | define def_libc_variants
|
|---|
| 170 | ifdef CFG_LIBC_LOGSTRICT_LIBS
|
|---|
| 171 | LIBRARIES += $(1)_l
|
|---|
| 172 | $(1)_l_TEMPLATE = $($(1)_TEMPLATE).logstrict
|
|---|
| 173 | $(1)_l_DEFS = $($(1)_DEFS)
|
|---|
| 174 | $(1)_l_DEFS.$(BUILD_TYPE) = $($(1)_DEFS.$(BUILD_TYPE))
|
|---|
| 175 | $(1)_l_DEFS.$(BUILD_TARGET) = $($(1)_DEFS.$(BUILD_TARGET))
|
|---|
| 176 | $(1)_l_DEFS.$(BUILD_TARGET_ARCH) = $($(1)_DEFS.$(BUILD_TARGET_ARCH))
|
|---|
| 177 | $(1)_l_DEFS.$(BUILD_TARGET_CPU) = $($(1)_DEFS.$(BUILD_TARGET_CPU))
|
|---|
| 178 | $(1)_l_INCS = $($(1)_INCS)
|
|---|
| 179 | $(1)_l_INCS.$(BUILD_TYPE) = $($(1)_INCS.$(BUILD_TYPE))
|
|---|
| 180 | $(1)_l_INCS.$(BUILD_TARGET) = $($(1)_INCS.$(BUILD_TARGET))
|
|---|
| 181 | $(1)_l_INCS.$(BUILD_TARGET_ARCH) = $($(1)_INCS.$(BUILD_TARGET_ARCH))
|
|---|
| 182 | $(1)_l_INCS.$(BUILD_TARGET_CPU) = $($(1)_INCS.$(BUILD_TARGET_CPU))
|
|---|
| 183 | $(1)_l_CFLAGS = $($(1)_CFLAGS)
|
|---|
| 184 | $(1)_l_CFLAGS.$(BUILD_TYPE) = $($(1)_CFLAGS.$(BUILD_TYPE))
|
|---|
| 185 | $(1)_l_CFLAGS.$(BUILD_TARGET) = $($(1)_CFLAGS.$(BUILD_TARGET))
|
|---|
| 186 | $(1)_l_CFLAGS.$(BUILD_TARGET_ARCH) = $($(1)_CFLAGS.$(BUILD_TARGET_ARCH))
|
|---|
| 187 | $(1)_l_CFLAGS.$(BUILD_TARGET_CPU) = $($(1)_CFLAGS.$(BUILD_TARGET_CPU))
|
|---|
| 188 | $(1)_l_SOURCES = $($(1)_SOURCES)
|
|---|
| 189 | $(1)_l_SOURCES.$(BUILD_TYPE) = $($(1)_SOURCES.$(BUILD_TYPE))
|
|---|
| 190 | $(1)_l_SOURCES.$(BUILD_TARGET) = $($(1)_SOURCES.$(BUILD_TARGET))
|
|---|
| 191 | $(1)_l_SOURCES.$(BUILD_TARGET_ARCH) = $($(1)_SOURCES.$(BUILD_TARGET_ARCH))
|
|---|
| 192 | $(1)_l_SOURCES.$(BUILD_TARGET_CPU) = $($(1)_SOURCES.$(BUILD_TARGET_CPU))
|
|---|
| 193 | endif # CFG_LIBC_LOGSTRICT_LIBS
|
|---|
| 194 |
|
|---|
| 195 | ifdef CFG_LIBC_PROFILED_LIBS
|
|---|
| 196 | LIBRARIES += $(1)_p
|
|---|
| 197 | $(1)_p_TEMPLATE = $($(1)_TEMPLATE).profiled
|
|---|
| 198 | $(1)_p_DEFS = $($(1)_DEFS)
|
|---|
| 199 | $(1)_p_DEFS.$(BUILD_TYPE) = $($(1)_DEFS.$(BUILD_TYPE))
|
|---|
| 200 | $(1)_p_DEFS.$(BUILD_TARGET) = $($(1)_DEFS.$(BUILD_TARGET))
|
|---|
| 201 | $(1)_p_DEFS.$(BUILD_TARGET_ARCH) = $($(1)_DEFS.$(BUILD_TARGET_ARCH))
|
|---|
| 202 | $(1)_p_DEFS.$(BUILD_TARGET_CPU) = $($(1)_DEFS.$(BUILD_TARGET_CPU))
|
|---|
| 203 | $(1)_p_INCS = $($(1)_INCS)
|
|---|
| 204 | $(1)_p_INCS.$(BUILD_TYPE) = $($(1)_INCS.$(BUILD_TYPE))
|
|---|
| 205 | $(1)_p_INCS.$(BUILD_TARGET) = $($(1)_INCS.$(BUILD_TARGET))
|
|---|
| 206 | $(1)_p_INCS.$(BUILD_TARGET_ARCH) = $($(1)_INCS.$(BUILD_TARGET_ARCH))
|
|---|
| 207 | $(1)_p_INCS.$(BUILD_TARGET_CPU) = $($(1)_INCS.$(BUILD_TARGET_CPU))
|
|---|
| 208 | $(1)_p_CFLAGS = $($(1)_CFLAGS)
|
|---|
| 209 | $(1)_p_CFLAGS.$(BUILD_TYPE) = $($(1)_CFLAGS.$(BUILD_TYPE))
|
|---|
| 210 | $(1)_p_CFLAGS.$(BUILD_TARGET) = $($(1)_CFLAGS.$(BUILD_TARGET))
|
|---|
| 211 | $(1)_p_CFLAGS.$(BUILD_TARGET_ARCH) = $($(1)_CFLAGS.$(BUILD_TARGET_ARCH))
|
|---|
| 212 | $(1)_p_CFLAGS.$(BUILD_TARGET_CPU) = $($(1)_CFLAGS.$(BUILD_TARGET_CPU))
|
|---|
| 213 | $(1)_p_SOURCES = $($(1)_SOURCES)
|
|---|
| 214 | $(1)_p_SOURCES.$(BUILD_TYPE) = $($(1)_SOURCES.$(BUILD_TYPE))
|
|---|
| 215 | $(1)_p_SOURCES.$(BUILD_TARGET) = $($(1)_SOURCES.$(BUILD_TARGET))
|
|---|
| 216 | $(1)_p_SOURCES.$(BUILD_TARGET_ARCH) = $($(1)_SOURCES.$(BUILD_TARGET_ARCH))
|
|---|
| 217 | $(1)_p_SOURCES.$(BUILD_TARGET_CPU) = $($(1)_SOURCES.$(BUILD_TARGET_CPU))
|
|---|
| 218 | endif # CFG_LIBC_PROFILED_LIBS
|
|---|
| 219 | endef
|
|---|
| 220 |
|
|---|
| 221 | define def_libc_variants2
|
|---|
| 222 | LIBC_LIBRARIES += $(1)
|
|---|
| 223 | LIBC_SUB_LIBRARIES += $(1)
|
|---|
| 224 | $(def_libc_variants)
|
|---|
| 225 | endef
|
|---|
| 226 |
|
|---|
| 227 | LIBC_CONFIG_VARIANT_LIBS = $(eval $(call def_libc_variants2,$(1)))
|
|---|
| 228 | LIBC_CONFIG_VARIANT_LIBS_OTHER = $(eval $(call def_libc_variants,$(1)))
|
|---|
| 229 |
|
|---|
| 230 |
|
|---|
| 231 | #
|
|---|
| 232 | # Just stub this for sub makefile.
|
|---|
| 233 | # Need better solution later...
|
|---|
| 234 | #
|
|---|
| 235 | $(LIBC-STD.H):
|
|---|
| 236 |
|
|---|