diff options
Diffstat (limited to 'mk/Windows32.mk')
-rw-r--r-- | mk/Windows32.mk | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/mk/Windows32.mk b/mk/Windows32.mk new file mode 100644 index 00000000..8848827b --- /dev/null +++ b/mk/Windows32.mk @@ -0,0 +1,116 @@ +# GNU -*-Makefile-*- to build GNU make on Windows +# +# Windows overrides for use with Makebase.mk. +# +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is part of GNU Make. +# +# GNU Make is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see <http://www.gnu.org/licenses/>. + +# TARGET_TYPE can be either "release" or "debug" +TARGET_TYPE = release + +# TOOLCHAIN can be either "msvc" or "gcc" +TOOLCHAIN = msvc + + +prog_SOURCES += getloadavg.c $(glob_SOURCES) $(w32_SOURCES) + +w32_LIBS = kernel32 user32 gdi32 winspool comdlg32 advapi32 shell32 ole32 \ + oleaut32 uuid odbc32 odbccp32 + +CPPFLAGS = +CFLAGS = +LDFLAGS = + +# --- Visual Studio +msvc_CC = cl.exe +msvc_LD = link.exe + +msvc_CPPFLAGS = /DHAVE_CONFIG_H /DWINDOWS32 /DWIN32 /D_CONSOLE +msvc_CPPFLAGS += /I$(OUTDIR) /I$(SRCDIR) /I$(SRCDIR)/glob /I$(SRCDIR)/w32/include + +msvc_CFLAGS = /nologo /MT /W4 /EHsc +msvc_CFLAGS += /FR$(OUTDIR) /Fp$(BASE_PROG).pch /Fd$(BASE_PROG).pdb + +msvc_LDFLAGS = /nologo /SUBSYSTEM:console /PDB:$(BASE_PROG).pdb + +msvc_LDLIBS = $(addsuffix .lib,$(w32_LIBS)) + +msvc_C_SOURCE = /c +msvc_OUTPUT_OPTION = /Fo$@ +msvc_LINK_OUTPUT = /OUT:$@ + +release_msvc_OUTDIR = ./WinRel +release_msvc_CPPFLAGS = /D NDEBUG +release_msvc_CFLAGS = /O2 + +debug_msvc_OUTDIR = ./WinDebug +debug_msvc_CPPFLAGS = /D _DEBUG +debug_msvc_CFLAGS = /Zi /Od +debug_msvc_LDFLAGS = /DEBUG + +# --- GCC +gcc_CC = gcc +gcc_LD = $(gcc_CC) + +release_gcc_OUTDIR = ./GccRel +debug_gcc_OUTDIR = ./GccDebug + +gcc_CPPFLAGS = -DHAVE_CONFIG_H -I$(OBJDIR) -I$(SRCDIR) -I$(SRCDIR)/glob -I$(SRCDIR)/w32/include +gcc_CFLAGS = -mthreads -Wall -std=gnu99 -gdwarf-2 -g3 +gcc_LDFLAGS = -mthreads -gdwarf-2 -g3 +gcc_LDLIBS = $(addprefix -l,$(w32_libs)) + +gcc_C_SOURCE = -c +gcc_OUTPUT_OPTION = -o $@ +gcc_LINK_OUTPUT = -o $@ + +debug_gcc_CFLAGS = -O0 +release_gcc_CFLAGS = -O2 + +# --- + +LINK.cmd = $(LD) $(extra_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) $(LINK_OUTPUT) + +CHECK.cmd = cmd /c cd tests \& .\run_make_tests.bat -make ../$(PROG) + +MKDIR.cmd = cmd /c mkdir $(subst /,\\,$@) +RM.cmd = cmd /c del /F /Q $(subst /,\\,$(OBJECTS) $(PROG)) + +CC = $($(TOOLCHAIN)_CC) +LD = $($(TOOLCHAIN)_LD) + +C_SOURCE = $($(TOOLCHAIN)_C_SOURCE) +OUTPUT_OPTION = $($(TOOLCHAIN)_OUTPUT_OPTION) +LINK_OUTPUT = $($(TOOLCHAIN)_LINK_OUTPUT) + +OUTDIR = $($(TARGET_TYPE)_$(TOOLCHAIN)_OUTDIR) + +OBJEXT = obj +EXEEXT = .exe + +_CUSTOM = $($(TOOLCHAIN)_$1) $($(TARGET_TYPE)_$1) $($(TARGET_TYPE)_$(TOOLCHAIN)_$1) + +# I'm not sure why this builds gnumake rather than make...? +PROG = $(OUTDIR)/gnumake$(EXEEXT) +BASE_PROG = $(basename $(PROG)) + +extra_CPPFLAGS = $(call _CUSTOM,CPPFLAGS) +extra_CFLAGS = $(call _CUSTOM,CFLAGS) +extra_LDFLAGS = $(call _CUSTOM,LDFLAGS) +LDLIBS = $(call _CUSTOM,LDLIBS) + +$(OUTDIR)/config.h: $(SRCDIR)/config.h.W32 + cmd /c copy /Y $(subst /,\\,$< $@) |