source: branches/gcc-kmk/Config.kmk@ 21813

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

Config.kmk: Add support for custom C++ exports to odin_implib macro.

  • Property svn:eol-style set to native
File size: 8.8 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
[21756]24##
[21767]25# Defines an import library target for the given DLL target.
26#
[21756]27# @param 1 DLL target name.
[21767]28# @param 2 .def file (defaults to <1>.def).
29# @param 3 .def file for debug (defaults to <2>).
[21812]30# @param 4 list of object files containing additional exports.
31# @param 5 non-empty to disable .def post-processing with ImpDef.
[21756]32#
[21812]33odin_implib = $(evalcall odin_implib_common,$(1),$(2),$(3),$(4),$(5))
[21767]34
35define odin_implib_common
36 local target := $(1)
[21777]37 local def := $(abspath $(PATH_SUB_CURRENT)/$(if $(2),$(2),$(1).def))
38 local def_exp := $(notdir $(basename $(def))).exp.def
[21767]39ifneq ($(3),)
[21777]40 local def_debug := $(abspath $(PATH_SUB_CURRENT)/$(3))
41 local def_exp_debug := $(notdir $(basename $(def_debug))).exp.def
[21767]42endif
[21812]43 local obj_list := $(4)
44 local do_def_exp := $(if $(5),,1)
[21756]45 $(eval $(def_odin_implib))
46endef
47
48define def_odin_implib
[21767]49 LIBRARIES += $(target)_imp
50 $(target)_imp_TEMPLATE = OdinCxx
51 $(target)_imp_NAME = $(target)
[21812]52 $$$$($(target)_imp_0_OUTDIR)/$(def_exp): $(def) \
53 $(addsuffix $$$$(TOOL_GXX3OMF_COBJSUFF), \
54 $(addprefix $$$$($(target)_0_OUTDIR)/,$(obj_list))) \
55 $$(PATH_STAGE_BIN)/impdef.exe | $$$$(dir $$$$@)
[21772]56 %$$(call MSG_TOOL,impdef,$(target)_imp,$(abspath $$<),$$@)
[21812]57ifneq ($(do_def_exp),)
58 $(QUIET2)$$(PATH_STAGE_BIN)/impdef.exe $(def) $$@
59else
60 $(QUIET2)$(CP) $(def) $$@
61endif
62ifneq ($(obj_list),)
63 $(QUIET2)emxexp.exe \
64 $(addsuffix $$(TOOL_GXX3OMF_COBJSUFF), \
65 $(addprefix $$($(target)_0_OUTDIR)/,$(obj_list))) >> $$@
66endif
[21767]67ifeq ($(def_exp_debug),)
[21812]68 ifneq ($(do_def_exp)$(obj_list),)
[21767]69 $(target)_imp_SOURCES = $$($(target)_imp_0_OUTDIR)/$(def_exp)
70 $(target)_imp_CLEAN += $$($(target)_imp_0_OUTDIR)/$(def_exp)
[21777]71 else
[21784]72 $(target)_imp_SOURCES = $(def)
[21777]73 endif
[21756]74else
[21812]75 ifneq ($(do_def_exp)$(obj_list),)
[21772]76 $(target)_imp_SOURCES.release = $$($(target)_imp_0_OUTDIR)/$(def_exp)
77 $(target)_imp_CLEAN.release += $$($(target)_imp_0_OUTDIR)/$(def_exp)
[21812]78 $$$$($(target)_imp_0_OUTDIR)/$(def_exp_debug): $(def_debug) \
79 $(addsuffix $$$$(TOOL_GXX3OMF_COBJSUFF), \
80 $(addprefix $$$$($(target)_0_OUTDIR)/,$(obj_list))) \
81 $$(PATH_STAGE_BIN)/impdef.exe | $$$$(dir $$$$@)
[21772]82 %$$(call MSG_TOOL,impdef,$(target)_imp,$(abspath $$<),$$@)
[21812]83ifneq ($(do_def_exp),)
84 $(QUIET2)$$(PATH_STAGE_BIN)/impdef.exe $(def_debug) $$@
85else
86 $(QUIET2)$(CP) $(def_debug) $$@
87endif
88ifneq ($(obj_list),)
89 $(QUIET2)emxexp.exe \
90 $(addsuffix $$(TOOL_GXX3OMF_COBJSUFF), \
91 $(addprefix $$($(target)_0_OUTDIR)/,$(obj_list))) >> $$@
92endif
[21772]93 $(target)_imp_SOURCES.debug = $$($(target)_imp_0_OUTDIR)/$(def_exp_debug)
94 $(target)_imp_CLEAN.debug += $$($(target)_imp_0_OUTDIR)/$(def_exp_debug)
[21777]95 else
[21784]96 $(target)_imp_SOURCES.release = $(def)
97 $(target)_imp_SOURCES.debug = $(def_debug)
[21777]98 endif
[21756]99endif
100endef
101
102##
[21812]103# Shortcut to $(call odin_implib,<1>,<2>,<3>,<4>,1) used to disable .def file
[21777]104# post-processing with the ImpDef tool.
[21767]105#
[21756]106# @param 1 DLL target name.
[21777]107# @param 2 .def file (defaults to <1>.def).
108# @param 3 .def file for debug (defaults to <2>).
[21812]109# @param 4 list of object files containing additional exports.
[21756]110#
[21812]111odin_implib_no_expdef = $(call odin_implib,$(1),$(2),(3),$(4),1)
[21777]112
113##
[21812]114# Shortcut to $(call odin_implib, <1>,<1>.def,<1>dbg.def,<2>).
[21767]115#
[21777]116# @param 1 DLL target name.
[21812]117# @param 2 list of object files containing additional exports.
[21777]118#
[21812]119odin_implib_2 = $(call odin_implib,$(1),$(1).def,$(1)dbg.def,$(2))
[21756]120
[21777]121##
[21812]122# Shortcut to $(call odin_implib_no_expdef,<1>,<1>.def,<1>dbg.def,<2>).
[21767]123#
[21777]124# @param 1 DLL target name.
[21812]125# @param 2 list of object files containing additional exports.
[21777]126#
[21812]127odin_implib_2_no_expdef = $(call odin_implib_no_expdef,$(1),$(1).def,$(1)dbg.def,$(2))
[21777]128
129#
[21746]130# Handler for Wine RC (.orc) source files
[21767]131#
[21746]132KBUILD_SRC_HANDLERS += .orc:def_src_handler_wrc
133define def_src_handler_wrc
134local type := WRC
135 $(kb-src-one 2)
136endef
137
[21767]138#
[21749]139# Override handler for .asm files to compile them with the MASM-compilant tool
[21767]140#
[21749]141KBUILD_SRC_HANDLERS := .asm:def_src_handler_masm $(KBUILD_SRC_HANDLERS)
142define def_src_handler_masm
143local type := $(if $(TOOL_$(tool)_COMPILE_MASM_CMDS),MASM,AS)
144 $(kb-src-one 2)
145endef
146
[21690]147#------------------------------------------------------------------------------
[21746]148# Tools
149#------------------------------------------------------------------------------
150
[21767]151#
[21746]152# Add support for Wine RC to the GCC compiler
[21767]153#
[21746]154TOOL_GXX3OMF_WRC = $(PATH_STAGE_BIN)/winerc.exe
[21749]155TOOL_GXX3OMF_WRCOBJSUFF = $(TOOL_GXX3OMF_COBJSUFF)
[21746]156TOOL_GXX3OMF_COMPILE_WRC_OUTPUT = $(outbase).orc.s
[21795]157TOOL_GXX3OMF_COMPILE_WRC_DEPEND = $(TOOL_GXX3OMF_WRC)
[21746]158TOOL_GXX3OMF_COMPILE_WRC_DEPORD =
159define TOOL_GXX3OMF_COMPILE_WRC_CMDS
[21778]160 $(QUIET)$(TOOL_GXX3OMF_WRC) -s -p _$(target) -I$(subst /,\\,$(abspath $(dir $(source))))\
[21747]161 $(flags) $(addprefix -I, $(subst /,\\,$(incs))) $(addprefix -D, $(defs))\
162 $(subst /,\\,$(abspath $(source))) \
163 -o $(TOOL_GXX3OMF_COMPILE_WRC_OUTPUT)
[21778]164 $(QUIET)$(TOOL_GXX3OMF_CC) -E -I$(subst /,\\,$(abspath $(dir $(source))))\
[21748]165 $(flags) $(addprefix -I, $(incs)) -I . $(addprefix -D, $(defs))\
166 -x c $(abspath $(source)) \
167 | $(DEP_PRE) -f -s -o $(dep) -t $(obj) -
[21747]168 $(subst $(source),$(TOOL_GXX3OMF_COMPILE_WRC_OUTPUT),$(TOOL_GXX3OMF_COMPILE_AS_CMDS))
[21746]169endef
170
[21798]171#
172# Add support for MASM to the GCC compiler
173#
[21804]174TOOL_GXX3OMF_MASM = $(PATH_TOOL_ALP)
[21749]175TOOL_GXX3OMF_MASMFLAGS = -Mb
176TOOL_GXX3OMF_COMPILE_MASM_OUTPUT = $(outbase).lst
177TOOL_GXX3OMF_COMPILE_MASM_DEPEND =
178TOOL_GXX3OMF_COMPILE_MASM_DEPORD =
179define TOOL_GXX3OMF_COMPILE_MASM_CMDS
[21788]180 $(QUIET)$(TOOL_GXX3OMF_MASM) -D:__GNUC__ -D:__EMX__\
[21749]181 $(flags) $(addsuffix /,$(addprefix -I:, $(incs))) $(addprefix -D:, $(defs))\
182 $(source)\
183 -Fl:$(outbase).lst\
184 -Fd:$(dep)\
185 -Fo:$(obj)
186endef
187
[21746]188#------------------------------------------------------------------------------
[21690]189# Common libraries referenced by components
190#------------------------------------------------------------------------------
191
192#------------------------------------------------------------------------------
193# General Stuff
194#------------------------------------------------------------------------------
195
[21733]196TEMPLATE_OdinCxx = Odin C/C++ sources
[21695]197TEMPLATE_OdinCxx_TOOL = GXX3OMF
[21736]198TEMPLATE_OdinCxx_INCS = $(PATH_ROOT)/include/win $(PATH_ROOT)/include $(PATH_ROOT)/include/incl_gcc
[21804]199TEMPLATE_OdinCxx_DEFS = USE_OS2_TOOLKIT_HEADERS OS2EMX_PLAIN_CHAR \
200 __WIN32OS2__ __i386__
[21695]201
[21803]202TEMPLATE_OdinDLL = Odin DLL
203TEMPLATE_OdinDLL_EXTENDS = OdinCxx
[21804]204TEMPLATE_OdinDLL_EXTENDS_BY = appending
[21803]205TEMPLATE_OdinDLL_DEFS = $(TEMPLATE_OdinCxx_DEFS) __WINE__ TCPV40HDRS COMCTL32UNDOC
206TEMPLATE_OdinDLL_LIBS = $(PATH_STAGE_LIB)/odincrt.lib \
207 $(PATH_STAGE_LIB)/initdll.lib
208
[21794]209TEMPLATE_OdinCRT = OdinCRT DLL
[21695]210TEMPLATE_OdinCRT_EXTENDS = OdinCxx
[21804]211TEMPLATE_OdinCRT_EXTENDS_BY = appending
[21803]212TEMPLATE_OdinCRT_DEFS = __WINE__
213TEMPLATE_OdinCRT_LIBS = $(PATH_STAGE_LIB)/initdll.lib
[21695]214
[21803]215TEMPLATE_OdinApp = Odin application
[21794]216TEMPLATE_OdinApp_EXTENDS = OdinCxx
[21695]217
[21690]218#------------------------------------------------------------------------------
219# GCC Stuff
220#------------------------------------------------------------------------------
221
222#------------------------------------------------------------------------------
223# Other Stuff
224#------------------------------------------------------------------------------
225
226#
227# Include a site-specific config for local overrides
228#
229ifndef LOCALCFG
230 LOCALCFG := $(wildcard $(PATH_ROOT)/LocalConfig.kmk)
231 ifneq ($(LOCALCFG),)
232 include $(LOCALCFG)
233 endif
234endif
[21804]235
236#------------------------------------------------------------------------------
237# Post-processing
238#------------------------------------------------------------------------------
239
240ifeq ($(PATH_TOOL_ALP),)
241ifneq ($(PATH_SDK_OS2TK4),)
242PATH_TOOL_ALP := $(PATH_SDK_OS2TK4)/bin/alp.exe
243else
244PATH_TOOL_ALP := alp.exe
245endif
246endif
247
248ifneq ($(PATH_SDK_OS2TK4),)
249#
250# We can't add Toolkit includes in _INCS (it will casuse then to be searched
251# before GCC headers and lead to conflicts), so use the environment variable.
252#
253C_INCLUDE_PATH := $(if $(C_INCLUDE_PATH),$(C_INCLUDE_PATH);)$(PATH_SDK_OS2TK4)/h
254CPLUS_INCLUDE_PATH := $(if $(CPLUS_INCLUDE_PATH),$(CPLUS_INCLUDE_PATH);)$(PATH_SDK_OS2TK4)/h
255endif
Note: See TracBrowser for help on using the repository browser.