## Defines mak variables common to all Microsoft Windows MSCV configurations. ## This file is intended to be included by specific windows platform ## files ## ##============================================================================== ## ## Determine Windows Compiler version and correspoonding ## Flags. ## ##============================================================================== CL_VERSION := $(word 8, $(shell cl.exe 2>&1)) CL_MAJOR_VERSION := $(word 1, $(subst ., , $(CL_VERSION))) VC_CL_VERSIONS := 14 15 VC_CL_VERSION := $(findstring $(CL_MAJOR_VERSION), $(VC_CL_VERSIONS)) # # The flags set here should be valid for VC 6. # CXX_VERSION_FLAGS := -GX CXX_VERSION_DEBUG_FLAGS := CXX_VERSION_RELEASE_FLAGS := LINK_VERSION_RELEASE_FLAGS := # # CL_MAJOR_VERSION 13 is VC 7 # ifeq ($(CL_MAJOR_VERSION), 13) CXX_VERSION_FLAGS := -Wp64 -EHsc CXX_VERSION_DEBUG_FLAGS := -Gs CXX_VERSION_RELEASE_FLAGS := -Gs -GF -Gy LINK_VERSION_RELEASE_FLAGS := /LTCG /OPT:REF /OPT:ICF=5 /OPT:NOWIN98 endif# # # CL_MAJOR_VERSION 14 or 15 (i.e., VC 8 or VC 9) # ifeq ($(CL_MAJOR_VERSION), $(VC_CL_VERSION)) CXX_VERSION_FLAGS := -EHsc CXX_VERSION_DEBUG_FLAGS := -RTCc -RTCsu CXX_VERSION_RELEASE_FLAGS := -GF -GL -Gy LINK_VERSION_RELEASE_FLAGS := /LTCG /OPT:REF /OPT:ICF=5 /OPT:NOWIN98 DEFINES += -D_CRT_SECURE_NO_DEPRECATE DEFINES += -D_CRT_NONSTDC_NO_DEPRECATE endif ifdef ENABLE_DEBUG_OPT FLAGS = $(CXX_VERSION_FLAGS) $(CXX_VERSION_DEBUG_FLAGS) -GR -W3 -Od -Zi -MDd -DDEBUG -Fd$(OBJ_DIR)/ LINK_FLAGS += -debug else FLAGS = $(CXX_VERSION_FLAGS) $(CXX_VERSION_RELEASE_FLAGS) -GR -W3 -O2 -MD LINK_FLAGS += $(LINK_VERSION_RELEASE_FLAGS) -map endif ##============================================================================== ## ## CIMPLE_WINDOWS ## ##============================================================================== ## CIMPLE_WINDOWS in any platform using the windows API and shells CIMPLE_WINDOWS=1 ## CIMPLE_WINDOWS_MSVC Microsoft windows OS and Microsoft compiler CIMPLE_WINDOWS_MSVC=1 ##============================================================================== ## ## Define the Pegasus utility mu ## ##============================================================================== MU = mu ##============================================================================== ## ## ECHO ## ##============================================================================== ECHO = @echo ##============================================================================== ## ## cp(source,dest) ## ##============================================================================== cp = copy $(subst /,\,$(1)) $(subst /,\,$(2)) COPY = copy $(subst /,\,$(1)) $(subst /,\,$(2)) ##============================================================================== ## ## rm(files) ## ##============================================================================== ## move to this in future RM = - del /q $(subst /,\,$(1)) ## keep rm because used throughout our own makefiles rm = - del /q $(subst /,\,$(1)) ##============================================================================== ## ## RMDIRHIER - Remove a directory hiearchy ## ##============================================================================== ifndef RMDIRHIER RMDIRHIER = $(MU) rmdirhier endif ##============================================================================== ## ## DIFF ## ##============================================================================== ifndef DIFF DIFF = $(MU) compare endif ##============================================================================== ## ## _win_path(path) ## ##============================================================================== _win_path = $(subst /,\,$(1)) ##============================================================================== ## ## mkdirhier(directory) ## ##============================================================================== mkdirhier = - mkdir $(subst /,\,$(1)) ##============================================================================== ## ## diff ## KS_TODO - This creates a pegasus dependency since mu is a pegasus tool ## We want to eliminate this in the future ## ##============================================================================== diff = - mu compare ##============================================================================== ## ## rmdirhier(directory) ## ##============================================================================== rmdirhier = - rmdir /q /s $(subst /,\,$(1)) ##============================================================================== ## ## cpdirhier(source_dir, destination_dir) ## ##============================================================================== cpdirhier = XCOPY /E /I /F $(subst /,\,$(1)) $(subst /,\,$(2)) ##============================================================================== ## ## CXX ## ##============================================================================== CXX = cl -nologo ##============================================================================== ## ## CC ## ##============================================================================== CC = cl -nologo ##============================================================================== ## ## AR ## ##============================================================================== AR = link ##============================================================================== ## ## FLAGS ## ##============================================================================== FLAGS = -EHsc -GR -W3 ## MB Removed -MD to get WMI DLLs built (/MD link with MSVCRT.LIB) ifdef ENABLE_DEBUG_OPT FLAGS += -Od -Zi FLAGS += -MDd else FLAGS += -O2 FLAGS += -MD endif ##============================================================================== ## ## OBJ ## ##============================================================================== OBJ = .obj ##============================================================================== ## ## DEFINES ## ##============================================================================== #DEFINES += -D_CRT_SECURE_NO_DEPRECATE ##============================================================================== ## ## LINK_FLAGS ## ##============================================================================== #LINK_FLAGS += -L$(LIBDIR) LINK_FLAGS += -nologo -dll ifdef ENABLE_DEBUG_OPT LINK_FLAGS += -debug endif ##============================================================================== ## ## LIB_FLAGS ## ##============================================================================== LIB_FLAGS += -nologo ##============================================================================== ## ## shlib_targets(name) - Defines the various target files ## in the shared library (dll, manifest, pdb, ilk_ ## ##============================================================================== shlib_target = $(BINDIR)/$(1).dll manifest_target = $(shlib_target).manifest pdb_target = $(BINDIR)/$(1).pdb ilk_target = $(BINDIR)/$(1).ilk ##============================================================================== ## ## lib_target(name) ## ##============================================================================== lib_target = $(LIBDIR)/$(1).lib ##============================================================================== ## ## exp_target(name) ## ##============================================================================== exp_target = $(LIBDIR)/$(1).exp ##============================================================================== ## ## link output files ## ##============================================================================== link_clean_targets = $(LIBDIR)/$(1).pdb $(LIBDIR)/$(1).ilk ##============================================================================== ## ## binary_target(binary) ## ##============================================================================== binary_target = $(BINDIR)/$(1).exe ##============================================================================== ## ## LDPATH ## ##============================================================================== LDPATH = -libpath:$(subst /,\,$(LIBDIR)) ifneq ($(WITH_PEGASUS_OPT),) LDPATH += -libpath:$(subst /,\,$(WITH_PEGASUS_OPT)/lib) endif ##============================================================================== ## ## _full_libs(libraries) ## ##============================================================================== _full_libs = $(addsuffix .lib,$(1)) ##============================================================================== ## ## make_shlib(shlib, objects, libraries) ## ##============================================================================== _SYS_LIBS = ws2_32.lib advapi32.lib netapi32.lib make_shlib = link $(LINK_FLAGS) $(EXTRA_LINK_FLAGS) \ $(LDPATH) \ -out:$(call shlib_target,$(1)) \ -implib:$(call lib_target,$(1)) \ $(2) \ $(call _full_libs,$(3)) \ cimpleposix.lib \ $(_SYS_LIBS) $(EXTRA_SYS_LIBS) $(NL) ##============================================================================== ## ## make_lib(static_library, objects) ## ##============================================================================== make_lib = lib $(LIB_FLAGS) -out:$(call lib_target,$(1)) $(2) ##============================================================================== ## ## clean_shlib(library) - clean lib and shared library ## targets. ## TODO make the list conditional on compiler version ## ##============================================================================== clean_shlib = \ $(call rm,$(call shlib_target,$(1))) $(NL) \ $(call rm,$(call lib_target,$(1))) $(NL) \ $(call rm,$(call exp_target,$(1))) $(NL) \ $(call rm,$(call manifest_target,$(1))) $(NL) \ $(call rm,$(call ilk_target,$(1))) $(NL) \ $(call rm,$(call pdb_target,$(1))) $(NL) \ $(call rm, vc*.pdb) ##============================================================================== ## ## clean_lib(library) ## Clean all files associated with the shared library ## ##============================================================================== clean_lib = \ $(call rm,$(call shlib_target,$(1))) $(NL) \ $(call rm,$(call lib_target,$(1))) $(NL) \ $(call rm,$(call exp_target,$(1))) ##============================================================================== ## ## make_bin(target, objects, libraries) ## ##============================================================================== make_bin = $(CXX) $(FLAGS) \ -Fe$(call binary_target,$(1)) \ $(2) \ $(call _full_libs,$(3)) \ cimpleposix.lib \ $(_SYS_LIBS) \ -link $(LDPATH) ##============================================================================== ## ## make_obj -- create an object file. ## ##============================================================================== make_obj = $(CXX) -c $(FLAGS) $(DEFINES) $(INCLUDES) -Fo$*.obj $*.cpp ##============================================================================== ## ## abs_path(path) ## ##============================================================================== abs_path = $(subst \,/,$(shell cd $(call _win_path,$(1)) && cd)) ##============================================================================== ## ## INCLUDES ## ##============================================================================== ifndef POSIX_MAKEFILE INCLUDES += -I$(TOP)/src/posix endif ##============================================================================== ## ## install_shlib ## ##============================================================================== install_shlib = \ $(call cp,$(call shlib_target,$1) $(BINDIR_OPT)/$(1).dll.*) $(NL) \ $(call cp,$(call lib_target,$1) $(LIBDIR_OPT)/$(1).lib.*) ##============================================================================== ## ## uninstall_shlib ## ##============================================================================== uninstall_shlib = \ $(call rm,$(BINDIR_OPT)/$(1).dll.*) $(NL) \ $(call rm,$(LIBDIR_OPT)/$(1).lib.*) ##============================================================================== ## ## install_lib ## ##============================================================================== install_lib = \ $(call cp,$(call lib_target,$1) $(LIBDIR_OPT)/$(1).lib.*) ##============================================================================== ## ## uninstall_lib ## ##============================================================================== uninstall_lib = $(call rm,$(LIBDIR_OPT)/$(1).lib.*) ##============================================================================== ## ## install_bin(BINARY) ## ##============================================================================== install_bin = $(call cp,$(call binary_target,$(1)) $(BINDIR_OPT)/$(1).exe.*) ##============================================================================== ## ## uninstall_bin(BINARY) ## ##============================================================================== uninstall_bin = $(call rm,$(BINDIR_OPT)/$(1).exe.*) ##============================================================================== ## ## grep(pattern,path) ## ##============================================================================== grep = $(shell findstr /M /R $(1) $(subst /,\,$(2))) ##============================================================================== ## ## ECHONL ## ##============================================================================== ECHONL=@ $(subst /,\,$(TOP)/mak/echonl.bat) ##============================================================================== ## ## define OS_TYPE ## ##============================================================================== OS_TYPE = windows