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

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

Use ImpDef tool to modify .def file for import library generation.

This is necessary so that the import library give access to DLL exports
using their internal names (from the sources) rather than external ones
(presented in the DLL).

  • Property svn:eol-style set to native
File size: 5.3 KB
RevLine 
[21690]1## @file
2# Global Project Configuration File
3#
4
5#------------------------------------------------------------------------------
6# Global definitions
7#------------------------------------------------------------------------------
8
[21756]9##
[21767]10# Defines an import library target for the given DLL target.
11#
[21756]12# @param 1 DLL target name.
[21767]13# @param 2 .def file (defaults to <1>.def).
14# @param 3 .def file for debug (defaults to <2>).
[21756]15#
[21767]16odin_implib = $(evalcall odin_implib_common,$(1),$(2),$(3))
17
18define odin_implib_common
19 local target := $(1)
20 local def := $(if $(2),$(2),$(1).def)
21 local def_exp := $(basename $(def)).exp.def
22ifneq ($(3),)
23 local def_debug := $(3)
24 local def_exp_debug := $$$$($(1)_imp_0_OUTDIR)/$(basename $(def_debug)).exp.def
25endif
[21756]26 $(eval $(def_odin_implib))
27endef
28
29define def_odin_implib
[21767]30 LIBRARIES += $(target)_imp
31 $(target)_imp_TEMPLATE = OdinCxx
32 $(target)_imp_NAME = $(target)
33ifeq ($(def_exp_debug),)
34 $(target)_imp_SOURCES = $$($(target)_imp_0_OUTDIR)/$(def_exp)
35 $$$$($(target)_imp_0_OUTDIR)/$(def_exp): $(def) | $$$$(dir $$$$@)
36 $$(PATH_STAGE_BIN)/impdef $$< $$@
37 $(target)_imp_CLEAN += $$($(target)_imp_0_OUTDIR)/$(def_exp)
[21756]38else
[21767]39 $(target)_imp_SOURCES.release = $(def_exp)
40 $(def_exp): $(def) | $$$$(dir $$$$@)
41 $$(PATH_STAGE_BIN)/impdef $$< $$@
42 $(target)_imp_CLEAN += $(def_exp)
43 $(target)_imp_SOURCES.debug = $(def_exp_debug)
44 $(def_exp_debug): $(def_debug) | $$$$(dir $$$$@)
45 $$(PATH_STAGE_BIN)/impdef $$< $$@
46 $(target)_imp_CLEAN += $(def_exp_debug)
[21756]47endif
48endef
49
50##
[21767]51# Shortcut to $(evalcall odin_implib, <1>, <1>.def, <1>dbg.def).
52#
[21756]53# @param 1 DLL target name.
54#
[21767]55# @note Must be called with $(evalcall).
56#
57odin_implib_2 = $(call odin_implib,$(1),$(1).def,$(1)dbg.def)
[21756]58
[21767]59#
[21746]60# Handler for Wine RC (.orc) source files
[21767]61#
[21746]62KBUILD_SRC_HANDLERS += .orc:def_src_handler_wrc
63define def_src_handler_wrc
64local type := WRC
65 $(kb-src-one 2)
66endef
67
[21767]68#
[21749]69# Override handler for .asm files to compile them with the MASM-compilant tool
[21767]70#
[21749]71KBUILD_SRC_HANDLERS := .asm:def_src_handler_masm $(KBUILD_SRC_HANDLERS)
72define def_src_handler_masm
73local type := $(if $(TOOL_$(tool)_COMPILE_MASM_CMDS),MASM,AS)
74 $(kb-src-one 2)
75endef
76
[21690]77#------------------------------------------------------------------------------
[21746]78# Tools
79#------------------------------------------------------------------------------
80
[21767]81#
[21746]82# Add support for Wine RC to the GCC compiler
[21767]83#
[21746]84TOOL_GXX3OMF_WRC = $(PATH_STAGE_BIN)/winerc.exe
[21749]85TOOL_GXX3OMF_WRCOBJSUFF = $(TOOL_GXX3OMF_COBJSUFF)
[21746]86TOOL_GXX3OMF_COMPILE_WRC_OUTPUT = $(outbase).orc.s
87TOOL_GXX3OMF_COMPILE_WRC_DEPEND =
88TOOL_GXX3OMF_COMPILE_WRC_DEPORD =
89define TOOL_GXX3OMF_COMPILE_WRC_CMDS
[21748]90 $(QUIET)$(TOOL_GXX3OMF_WRC) -s \
[21747]91 $(flags) $(addprefix -I, $(subst /,\\,$(incs))) $(addprefix -D, $(defs))\
92 $(subst /,\\,$(abspath $(source))) \
93 -o $(TOOL_GXX3OMF_COMPILE_WRC_OUTPUT)
[21748]94 $(QUIET)$(TOOL_GXX3OMF_CC) -E \
95 $(flags) $(addprefix -I, $(incs)) -I . $(addprefix -D, $(defs))\
96 -x c $(abspath $(source)) \
97 | $(DEP_PRE) -f -s -o $(dep) -t $(obj) -
[21747]98 $(subst $(source),$(TOOL_GXX3OMF_COMPILE_WRC_OUTPUT),$(TOOL_GXX3OMF_COMPILE_AS_CMDS))
[21746]99endef
100
[21749]101TOOL_GXX3OMF_MASM = $(firstword $(PATH_TOOL_ALP) alp.exe)
102TOOL_GXX3OMF_MASMFLAGS = -Mb
103TOOL_GXX3OMF_COMPILE_MASM_OUTPUT = $(outbase).lst
104TOOL_GXX3OMF_COMPILE_MASM_DEPEND =
105TOOL_GXX3OMF_COMPILE_MASM_DEPORD =
106define TOOL_GXX3OMF_COMPILE_MASM_CMDS
107 $(QUIET)$(TOOL_GXX3OMF_MASM)\
108 $(flags) $(addsuffix /,$(addprefix -I:, $(incs))) $(addprefix -D:, $(defs))\
109 $(source)\
110 -Fl:$(outbase).lst\
111 -Fd:$(dep)\
112 -Fo:$(obj)
113endef
114
[21746]115#------------------------------------------------------------------------------
[21690]116# Common libraries referenced by components
117#------------------------------------------------------------------------------
118
119#------------------------------------------------------------------------------
120# General Stuff
121#------------------------------------------------------------------------------
122
[21733]123TEMPLATE_OdinCxx = Odin C/C++ sources
[21695]124TEMPLATE_OdinCxx_TOOL = GXX3OMF
[21736]125TEMPLATE_OdinCxx_INCS = $(PATH_ROOT)/include/win $(PATH_ROOT)/include $(PATH_ROOT)/include/incl_gcc
[21695]126TEMPLATE_OdinCxx_DEFS = __WIN32OS2__ __WINE__ __i386__ TCPV40HDRS COMCTL32UNDOC
127
128TEMPLATE_OdinCRT = OdinCRT library
129TEMPLATE_OdinCRT_EXTENDS = OdinCxx
130TEMPLATE_OdinCRT_EXTENDS_BY = overriding
131TEMPLATE_OdinCRT_DEFS = __WIN32OS2__ __WINE__ __i386__
132
133TEMPLATE_OdinCRT = Win32 application
134TEMPLATE_OdinCRT_EXTENDS = OdinCxx
135TEMPLATE_OdinCRT_EXTENDS_BY = overriding
136TEMPLATE_OdinCRT_DEFS = __WIN32OS2__ __i386__
137
[21733]138TEMPLATE_OdinCxxDLL = Odin C/C++ DLL
139TEMPLATE_OdinCxxDLL_EXTENDS = OdinCxx
140TEMPLATE_OdinCxxDLL_EXTENDS_BY = overriding
141TEMPLATE_OdinCxxDLL_LIBS = $(TEMPLATE_OdinCxx_LIBS) $(INSTTARGET_initdll)
142
[21690]143#------------------------------------------------------------------------------
144# GCC Stuff
145#------------------------------------------------------------------------------
146
147#------------------------------------------------------------------------------
148# Other Stuff
149#------------------------------------------------------------------------------
150
151#
152# Include a site-specific config for local overrides
153#
154ifndef LOCALCFG
155 LOCALCFG := $(wildcard $(PATH_ROOT)/LocalConfig.kmk)
156 ifneq ($(LOCALCFG),)
157 include $(LOCALCFG)
158 endif
159endif
Note: See TracBrowser for help on using the repository browser.