diff --git a/build-aux/compiler.mak b/build-aux/compiler.mak index 104e9b3a..b6e9e575 100644 --- a/build-aux/compiler.mak +++ b/build-aux/compiler.mak @@ -36,6 +36,9 @@ software_meant_for_sortix: endif endif +# Determine whether a function is unset or is a Make default. +is_unset_or_default = $(filter undefined default,$(origin $(1))) + # Provide deprecated CPU variable so makefiles can select CPU-specific dirs. ifeq ($(HOST),i486-sortix) MACHINE:=i486 @@ -61,66 +64,57 @@ ifndef HOST_TOOL_PREFIX endif # Determine the names of the tools that target the build platform. -ifndef BUILDCC - BUILDCC:=$(BUILD_TOOL_PREFIX)gcc +ifndef CC_FOR_BUILD + CC_FOR_BUILD:=$(BUILD_TOOL_PREFIX)gcc endif -ifndef BUILDCXX - BUILDCXX:=$(BUILD_TOOL_PREFIX)g++ +ifndef CXX_FOR_BUILD + CXX_FOR_BUILD:=$(BUILD_TOOL_PREFIX)g++ endif -ifndef BUILDAR - BUILDAR:=$(BUILD_TOOL_PREFIX)ar +ifndef AR_FOR_BUILD + AR_FOR_BUILD:=$(BUILD_TOOL_PREFIX)ar endif -ifndef BUILDAS - BUILDAS:=$(BUILD_TOOL_PREFIX)as +ifndef AS_FOR_BUILD + AS_FOR_BUILD:=$(BUILD_TOOL_PREFIX)as endif -ifndef BUILDLD - BUILDAS:=$(BUILD_TOOL_PREFIX)ld +ifndef LD_FOR_BUILD + LD_FOR_BUILD:=$(BUILD_TOOL_PREFIX)ld endif -ifndef BUILDOBJCOPY - BUILDOBJCOPY:=$(BUILD_TOOL_PREFIX)objcopy +ifndef OBJCOPY_FOR_BUILD + OBJCOPY_FOR_BUILD:=$(BUILD_TOOL_PREFIX)objcopy endif # Determine the names of the tools that target the host platform. -ifndef HOSTCC - HOSTCC:=$(HOST_TOOL_PREFIX)gcc +ifneq ($(call is_unset_or_default,CC),) + CC:=$(HOST_TOOL_PREFIX)gcc endif -ifndef HOSTCXX - HOSTCXX:=$(HOST_TOOL_PREFIX)g++ +ifneq ($(call is_unset_or_default,CXX),) + CXX:=$(HOST_TOOL_PREFIX)g++ endif -ifndef HOSTAR - HOSTAR:=$(HOST_TOOL_PREFIX)ar +ifneq ($(call is_unset_or_default,AR),) + AR:=$(HOST_TOOL_PREFIX)ar endif -ifndef HOSTAS - HOSTAS:=$(HOST_TOOL_PREFIX)as +ifneq ($(call is_unset_or_default,AS),) + AS:=$(HOST_TOOL_PREFIX)as endif -ifndef HOSTLD - HOSTLD:=$(HOST_TOOL_PREFIX)ld +ifneq ($(call is_unset_or_default,LD),) + LD:=$(HOST_TOOL_PREFIX)ld endif -ifndef HOSTOBJCOPY - HOSTOBJCOPY:=$(HOST_TOOL_PREFIX)objcopy +ifneq ($(call is_unset_or_default,OBJCOPY),) + OBJCOPY:=$(HOST_TOOL_PREFIX)objcopy endif ifdef SYSROOT - HOSTCC:=$(HOSTCC) --sysroot="$(SYSROOT)" - HOSTCXX:=$(HOSTCXX) --sysroot="$(SYSROOT)" - HOSTLD:=$(HOSTLD) --sysroot="$(SYSROOT)" + CC:=$(CC) --sysroot="$(SYSROOT)" + CXX:=$(CXX) --sysroot="$(SYSROOT)" + LD:=$(LD) --sysroot="$(SYSROOT)" endif -CC:=$(HOSTCC) -CXX:=$(HOSTCXX) -AR:=$(HOSTAR) -AS:=$(HOSTAS) -LD:=$(HOSTLD) -OBJCOPY:=$(HOSTOBJCOPY) - # Determine default optimization level. DEFAULT_GENERIC_OPTLEVEL_BASE:=-O2 -g -DEFAULT_BUILD_OPTLEVEL:=$(DEFAULT_GENERIC_OPTLEVEL_BASE) +DEFAULT_OPTLEVEL_FOR_BUILD:=$(DEFAULT_GENERIC_OPTLEVEL_BASE) ifeq ($(BUILD_IS_SORTIX),1) - DEFAULT_BUILD_OPTLEVEL+= + DEFAULT_OPTLEVEL_FOR_BUILD+= endif -DEFAULT_HOST_OPTLEVEL:=$(DEFAULT_GENERIC_OPTLEVEL_BASE) DEFAULT_OPTLEVEL:=$(DEFAULT_GENERIC_OPTLEVEL_BASE) ifeq ($(HOST_IS_SORTIX),1) - DEFAULT_HOST_OPTLEVEL+= DEFAULT_OPTLEVEL+= endif diff --git a/kernel/Makefile b/kernel/Makefile index 24895ba0..e44adbf7 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -5,7 +5,7 @@ include ../build-aux/version.mak include ../build-aux/dirs.mak # Default values in case the user doesn't override these variables. -OPTLEVEL?=$(DEFAULT_HOST_OPTLEVEL) +OPTLEVEL?=$(DEFAULT_OPTLEVEL) DISKWRITE?=1 CPPFLAGS?= CXXFLAGS?=$(OPTLEVEL) @@ -67,8 +67,8 @@ endif # Object files that constitute the kernel. CRTI_OBJ:=$(CPUDIR)/crti.o -CRTBEGIN_OBJ:=$(shell $(HOSTCXX) $(CXXFLAGS) -print-file-name=crtbegin.o) -CRTEND_OBJ:=$(shell $(HOSTCXX) $(CXXFLAGS) -print-file-name=crtend.o) +CRTBEGIN_OBJ:=$(shell $(CXX) $(CXXFLAGS) -print-file-name=crtbegin.o) +CRTEND_OBJ:=$(shell $(CXX) $(CXXFLAGS) -print-file-name=crtend.o) CRTN_OBJ:=$(CPUDIR)/crtn.o LIBS=\ @@ -176,10 +176,10 @@ headers: ifeq ($(CPU),x64) sortix-x86_64.bin: $(ALLOBJS) - $(HOSTCXX) $(CXXFLAGS) -Wl,-Ttext -Wl,100000 -Wl,-z -Wl,max-page-size=0x1000 $(LINK_OBJECTS) -o $@ + $(CXX) $(CXXFLAGS) -Wl,-Ttext -Wl,100000 -Wl,-z -Wl,max-page-size=0x1000 $(LINK_OBJECTS) -o $@ sortix.bin: sortix-x86_64.bin - $(HOSTOBJCOPY) $< -O elf32-i386-sortix $@ + $(OBJCOPY) $< -O elf32-i386-sortix $@ endif @@ -187,15 +187,15 @@ endif ifeq ($(CPU),x86) sortix.bin: $(ALLOBJS) - $(HOSTCXX) $(CXXFLAGS) -Wl,-Ttext -Wl,100000 $(LINK_OBJECTS) -o $@ + $(CXX) $(CXXFLAGS) -Wl,-Ttext -Wl,100000 $(LINK_OBJECTS) -o $@ endif %.o: %.cpp - $(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS) + $(CXX) -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS) %.o: %.S - $(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS) + $(CXX) -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS) clean: rm -f $(ALLOBJS) sortix.bin diff --git a/libc/Makefile b/libc/Makefile index 9b76436a..a491c1fd 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -4,7 +4,7 @@ include ../build-aux/compiler.mak include ../build-aux/version.mak include ../build-aux/dirs.mak -OPTLEVEL?=$(DEFAULT_HOST_OPTLEVEL) +OPTLEVEL?=$(DEFAULT_OPTLEVEL) CPUDIR:=$(CPU) @@ -684,19 +684,19 @@ libs-kernel: $(BINSKERNEL) FORCE: libc.a: $(OBJS) - $(HOSTAR) rcs $@ $(OBJS) + $(AR) rcs $@ $(OBJS) libdl.a: - $(HOSTAR) rcs $@ + $(AR) rcs $@ libg.a: - $(HOSTAR) rcs $@ + $(AR) rcs $@ libk.a: $(LIBK_OBJS) - $(HOSTAR) rcs $@ $(LIBK_OBJS) + $(AR) rcs $@ $(LIBK_OBJS) librt.a: - $(HOSTAR) rcs $@ + $(AR) rcs $@ crt0.o: $(CPUDIR)/crt0.o ln -f $< $@ @@ -717,23 +717,23 @@ headers: # standard library %.o: %.c - $(HOSTCC) -c $< -o $@ $(CPPFLAGS) $(FLAGS) $(CFLAGS) + $(CC) -c $< -o $@ $(CPPFLAGS) $(FLAGS) $(CFLAGS) %.o: %.cpp - $(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(FLAGS) $(CXXFLAGS) + $(CXX) -c $< -o $@ $(CPPFLAGS) $(FLAGS) $(CXXFLAGS) %.o: %.S - $(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(FLAGS) $(CFLAGS) + $(CXX) -c $< -o $@ $(CPPFLAGS) $(FLAGS) $(CFLAGS) # libk %.libk.o: %.c - $(HOSTCC) -c $< -o $@ $(LIBK_CPPFLAGS) $(LIBK_FLAGS) $(LIBK_CFLAGS) + $(CC) -c $< -o $@ $(LIBK_CPPFLAGS) $(LIBK_FLAGS) $(LIBK_CFLAGS) %.libk.o: %.cpp - $(HOSTCXX) -c $< -o $@ $(LIBK_CPPFLAGS) $(LIBK_FLAGS) $(LIBK_CXXFLAGS) + $(CXX) -c $< -o $@ $(LIBK_CPPFLAGS) $(LIBK_FLAGS) $(LIBK_CXXFLAGS) %.libk.o: %.S - $(HOSTCC) -c $< -o $@ $(LIBK_CPPFLAGS) $(LIBK_FLAGS) $(LIBK_CFLAGS) + $(CC) -c $< -o $@ $(LIBK_CPPFLAGS) $(LIBK_FLAGS) $(LIBK_CFLAGS) clean: rm -f *.o */*.o */*/*.o *.a diff --git a/libm/Makefile b/libm/Makefile index 3f84f4a3..275030d2 100644 --- a/libm/Makefile +++ b/libm/Makefile @@ -3,7 +3,7 @@ include ../build-aux/compiler.mak include ../build-aux/version.mak include ../build-aux/dirs.mak -OPTLEVEL?=$(DEFAULT_HOST_OPTLEVEL) +OPTLEVEL?=$(DEFAULT_OPTLEVEL) CFLAGS?=$(OPTLEVEL) # TODO: Better detection of the proper subdirectory here! @@ -383,13 +383,13 @@ arch/i387/s_modf.o: src/s_modf.c headers: libm.a: $(OBJS) - $(HOSTAR) rcs $@ $(OBJS) + $(AR) rcs $@ $(OBJS) %.o: %.S - $(HOSTCC) -c $< -o $@ $(CPPFLAGS) $(CFLAGS) + $(CC) -c $< -o $@ $(CPPFLAGS) $(CFLAGS) %.o: %.c - $(HOSTCC) -c $< -o $@ $(CPPFLAGS) $(CFLAGS) + $(CC) -c $< -o $@ $(CPPFLAGS) $(CFLAGS) clean: rm -f $(BINS) $(OBJS) $(ARCH_SUBDIR)/*.o src/*.o */*.o arch/*/*.o diff --git a/libpthread/Makefile b/libpthread/Makefile index 96e72c60..b48b0038 100644 --- a/libpthread/Makefile +++ b/libpthread/Makefile @@ -4,7 +4,7 @@ include ../build-aux/compiler.mak include ../build-aux/version.mak include ../build-aux/dirs.mak -OPTLEVEL?=$(DEFAULT_HOST_OPTLEVEL) +OPTLEVEL?=$(DEFAULT_OPTLEVEL) CXXFLAGS?=$(OPTLEVEL) CPPFLAGS?= @@ -77,10 +77,10 @@ headers: libs: $(BINS) libpthread.a: $(OBJS) - $(HOSTAR) rcs $@ $(OBJS) + $(AR) rcs $@ $(OBJS) %.o: %.c++ - $(HOSTCXX) -std=gnu++11 -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS) + $(CXX) -std=gnu++11 -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS) clean: rm -f $(BINS) $(OBJS) *.o