Skip to content

Commit

Permalink
The attached patches attempt to fix cross builds. For example, if you
Browse files Browse the repository at this point in the history
try to use i686-darwin to build for arm-eabi, you'll quickly run into
several false assumptions that the target OS must be the same as the
host OS. These patches split $(OS) into $(HOST_OS) and $(TARGET_OS) to
help builds like "make check" and the test-suite able to cross
compile. Along the way a target of *-unknown-eabi is defined as
"Freestanding" so that TARGET_OS checks have something to work with.

Patch by Sandeep Patel!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79296 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
asl committed Aug 18, 2009
1 parent e1b80b6 commit e55db74
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 26 deletions.
6 changes: 5 additions & 1 deletion Makefile.config.in
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,11 @@ PROJ_mandir := $(DESTDIR)$(PROJ_prefix)/share/man
LLVM_ON_UNIX:=@LLVM_ON_UNIX@
LLVM_ON_WIN32:=@LLVM_ON_WIN32@

# Target operating system for which LLVM will be compiled.
# Host operating system for which LLVM will be run.
OS=@OS@
HOST_OS=@HOST_OS@
# Target operating system for which LLVM will compile for.
TARGET_OS=@TARGET_OS@

# Target hardware architecture
ARCH=@ARCH@
Expand Down Expand Up @@ -128,6 +131,7 @@ LDFLAGS+=@LDFLAGS@

# Path to the library archiver program.
AR_PATH = @AR@
AR = @AR@

# Path to the nm program
NM_PATH = @NM@
Expand Down
39 changes: 21 additions & 18 deletions Makefile.rules
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ CPP.Defines :=
# OPTIMIZE_OPTION - The optimization level option we want to build LLVM with
# this can be overridden on the make command line.
ifndef OPTIMIZE_OPTION
ifneq ($(OS),MingW)
ifneq ($(HOST_OS),MingW)
OPTIMIZE_OPTION := -O3
else
OPTIMIZE_OPTION := -O2
Expand All @@ -297,16 +297,16 @@ endif
ifeq ($(ENABLE_OPTIMIZED),1)
BuildMode := Release
# Don't use -fomit-frame-pointer on Darwin or FreeBSD.
ifneq ($(OS),FreeBSD)
ifneq ($(OS),Darwin)
ifneq ($(HOST_OS),FreeBSD)
ifneq ($(HOST_OS),Darwin)
OmitFramePointer := -fomit-frame-pointer
endif
endif

# Darwin requires -fstrict-aliasing to be explicitly enabled.
# Avoid -fstrict-aliasing on Darwin for now, there are unresolved issues
# with -fstrict-aliasing and ipa-type-escape radr://6756684
#ifeq ($(OS),Darwin)
#ifeq ($(HOST_OS),Darwin)
# EXTRA_OPTIONS += -fstrict-aliasing -Wstrict-aliasing
#endif
CXX.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer)
Expand Down Expand Up @@ -379,10 +379,10 @@ ifdef SHARED_LIBRARY
endif

ifeq ($(ENABLE_PIC),1)
ifeq ($(OS), $(filter $(OS), Cygwin MingW))
ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
# Nothing. Win32 defaults to PIC and warns when given -fPIC
else
ifeq ($(OS),Darwin)
ifeq ($(HOST_OS),Darwin)
# Common symbols not allowed in dylib files
CXX.Flags += -fno-common
C.Flags += -fno-common
Expand All @@ -393,7 +393,7 @@ ifeq ($(ENABLE_PIC),1)
endif
endif
else
ifeq ($(OS),Darwin)
ifeq ($(HOST_OS),Darwin)
CXX.Flags += -mdynamic-no-pic
C.Flags += -mdynamic-no-pic
endif
Expand All @@ -420,7 +420,7 @@ ifeq ($(ARCH),Alpha)
LD.Flags += -Wl,--no-relax
endif

ifeq ($(OS),MingW)
ifeq ($(HOST_OS),MingW)
ifeq ($(LLVM_CROSS_COMPILING),1)
# Work around http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=525016
ifdef TOOLNAME
Expand Down Expand Up @@ -502,7 +502,7 @@ endif
# Adjust to user's request
#--------------------------------------------------------------------

ifeq ($(OS),Darwin)
ifeq ($(HOST_OS),Darwin)
DARWIN_VERSION := `sw_vers -productVersion`
# Strip a number like 10.4.7 to 10.4
DARWIN_VERSION := $(shell echo $(DARWIN_VERSION)| sed -E 's/(10.[0-9]).*/\1/')
Expand All @@ -511,16 +511,19 @@ ifeq ($(OS),Darwin)

SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress \
-dynamiclib -mmacosx-version-min=$(DARWIN_VERSION)
TargetCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION)
else
ifeq ($(OS),Cygwin)
ifeq ($(HOST_OS),Cygwin)
SharedLinkOptions=-shared -nostdlib -Wl,--export-all-symbols \
-Wl,--enable-auto-import -Wl,--enable-auto-image-base
else
SharedLinkOptions=-shared
endif
endif

ifeq ($(TARGET_OS),Darwin)
TargetCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION)
endif

# Adjust LD.Flags depending on the kind of library that is to be built. Note
# that if LOADABLE_MODULE is specified then the resulting shared library can
# be opened with dlopen.
Expand Down Expand Up @@ -558,7 +561,7 @@ ifndef KEEP_SYMBOLS
endif

# Adjust linker flags for building an executable
ifneq ($(OS),Darwin)
ifneq ($(HOST_OS),Darwin)
ifneq ($(DARWIN_MAJVERS),4)
ifdef TOOLNAME
ifdef EXAMPLE_TOOL
Expand All @@ -580,7 +583,7 @@ endif
CompileCommonOpts += -Wall -W -Wno-unused-parameter -Wwrite-strings \
$(EXTRA_OPTIONS)

ifeq ($(OS),HP-UX)
ifeq ($(HOST_OS),HP-UX)
CompileCommonOpts := -D_REENTRANT -D_HPUX_SOURCE
endif

Expand Down Expand Up @@ -608,7 +611,7 @@ ifdef UNIVERSAL
# Building universal cannot compute dependencies automatically.
DISABLE_AUTO_DEPENDENCIES=1
else
ifeq ($(OS),Darwin)
ifeq ($(TARGET_OS),Darwin)
ifeq ($(ARCH),x86_64)
TargetCommonOpts = -m64
else
Expand All @@ -619,7 +622,7 @@ else
endif
endif

ifeq ($(OS),SunOS)
ifeq ($(HOST_OS),SunOS)
CPP.BaseFlags += -include llvm/System/Solaris.h
endif

Expand Down Expand Up @@ -1172,15 +1175,15 @@ endif
# not exporting all of the weak symbols from the binary. This reduces dyld
# startup time by 4x on darwin in some cases.
ifdef TOOL_NO_EXPORTS
ifeq ($(OS),Darwin)
ifeq ($(HOST_OS),Darwin)

# Tiger tools don't support this.
ifneq ($(DARWIN_MAJVERS),4)
LD.Flags += -Wl,-exported_symbol -Wl,_main
endif
endif

ifeq ($(OS), $(filter $(OS), Linux NetBSD FreeBSD))
ifeq ($(HOST_OS), $(filter $(HOST_OS), Linux NetBSD FreeBSD))
LD.Flags += -Wl,--version-script=$(LLVM_SRC_ROOT)/autoconf/ExportMap.map
endif
endif
Expand Down Expand Up @@ -1234,7 +1237,7 @@ endif
###############################################################################

# FIXME: This should be checking for "if not GCC or ICC", not for "if HP-UX"
ifeq ($(OS),HP-UX)
ifeq ($(HOST_OS),HP-UX)
DISABLE_AUTO_DEPENDENCIES=1
endif

Expand Down
49 changes: 49 additions & 0 deletions autoconf/configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -175,13 +175,60 @@ AC_CACHE_CHECK([type of operating system we're going to host on],
llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
llvm_cv_os_type="MingW"
llvm_cv_platform_type="Win32" ;;
*-unknown-eabi*)
llvm_cv_link_all_option="-Wl,--whole-archive"
llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
llvm_cv_os_type="Freestanding"
llvm_cv_platform_type="Unix" ;;
*-unknown-elf*)
llvm_cv_link_all_option="-Wl,--whole-archive"
llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
llvm_cv_os_type="Freestanding"
llvm_cv_platform_type="Unix" ;;
*)
llvm_cv_link_all_option=""
llvm_cv_no_link_all_option=""
llvm_cv_os_type="Unknown"
llvm_cv_platform_type="Unknown" ;;
esac])

AC_CACHE_CHECK([type of operating system we're going to target],
[llvm_cv_target_os_type],
[case $target in
*-*-aix*)
llvm_cv_target_os_type="AIX" ;;
*-*-irix*)
llvm_cv_target_os_type="IRIX" ;;
*-*-cygwin*)
llvm_cv_target_os_type="Cygwin" ;;
*-*-darwin*)
llvm_cv_target_os_type="Darwin" ;;
*-*-freebsd*)
llvm_cv_target_os_type="FreeBSD" ;;
*-*-openbsd*)
llvm_cv_target_os_type="OpenBSD" ;;
*-*-netbsd*)
llvm_cv_target_os_type="NetBSD" ;;
*-*-dragonfly*)
llvm_cv_target_os_type="DragonFly" ;;
*-*-hpux*)
llvm_cv_target_os_type="HP-UX" ;;
*-*-interix*)
llvm_cv_target_os_type="Interix" ;;
*-*-linux*)
llvm_cv_target_os_type="Linux" ;;
*-*-solaris*)
llvm_cv_target_os_type="SunOS" ;;
*-*-win32*)
llvm_cv_target_os_type="Win32" ;;
*-*-mingw*)
llvm_cv_target_os_type="MingW" ;;
*-unknown-eabi*)
llvm_cv_target_os_type="Freestanding" ;;
*)
llvm_cv_target_os_type="Unknown" ;;
esac])

dnl Make sure we aren't attempting to configure for an unknown system
if test "$llvm_cv_os_type" = "Unknown" ; then
AC_MSG_ERROR([Operating system is unknown, configure can't continue])
Expand All @@ -190,6 +237,8 @@ fi
dnl Set the "OS" Makefile variable based on the platform type so the
dnl makefile can configure itself to specific build hosts
AC_SUBST(OS,$llvm_cv_os_type)
AC_SUBST(HOST_OS,$llvm_cv_os_type)
AC_SUBST(TARGET_OS,$llvm_cv_target_os_type)

dnl Set the LINKALL and NOLINKALL Makefile variables based on the platform
AC_SUBST(LINKALL,$llvm_cv_link_all_option)
Expand Down
2 changes: 1 addition & 1 deletion lib/Transforms/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ PARALLEL_DIRS = Utils Instrumentation Scalar IPO Hello
include $(LEVEL)/Makefile.config

# No support for plugins on windows targets
ifeq ($(OS), $(filter $(OS), Cygwin MingW))
ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
PARALLEL_DIRS := $(filter-out Hello, $(PARALLEL_DIRS))
endif

Expand Down
4 changes: 2 additions & 2 deletions test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ RUNTESTFLAGS += --ignore "$(strip $(IGNORE_TESTS))"
endif

# Both AuroraUX & Solaris do not have the -m flag for ulimit
ifeq ($(OS),SunOS)
ifeq ($(HOST_OS),SunOS)
ULIMIT=ulimit -t 600 ; ulimit -d 512000 ; ulimit -v 512000 ;
else
ULIMIT=ulimit -t 600 ; ulimit -d 512000 ; ulimit -m 512000 ; ulimit -v 512000 ;
Expand Down Expand Up @@ -93,7 +93,7 @@ clean::
$(RM) -rf `find $(LLVM_OBJ_ROOT)/test -name Output -type d -print`

# dsymutil is used on the Darwin to manipulate DWARF debugging information.
ifeq ($(OS),Darwin)
ifeq ($(TARGET_OS),Darwin)
DSYMUTIL=dsymutil
else
DSYMUTIL=true
Expand Down
2 changes: 1 addition & 1 deletion test/lib/llvm2cpp.exp
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ proc llvm2cpp-test { files } {
}

set retval [ catch {
exec -keepnewline gcc -g -D__STDC_LIMIT_MACROS -o $executable $generated -I$srcroot/include -I$objroot/include -L$llvmlibsdir -lLLVMCore -lLLVMSupport -lLLVMbzip2 -lLLVMSystem -lstdc++ } msg ]
exec -keepnewline gcc -g -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -o $executable $generated -I$srcroot/include -I$objroot/include -L$llvmlibsdir -lLLVMCore -lLLVMSupport -lLLVMSystem -lstdc++ } msg ]
if { $retval != 0 } {
fail "$test: gcc returned $retval\n$msg"
continue
Expand Down
2 changes: 1 addition & 1 deletion tools/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ ifeq ($(ENABLE_PIC),1)
endif

# No support for lto / gold on windows targets
ifeq ($(OS), $(filter $(OS), Cygwin MingW))
ifeq ($(TARGET_OS), $(filter $(TARGET_OS), Cygwin MingW))
DIRS := $(filter-out lto gold, $(DIRS))
endif

Expand Down
2 changes: 1 addition & 1 deletion tools/lto/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ LINK_COMPONENTS := $(TARGETS_TO_BUILD) ipo scalaropts linker bitreader bitwriter

include $(LEVEL)/Makefile.common

ifeq ($(OS),Darwin)
ifeq ($(HOST_OS),Darwin)
# set dylib internal version number to llvmCore submission number
ifdef LLVM_SUBMIT_VERSION
LLVMLibsOptions := $(LLVMLibsOptions) -Wl,-current_version \
Expand Down
2 changes: 1 addition & 1 deletion utils/unittest/googletest/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ BUILD_ARCHIVE = 1
CPP.Flags += -I$(LLVM_SRC_ROOT)/utils/unittest/googletest/include
CPP.Flags += $(NO_MISSING_FIELD_INITIALIZERS) $(NO_VARIADIC_MACROS)

ifeq ($(OS),MingW)
ifeq ($(HOST_OS),MingW)
CPP.Flags += -DGTEST_OS_WINDOWS=1
endif

Expand Down

0 comments on commit e55db74

Please sign in to comment.