diff Makefile @ 2997:4f9b72cf7ee7

allow native builds too
author John W. Eaton <jwe@octave.org>
date Tue, 28 May 2013 17:31:59 -0400
parents 07a5901747ae
children 7d692ab680ab
line wrap: on
line diff
--- a/Makefile	Sun May 26 13:32:22 2013 -0400
+++ b/Makefile	Tue May 28 17:31:59 2013 -0400
@@ -1,11 +1,36 @@
 # This file is part of MXE.
 # See index.html for further information.
 
+# Set the following configuration variables with a configure script?
+
+# Current valid values are mingw (cross) and gnu-linux (native).
+MXE_SYSTEM := mingw
+#MXE_SYSTEM := gnu-linux
+
+# Set to "no" if doing a cross compile build.
+MXE_NATIVE_BUILD := no
+#MXE_NATIVE_BUILD := yes
+
+# Set to "yes" to use the verions of GCC and binutils already
+# installed on your system.
+USE_SYSTEM_GCC := no
+#USE_SYSTEM_GCC := yes
+
+# Should match what config.guess prints for your system.
+TARGET := i686-pc-mingw32
+#TARGET := x86_64-unknown-linux-gnu
+
 # Enable shared or static libs, or perhaps both.  At least one 
 # package uses --with instead of --enable.  Probably it doesn't
 # make sense to disable both...
 BUILD_SHARED := yes
 BUILD_STATIC := no
+
+USE_PIC_FLAG := no
+#USE_PIC_FLAG := yes
+
+## end of configuration variables.
+
 ifeq ($(BUILD_SHARED),yes)
   ifeq ($(BUILD_STATIC),yes)
     ENABLE_SHARED_OR_STATIC := --enable-shared --enable-static
@@ -19,8 +44,13 @@
   WITH_SHARED_OR_STATIC := --without-shared --with-static
 endif
 
+ifeq ($(USE_PIC_FLAG),yes)
+  MXE_CC_PICFLAG := -fPIC
+  MXE_CXX_PICFLAG := -fPIC
+  MXE_F77_PICFLAG := -fPIC
+endif
+
 JOBS               := 1
-TARGET             := i686-pc-mingw32
 SOURCEFORGE_MIRROR := freefr.dl.sourceforge.net
 PKG_MIRROR         := s3.amazonaws.com/mxe-pkg
 PKG_CDN            := d1yihgixbnrglp.cloudfront.net
@@ -40,7 +70,7 @@
 
 LIBTOOL     := libtool
 LIBTOOLIZE  := libtoolize
-BUILD_TOOLS := build-autoconf build-automake build-cmake build-libtool build-pkg-config build-bison build-flex
+BUILD_TOOLS := $(patsubst src/%.mk, %, $(wildcard src/build-*.mk))
 
 PREFIX     := $(PWD)/usr
 LOG_DIR    := $(PWD)/log
@@ -51,18 +81,70 @@
 TOP_DIR    := $(patsubst %/,%,$(dir $(MAKEFILE)))
 PKGS       := $(filter-out $(BUILD_TOOLS), $(shell $(SED) -n 's/^.* id="\([^"]*\)-package">.*$$/\1/p' '$(TOP_DIR)/index.html'))
 PATH       := $(PREFIX)/bin:$(PATH)
+ifeq ($(MXE_NATIVE_BUILD),yes)
+  PATH := $(PREFIX)/$(TARGET)/bin:$(PATH)
+endif
 
-MSYS_BASE_URL := http://sourceforge.net/projects/mingw/files/MSYS/Base
-MSYS_BASE_VER := 1.0.13
-MSYS_BASE_DIR := $(PREFIX)/../msys-base
-MSYS_BASE_PACKAGES := $(addprefix msys-,bash coreutils diffutils file findutils gawk grep gzip less libiconv libintl libmagic make msys-core regex sed tar termcap)
+CONFIGURE_CPPFLAGS := CPPFLAGS='-I$(PREFIX)/$(TARGET)/include'
+CONFIGURE_LDFLAGS := LDFLAGS='-L$(PREFIX)/$(TARGET)/lib'
 
-NOTEPAD_BASE_DIR := $(PREFIX)/../notepad++
+ifeq ($(MXE_NATIVE_BUILD),yes)
+  MXE_AR := ar
+  MXE_RANLIB := ranlib
+  MXE_CC := gcc
+  MXE_CXX := g++
+  MXE_F77 := gfortran
+  ifeq ($(MXE_SYSTEM),mingw)
+    MXE_WINDRES := windres
+  else
+    MXE_WINDRES := true
+  endif
+  MXE_PKG_CONFIG := pkg-config
+  MXE_QMAKE := qmake
+else
+  MXE_AR := '$(PREFIX)/bin/$(TARGET)-ar'
+  MXE_RANLIB := '$(PREFIX)/bin/$(TARGET)-ranlib'
+  MXE_CC := '$(PREFIX)/bin/$(TARGET)-gcc'
+  MXE_CXX := '$(PREFIX)/bin/$(TARGET)-g++'
+  MXE_F77 := '$(PREFIX)/bin/$(TARGET)-gfortran'
+  ifeq ($(MXE_SYSTEM),mingw)
+    MXE_WINDRES := '$(PREFIX)/bin/$(TARGET)-windres'
+  else
+    MXE_WINDRES := true
+  endif
+  MXE_PKG_CONFIG := '$(PREFIX)/bin/$(TARGET)-pkg-config'
+  MXE_QMAKE := '$(PREFIX)/bin/$(TARGET)-qmake'
+endif
+
+ifeq ($(MXE_SYSTEM),mingw)
+  MAKE_SHARED_FROM_STATIC_OPTIONS := --windowsdll
+endif
+
+MXE_BINDIR := '$(PREFIX)/$(TARGET)/bin'
+MXE_LIBDIR := '$(PREFIX)/$(TARGET)/lib'
+MXE_INCDIR := '$(PREFIX)/$(TARGET)/include'
+
+ifeq ($(MXE_SYSTEM),mingw)
+  ifneq ($(MXE_NATIVE_BUILD),yes)
+    MSYS_BASE_URL := http://sourceforge.net/projects/mingw/files/MSYS/Base
+    MSYS_BASE_VER := 1.0.13
+    MSYS_BASE_DIR := $(PREFIX)/../msys-base
+    MSYS_BASE_PACKAGES := $(addprefix msys-,bash coreutils diffutils file findutils gawk grep gzip less libiconv libintl libmagic make msys-core regex sed tar termcap)
+
+    NOTEPAD_BASE_DIR := $(PREFIX)/../notepad++
+  endif
+else
+  LD_LIBRARY_PATH := '$(MXE_LIBDIR)'
+  export LD_LIBRARY_PATH
+  MXE_CPPFLAGS := '-I$(MXE_INCDIR)'
+  MXE_LDFLAGS := '-L$(MXE_LIBDIR)'
+endif
 
 OCTAVE_FORGE_BASE_URL := 'http://sourceforge.net/projects/octave/files/Octave Forge Packages/Individual Package Releases'
 OCTAVE_FORGE_PACKAGES := $(addprefix of-,miscellaneous struct optim specfun general signal communications image io statistics control)
 
-MAKE_SHARED_FROM_STATIC := $(TOP_DIR)/tools/make-shared-from-static
+MAKE_SHARED_FROM_STATIC := \
+  $(TOP_DIR)/tools/make-shared-from-static $(MAKE_SHARED_FROM_STATIC_OPTIONS)
 
 CMAKE_TOOLCHAIN_FILE := $(PREFIX)/$(TARGET)/share/cmake/mxe-conf.cmake
 
@@ -161,6 +243,11 @@
 	@echo '[check requirements]'
 	$(foreach REQUIREMENT,$(REQUIREMENTS),$(call CHECK_REQUIREMENT,$(REQUIREMENT)))
 	@[ -d '$(PREFIX)/installed' ] || mkdir -p '$(PREFIX)/installed'
+	@if test "$(USE_SYSTEM_GCC)" = yes; then \
+	  $(INSTALL) -d '$(PREFIX)/bin' ; \
+	  $(INSTALL) -m 755 tools/config.guess '$(PREFIX)/bin/config.guess' ; \
+	  $(INSTALL) -m 755 tools/config.sub '$(PREFIX)/bin/config.sub' ; \
+	fi
 	@touch '$@'
 
 define newline