]> rtime.felk.cvut.cz Git - omk.git/blobdiff - snippets/linux.omk
Ensure that OBJ_EXT, LIB_EXT, LIB_PREF and ASM_EXT is defined for all targets.
[omk.git] / snippets / linux.omk
index d477ab1eee853d145e905152b1deb480bb79dd9c..e5017be39cb25cf35524d1a9892a817de1f15863 100644 (file)
 # OMK_CPPFLAGS    .. C preprocessor flags
 # LDFLAGS         .. linker flags for programs linking
 
+# Output variables:
+# OBJ_EXT - extension of object files
+# LIB_EXT - extension of library files
+# SOLIB_EXT - extension of dynamically linked libraries
+# LIB_PREF - prefix for library files
+# ASM_EXT - extension of assembler sources
+
 BUILD_DIR_NAME = _build
 COMPILED_DIR_NAME = _compiled
 ifndef GROUP_DIR_NAME
@@ -55,21 +62,18 @@ export BUILD_OS
 
 LOCAL_BUILD_DIR  = $(USER_OBJS_DIR)
 
-# Assign default values to CFLAGS variable. If the variable is defined
+# Assign default values to OMK_CFLAGS variable. If the variable is defined
 # earlier (i.g. in config.omk), it is not overriden here.
-CFLAGS ?= -O2 -Wall
-CXXFLAGS ?= -O2 -Wall
+OMK_CFLAGS ?= -O2 -Wall
+OMK_CXXFLAGS ?= -O2 -Wall
 
 
-CPPFLAGS  += -I $(USER_INCLUDE_DIR)
+INCLUDES  += -I $(USER_INCLUDE_DIR)
 
 LOADLIBES += -L$(USER_LIB_DIR) 
 
 LOADLIBES += $(lib_LOADLIBES:%=-l%)
 
-LIB_CPPFLAGS += $(CPPFLAGS)
-LIB_CFLAGS   += $(CFLAGS)
-
 ifeq ($(TARGET_OS),win32)
   EXE_SUFFIX = .exe
   SOLIB_EXT = dll
@@ -78,6 +82,11 @@ else
   SOLIB_PICFLAGS += -fpic
 endif
 
+OBJ_EXT = .o
+LIB_EXT = .a
+LIB_PREF = lib
+ASM_EXT = .S
+
 #vpath %.c $(SOURCES_DIR)
 #vpath %.cc $(SOURCES_DIR)
 #vpath %.cxx $(SOURCES_DIR)
@@ -107,7 +116,7 @@ c_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
        $(CPPFLAGS) $(OMK_CFLAGS) $(CFLAGS) -DOMK_FOR_USER
 
 cc_o_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
-       $(CPPFLAGS) $(OMK_CFLAGS) $(CFLAGS) $(OMK_CXXFLAGS) $(CXXFLAGS) -DOMK_FOR_USER
+       $(CPPFLAGS) $(OMK_CXXFLAGS) $(CXXFLAGS) -DOMK_FOR_USER
 
 S_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
        $(CPPFLAGS) $(OMK_CFLAGS) $(CFLAGS) $(ASFLAGS) -DOMK_FOR_USER
@@ -167,6 +176,16 @@ $(2): $(1) $$(GEN_HEADERS)
 endif
 endef
 
+# Syntax: $(call COMPILE_s_o_template,<source>,<target>,<additional c-flags>)
+define COMPILE_s_o_template
+ifeq ($$($(2)_s_TARGET),)
+$(2)_s_TARGET=1
+$(2): $(1) $$(GEN_HEADERS)
+       @$(QUIET_CMD_ECHO) "  AS      $$@"
+       $(Q)$$(S_o_COMPILE) $(3) -o $$@ -c $$<
+endif
+endef
+
 # Syntax: $(call COMPILE_idl_template,</path/to/src.idl>,<basename>)
 define COMPILE_idl_template
 
@@ -180,18 +199,19 @@ $(2).c $(2)-stubs.c $(2)-skels.c $(2)-common.c $(2).h: $(1) $$(wildcard $$(first
 endif
 endef
 
+# GCC recognizes files matching this pattern as C++
+CXX_PATTERN = %.cc %.cp %.cxx %.cpp %.CPP %.c++ %.C
+
 # Syntax: $(call COMPILE_templates,<sources_abs>,<suffix>,<obj-prefix>)
 # Note: The newlines after $(call ) are IMPORTANT!!!
 define COMPILE_templates
 $(foreach src,$(filter %.c,$(1)),$(call COMPILE_c_o_template,$(src),$(3)$(notdir $(src:%.c=%$(2))),)
 )
-$(foreach src,$(filter %.cc,$(1)),$(call COMPILE_cc_o_template,$(src),$(3)$(notdir $(src:%.cc=%$(2))),)
-)
-$(foreach src,$(filter %.cxx,$(1)),$(call COMPILE_cc_o_template,$(src),$(3)$(notdir $(src:%.cxx=%$(2))),)
+$(foreach src,$(filter $(CXX_PATTERN),$(1)),$(call COMPILE_cc_o_template,$(src),$(3)$(notdir $(basename $(src))$(2)),)
 )
-$(foreach src,$(filter %.cpp,$(1)),$(call COMPILE_cc_o_template,$(src),$(3)$(notdir $(src:%.cpp=%$(2))),)
+$(foreach src,$(filter %.S,$(1)),$(call COMPILE_S_o_template,$(src),$(3)$(notdir $(basename $(src))$(2)),)
 )
-$(foreach src,$(filter %.S,$(1)),$(call COMPILE_S_o_template,$(src),$(3)$(notdir $(src:%.S=%$(2))),)
+$(foreach src,$(filter %.s,$(1)),$(call COMPILE_s_o_template,$(src),$(3)$(notdir $(basename $(src))$(2)),)
 )
 endef
 
@@ -209,7 +229,6 @@ TARGET_IDLS = $($(1)_SERVER_IDL) $($(1)_CLIENT_IDL) $($(1)_IDL)
 TARGET_CFLAGS   = $(if $($(1)_CFLAGS),$($(1)_CFLAGS),$(OMK_CFLAGS))
 TARGET_CXXFLAGS = $(if $($(1)_CXXFLAGS),$($(1)_CXXFLAGS),$(OMK_CXXFLAGS))
 TARGET_CPPFLAGS = $(if $($(1)_CPPFLAGS),$($(1)_CPPFLAGS),$(OMK_CPPFLAGS))
-LINK_WITH_CXX = $(filter %.cc,$(TARGET_SOURCES))$(filter %.cxx,$(TARGET_SOURCES))$(filter %.cpp,$(TARGET_SOURCES))
 
 # Syntax: $(call PROGRAM_template,<executable-name>,<dir>,<executable-suffix>,<linker-sript>)
 define PROGRAM_template
@@ -222,10 +241,10 @@ $(2)/$(1)$(3): OMK_CXXFLAGS=$(TARGET_CXXFLAGS)
 $(2)/$(1)$(3): OMK_CPPFLAGS=$(TARGET_CPPFLAGS)
 $(2)/$(1)$(3): $(TARGET_OBJS)
        @$(QUIET_CMD_ECHO) "  LINK    $$@"
-       $(Q) $(if $(LINK_WITH_CXX),$$(CXX),$$(CC)) \
+       $(Q) $(if $(filter $(CXX_PATTERN),$(TARGET_SOURCES)),$$(CXX),$$(CC)) \
          $(TARGET_OBJS) $$($(1)_LIBS:%=-l%) $$(LOADLIBES) $$(OMK_LDFLAGS) $$(LDFLAGS) $$($(1)_LDFLAGS) -Wl,-rpath-link,$(USER_LIB_DIR) -Wl,-Map,$(USER_OBJS_DIR)/$(1).exe.map -o $$@
        @echo "$(2)/$(1)$(3): \\" >$(USER_OBJS_DIR)/$(1).exe.d
-       @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(USER_OBJS_DIR)/$(1).exe.map|tr '&' '\134'  >>$(USER_OBJS_DIR)/$(1).exe.d
+       @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(USER_OBJS_DIR)/$(1).exe.map|tr '&' '\134' | grep -v '^  linker stubs'  >>$(USER_OBJS_DIR)/$(1).exe.d
        @echo >>$(USER_OBJS_DIR)/$(1).exe.d
 
 binary-pass-local: $(2)/$(1)$(3)