source: trunk/Config.kmk@ 21936

Last change on this file since 21936 was 21936, checked in by dmik, 14 years ago

Config.kmk: Use -idirafter instead of C_INCLUDE_PATH for Toolkit headers.

-idirafter guarantees that the directory is searched not only after user directories
but also after system directories (the C_INCLUDE_PATH ones are searched before
them). This fixes building Odin with GCC installed to the system location using
RPM.

  • Property svn:eol-style set to native
File size: 10.1 KB
RevLine 
[21690]1## @file
2# Global Project Configuration File
3#
4
5#------------------------------------------------------------------------------
6# Global definitions
7#------------------------------------------------------------------------------
8
[21796]9#
[21798]10# @todo kBuild forgets to do that on OS/2
11#
12INST_DLL = bin/
13
14#
[21796]15# Watcom Linker is required because of some Watcom-specific directives (used
16# e.g. to compensate for the lack of SEGMENTS support in .DEF in emxomfld, see
17# svn.netlabs.org/libc/ticket/252). Besides, it's more stable than the outdated
18# IBM linker.
19#
20ifn1of ($(EMXOMFLD_TYPE),WLINK wlink)
21$(error You must use Watcom Linker and set EMXOMFLD_TYPE to WLINK (it's now $(EMXOMFLD_TYPE)))
22endif
23
[21864]24#
25# TCPV40HDRS requires an alternative libsocket.lib located in a separate directory.
26# Try to deduce it.
27#
28PATH_GCC_LIB_TCPIPV4 := $(dir $(shell gcc -print-file-name=libsocket.lib))/tcpipv4
29ifeq ($(PATH_GCC_LIB_TCPIPV4),/tcpipv4)
30$(error Could not detect the GCC TCPIPV4 socket library path.)
31endif
32
[21756]33##
[21767]34# Defines an import library target for the given DLL target.
35#
[21756]36# @param 1 DLL target name.
[21767]37# @param 2 .def file (defaults to <1>.def).
38# @param 3 .def file for debug (defaults to <2>).
[21812]39# @param 4 list of object files containing additional exports.
40# @param 5 non-empty to disable .def post-processing with ImpDef.
[21756]41#
[21812]42odin_implib = $(evalcall odin_implib_common,$(1),$(2),$(3),$(4),$(5))
[21767]43
44define odin_implib_common
45 local target := $(1)
[21822]46 local def := $(abspath $(PATH_SUB_CURRENT)/$(if $(2),$(2),$(1).def))
47 local def_exp := $(notdir $(basename $(def))).exp.def
[21767]48ifneq ($(3),)
[21822]49 #local def_debug := $(abspath $(PATH_SUB_CURRENT)/$(3))
50 #local def_exp_debug := $(notdir $(basename $(def_debug))).exp.def
[21767]51endif
[21812]52 local obj_list := $(4)
53 local do_def_exp := $(if $(5),,1)
[21756]54 $(eval $(def_odin_implib))
55endef
56
57define def_odin_implib
[21767]58 LIBRARIES += $(target)_imp
59 $(target)_imp_TEMPLATE = OdinCxx
60 $(target)_imp_NAME = $(target)
[21812]61 $$$$($(target)_imp_0_OUTDIR)/$(def_exp): $(def) \
62 $(addsuffix $$$$(TOOL_GXX3OMF_COBJSUFF), \
63 $(addprefix $$$$($(target)_0_OUTDIR)/,$(obj_list))) \
64 $$(PATH_STAGE_BIN)/impdef.exe | $$$$(dir $$$$@)
[21772]65 %$$(call MSG_TOOL,impdef,$(target)_imp,$(abspath $$<),$$@)
[21812]66ifneq ($(do_def_exp),)
67 $(QUIET2)$$(PATH_STAGE_BIN)/impdef.exe $(def) $$@
68else
69 $(QUIET2)$(CP) $(def) $$@
70endif
71ifneq ($(obj_list),)
72 $(QUIET2)emxexp.exe \
73 $(addsuffix $$(TOOL_GXX3OMF_COBJSUFF), \
74 $(addprefix $$($(target)_0_OUTDIR)/,$(obj_list))) >> $$@
75endif
[21767]76ifeq ($(def_exp_debug),)
[21812]77 ifneq ($(do_def_exp)$(obj_list),)
[21767]78 $(target)_imp_SOURCES = $$($(target)_imp_0_OUTDIR)/$(def_exp)
79 $(target)_imp_CLEAN += $$($(target)_imp_0_OUTDIR)/$(def_exp)
[21777]80 else
[21784]81 $(target)_imp_SOURCES = $(def)
[21777]82 endif
[21756]83else
[21812]84 ifneq ($(do_def_exp)$(obj_list),)
[21772]85 $(target)_imp_SOURCES.release = $$($(target)_imp_0_OUTDIR)/$(def_exp)
86 $(target)_imp_CLEAN.release += $$($(target)_imp_0_OUTDIR)/$(def_exp)
[21812]87 $$$$($(target)_imp_0_OUTDIR)/$(def_exp_debug): $(def_debug) \
88 $(addsuffix $$$$(TOOL_GXX3OMF_COBJSUFF), \
89 $(addprefix $$$$($(target)_0_OUTDIR)/,$(obj_list))) \
90 $$(PATH_STAGE_BIN)/impdef.exe | $$$$(dir $$$$@)
[21772]91 %$$(call MSG_TOOL,impdef,$(target)_imp,$(abspath $$<),$$@)
[21812]92ifneq ($(do_def_exp),)
93 $(QUIET2)$$(PATH_STAGE_BIN)/impdef.exe $(def_debug) $$@
94else
95 $(QUIET2)$(CP) $(def_debug) $$@
96endif
97ifneq ($(obj_list),)
98 $(QUIET2)emxexp.exe \
99 $(addsuffix $$(TOOL_GXX3OMF_COBJSUFF), \
100 $(addprefix $$($(target)_0_OUTDIR)/,$(obj_list))) >> $$@
101endif
[21772]102 $(target)_imp_SOURCES.debug = $$($(target)_imp_0_OUTDIR)/$(def_exp_debug)
103 $(target)_imp_CLEAN.debug += $$($(target)_imp_0_OUTDIR)/$(def_exp_debug)
[21777]104 else
[21784]105 $(target)_imp_SOURCES.release = $(def)
106 $(target)_imp_SOURCES.debug = $(def_debug)
[21777]107 endif
[21756]108endif
109endef
110
111##
[21812]112# Shortcut to $(call odin_implib,<1>,<2>,<3>,<4>,1) used to disable .def file
[21777]113# post-processing with the ImpDef tool.
[21767]114#
[21756]115# @param 1 DLL target name.
[21777]116# @param 2 .def file (defaults to <1>.def).
117# @param 3 .def file for debug (defaults to <2>).
[21812]118# @param 4 list of object files containing additional exports.
[21756]119#
[21821]120odin_implib_no_expdef = $(call odin_implib,$(1),$(2),$(3),$(4),1)
[21777]121
122##
[21812]123# Shortcut to $(call odin_implib, <1>,<1>.def,<1>dbg.def,<2>).
[21767]124#
[21777]125# @param 1 DLL target name.
[21812]126# @param 2 list of object files containing additional exports.
[21777]127#
[21812]128odin_implib_2 = $(call odin_implib,$(1),$(1).def,$(1)dbg.def,$(2))
[21756]129
[21777]130##
[21812]131# Shortcut to $(call odin_implib_no_expdef,<1>,<1>.def,<1>dbg.def,<2>).
[21767]132#
[21777]133# @param 1 DLL target name.
[21812]134# @param 2 list of object files containing additional exports.
[21777]135#
[21812]136odin_implib_2_no_expdef = $(call odin_implib_no_expdef,$(1),$(1).def,$(1)dbg.def,$(2))
[21777]137
138#
[21746]139# Handler for Wine RC (.orc) source files
[21767]140#
[21746]141KBUILD_SRC_HANDLERS += .orc:def_src_handler_wrc
142define def_src_handler_wrc
143local type := WRC
144 $(kb-src-one 2)
145endef
[21842]146PROPS_ACCUMULATE_R += WRCFLAGS
[21746]147
[21767]148#
[21749]149# Override handler for .asm files to compile them with the MASM-compilant tool
[21767]150#
[21749]151KBUILD_SRC_HANDLERS := .asm:def_src_handler_masm $(KBUILD_SRC_HANDLERS)
152define def_src_handler_masm
153local type := $(if $(TOOL_$(tool)_COMPILE_MASM_CMDS),MASM,AS)
154 $(kb-src-one 2)
155endef
[21842]156PROPS_ACCUMULATE_R += $(if $(TOOL_$(tool)_COMPILE_MASM_CMDS),MASM,AS)FLAGS
[21749]157
[21690]158#------------------------------------------------------------------------------
[21746]159# Tools
160#------------------------------------------------------------------------------
161
[21767]162#
[21746]163# Add support for Wine RC to the GCC compiler
[21767]164#
[21746]165TOOL_GXX3OMF_WRC = $(PATH_STAGE_BIN)/winerc.exe
[21861]166TOOL_GXX3OMF_WRCOBJSUFF = .orc$(TOOL_GXX3OMF_COBJSUFF)
[21842]167TOOL_GXX3OMF_WRCFLAGS =
[21746]168TOOL_GXX3OMF_COMPILE_WRC_OUTPUT = $(outbase).orc.s
[21795]169TOOL_GXX3OMF_COMPILE_WRC_DEPEND = $(TOOL_GXX3OMF_WRC)
[21746]170TOOL_GXX3OMF_COMPILE_WRC_DEPORD =
171define TOOL_GXX3OMF_COMPILE_WRC_CMDS
[21842]172 $(QUIET)$(TOOL_GXX3OMF_WRC) -s -I$(subst /,\\,$(abspath $(dir $(source))))\
[21747]173 $(flags) $(addprefix -I, $(subst /,\\,$(incs))) $(addprefix -D, $(defs))\
174 $(subst /,\\,$(abspath $(source))) \
175 -o $(TOOL_GXX3OMF_COMPILE_WRC_OUTPUT)
[21778]176 $(QUIET)$(TOOL_GXX3OMF_CC) -E -I$(subst /,\\,$(abspath $(dir $(source))))\
[21842]177 $(addprefix -I, $(incs)) -I . $(addprefix -D, $(defs))\
[21748]178 -x c $(abspath $(source)) \
179 | $(DEP_PRE) -f -s -o $(dep) -t $(obj) -
[21842]180 $(subst $(source),$(TOOL_GXX3OMF_COMPILE_WRC_OUTPUT),\
181 $(subst $(flags),,$(TOOL_GXX3OMF_COMPILE_AS_CMDS)))
[21746]182endef
183
[21798]184#
185# Add support for MASM to the GCC compiler
186#
[21804]187TOOL_GXX3OMF_MASM = $(PATH_TOOL_ALP)
[21749]188TOOL_GXX3OMF_MASMFLAGS = -Mb
189TOOL_GXX3OMF_COMPILE_MASM_OUTPUT = $(outbase).lst
190TOOL_GXX3OMF_COMPILE_MASM_DEPEND =
191TOOL_GXX3OMF_COMPILE_MASM_DEPORD =
192define TOOL_GXX3OMF_COMPILE_MASM_CMDS
[21788]193 $(QUIET)$(TOOL_GXX3OMF_MASM) -D:__GNUC__ -D:__EMX__\
[21749]194 $(flags) $(addsuffix /,$(addprefix -I:, $(incs))) $(addprefix -D:, $(defs))\
195 $(source)\
196 -Fl:$(outbase).lst\
197 -Fd:$(dep)\
198 -Fo:$(obj)
199endef
200
[21746]201#------------------------------------------------------------------------------
[21690]202# Common libraries referenced by components
203#------------------------------------------------------------------------------
204
205#------------------------------------------------------------------------------
206# General Stuff
207#------------------------------------------------------------------------------
208
[21912]209KBUILD_UNIT_PATHS += $(PATH_ROOT)
210
[21733]211TEMPLATE_OdinCxx = Odin C/C++ sources
[21912]212TEMPLATE_OdinCxx_USES = Extra
[21695]213TEMPLATE_OdinCxx_TOOL = GXX3OMF
[21736]214TEMPLATE_OdinCxx_INCS = $(PATH_ROOT)/include/win $(PATH_ROOT)/include $(PATH_ROOT)/include/incl_gcc
[21804]215TEMPLATE_OdinCxx_DEFS = USE_OS2_TOOLKIT_HEADERS OS2EMX_PLAIN_CHAR \
216 __WIN32OS2__ __i386__
[21821]217TEMPLATE_OdinCxx_DEFS.debug = DEBUG
[21825]218TEMPLATE_OdinCxx_LDFLAGS = -Zlinker '"DISABLE 1121"'
[21695]219
[21912]220# generate .sym files but don't put them in a separate dir
221TEMPLATE_OdinCxx_LD_DEBUG = split
222TEMPLATE_OdinCxx_DEBUG_STAGE = nul
223
[21803]224TEMPLATE_OdinDLL = Odin DLL
225TEMPLATE_OdinDLL_EXTENDS = OdinCxx
[21804]226TEMPLATE_OdinDLL_EXTENDS_BY = appending
[21864]227TEMPLATE_OdinDLL_DEFS = $(TEMPLATE_OdinCxx_DEFS) __WINE__ COMCTL32UNDOC TCPV40HDRS __USE_LIBC_TCPIP
[21803]228TEMPLATE_OdinDLL_LIBS = $(PATH_STAGE_LIB)/odincrt.lib \
229 $(PATH_STAGE_LIB)/initdll.lib
[21864]230TEMPLATE_OdinDLL_LDFLAGS = -L$(PATH_GCC_LIB_TCPIPV4) # necessary for TCPV40HDRS
[21842]231TEMPLATE_OdinDLL_WRCFLAGS = -p_$(target)
[21803]232
[21842]233TEMPLATE_OdinSimpleDLL = Odin DLL with ordinary entry point
234TEMPLATE_OdinSimpleDLL_EXTENDS = OdinDLL
235TEMPLATE_OdinSimpleDLL_EXTENDS_BY = overriding
236TEMPLATE_OdinSimpleDLL_LIBS = $(PATH_STAGE_LIB)/dllentry.o $(TEMPLATE_OdinDLL_LIBS)
237TEMPLATE_OdinSimpleDLL_WRCFLAGS = -p_Resource
238
[21794]239TEMPLATE_OdinCRT = OdinCRT DLL
[21695]240TEMPLATE_OdinCRT_EXTENDS = OdinCxx
[21804]241TEMPLATE_OdinCRT_EXTENDS_BY = appending
[21803]242TEMPLATE_OdinCRT_DEFS = __WINE__
243TEMPLATE_OdinCRT_LIBS = $(PATH_STAGE_LIB)/initdll.lib
[21695]244
[21803]245TEMPLATE_OdinApp = Odin application
[21794]246TEMPLATE_OdinApp_EXTENDS = OdinCxx
[21695]247
[21830]248TEMPLATE_OdinTestApp = Odin application
249TEMPLATE_OdinTestApp_EXTENDS= OdinApp
250TEMPLATE_OdinTestApp_STAGE = tests/
251
[21690]252#------------------------------------------------------------------------------
253# GCC Stuff
254#------------------------------------------------------------------------------
255
256#------------------------------------------------------------------------------
257# Other Stuff
258#------------------------------------------------------------------------------
259
260#
261# Include a site-specific config for local overrides
262#
263ifndef LOCALCFG
264 LOCALCFG := $(wildcard $(PATH_ROOT)/LocalConfig.kmk)
265 ifneq ($(LOCALCFG),)
266 include $(LOCALCFG)
267 endif
268endif
[21804]269
270#------------------------------------------------------------------------------
271# Post-processing
272#------------------------------------------------------------------------------
273
274ifeq ($(PATH_TOOL_ALP),)
275ifneq ($(PATH_SDK_OS2TK4),)
276PATH_TOOL_ALP := $(PATH_SDK_OS2TK4)/bin/alp.exe
277else
278PATH_TOOL_ALP := alp.exe
279endif
280endif
281
282ifneq ($(PATH_SDK_OS2TK4),)
283#
284# We can't add Toolkit includes in _INCS (it will casuse then to be searched
[21936]285# before GCC headers and lead to conflicts), so use -idirafter.
[21804]286#
[21936]287TEMPLATE_OdinCxx_CFLAGS += -idirafter $(PATH_SDK_OS2TK4)/h
288TEMPLATE_OdinCxx_CXXFLAGS += -idirafter $(PATH_SDK_OS2TK4)/h
[21804]289endif
Note: See TracBrowser for help on using the repository browser.