mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
Remove per-architecture exec-prefixes from filesystem hierarchy.
This commit is contained in:
parent
25482f875e
commit
2874495111
12 changed files with 189 additions and 128 deletions
52
Makefile
52
Makefile
|
@ -41,12 +41,6 @@ include build-aux/dirs.mak
|
|||
|
||||
export SYSROOT
|
||||
|
||||
ifeq ($(BUILD_IS_SORTIX),1)
|
||||
export C_INCLUDE_PATH=$(SYSROOT)/include
|
||||
export CPLUS_INCLUDE_PATH=$(SYSROOT)/include
|
||||
export LIBRARY_PATH=$(SYSROOT)/$(HOST)/lib
|
||||
endif
|
||||
|
||||
BUILD_NAME:=sortix_$(VERSION)_$(MACHINE)
|
||||
|
||||
INITRD:=$(SORTIX_BUILDS_DIR)/$(BUILD_NAME).initrd
|
||||
|
@ -87,18 +81,18 @@ ifeq ($(BUILD_IS_SORTIX),0)
|
|||
exit 1; \
|
||||
fi
|
||||
endif
|
||||
mkdir -p "$(INSTALL_ROOTFS)/boot/$(HOST)"
|
||||
rm -rf "$(INSTALL_ROOTFS)/boot/$(HOST)/sortix.initrd.d"
|
||||
mkdir -p "$(INSTALL_ROOTFS)/boot/$(HOST)/sortix.initrd.d"
|
||||
mkdir -p "$(INSTALL_ROOTFS)/boot/$(HOST)/sortix.initrd.d/$(HOST)/bin"
|
||||
mkdir -p "$(INSTALL_ROOTFS)/boot"
|
||||
rm -rf "$(INSTALL_ROOTFS)/boot/sortix.initrd.d"
|
||||
mkdir -p "$(INSTALL_ROOTFS)/boot/sortix.initrd.d"
|
||||
mkdir -p "$(INSTALL_ROOTFS)/boot/sortix.initrd.d/bin"
|
||||
for PROGRAM in init mbrfs extfs; do \
|
||||
cp "$(INSTALL_ROOTFS)/$(HOST)/bin/$$PROGRAM" "$(INSTALL_ROOTFS)/boot/$(HOST)/sortix.initrd.d/$(HOST)/bin/$$PROGRAM"; \
|
||||
cp "$(INSTALL_ROOTFS)/bin/$$PROGRAM" "$(INSTALL_ROOTFS)/boot/sortix.initrd.d/bin/$$PROGRAM"; \
|
||||
done
|
||||
mkdir -p "$(INSTALL_ROOTFS)/boot/$(HOST)/sortix.initrd.d/etc"
|
||||
mkdir -p "$(INSTALL_ROOTFS)/boot/$(HOST)/sortix.initrd.d/etc/init"
|
||||
cp "$(INSTALL_ROOTFS)/etc/rootfs.uuid" "$(INSTALL_ROOTFS)/boot/$(HOST)/sortix.initrd.d/etc/init/rootfs.uuid"
|
||||
mkinitrd --format=sortix-initrd-2 "$(INSTALL_ROOTFS)/boot/$(HOST)/sortix.initrd.d" -o "$(INSTALL_ROOTFS)/boot/$(HOST)/sortix.initrd"
|
||||
rm -rf "$(INSTALL_ROOTFS)/boot/$(HOST)/sortix.initrd.d"
|
||||
mkdir -p "$(INSTALL_ROOTFS)/boot/sortix.initrd.d/etc"
|
||||
mkdir -p "$(INSTALL_ROOTFS)/boot/sortix.initrd.d/etc/init"
|
||||
cp "$(INSTALL_ROOTFS)/etc/rootfs.uuid" "$(INSTALL_ROOTFS)/boot/sortix.initrd.d/etc/init/rootfs.uuid"
|
||||
mkinitrd --format=sortix-initrd-2 "$(INSTALL_ROOTFS)/boot/sortix.initrd.d" -o "$(INSTALL_ROOTFS)/boot/sortix.initrd"
|
||||
rm -rf "$(INSTALL_ROOTFS)/boot/sortix.initrd.d"
|
||||
|
||||
.PHONY: sysmerge
|
||||
sysmerge: sysroot
|
||||
|
@ -133,16 +127,14 @@ install-build-tools:
|
|||
.PHONY: sysroot-fsh
|
||||
sysroot-fsh:
|
||||
mkdir -p "$(SYSROOT)"
|
||||
for DIRNAME in boot etc include; do (\
|
||||
mkdir -p "$(SYSROOT)/$$DIRNAME" &&\
|
||||
mkdir -p "$(SYSROOT)/$$DIRNAME/$(HOST)" \
|
||||
) || exit $$?; done;
|
||||
mkdir -p "$(SYSROOT)/$(HOST)"
|
||||
for DIRNAME in bin lib libexec; do (\
|
||||
mkdir -p "$(SYSROOT)/$(HOST)/$$DIRNAME" \
|
||||
) || exit $$?; done;
|
||||
mkdir -p "$(SYSROOT)/bin"
|
||||
mkdir -p "$(SYSROOT)/boot"
|
||||
mkdir -p "$(SYSROOT)/etc"
|
||||
mkdir -p "$(SYSROOT)/etc/skel"
|
||||
mkdir -p "$(SYSROOT)/home"
|
||||
mkdir -p "$(SYSROOT)/include"
|
||||
mkdir -p "$(SYSROOT)/lib"
|
||||
mkdir -p "$(SYSROOT)/libexec"
|
||||
mkdir -p "$(SYSROOT)/mnt"
|
||||
mkdir -p "$(SYSROOT)/share"
|
||||
mkdir -p "$(SYSROOT)/src"
|
||||
|
@ -293,7 +285,7 @@ release-all-archs:
|
|||
kernel: sysroot
|
||||
|
||||
sortix.bin: kernel
|
||||
cp "$(SYSROOT)/boot/$(HOST)/sortix.bin" sortix.bin
|
||||
cp "$(SYSROOT)/boot/sortix.bin" sortix.bin
|
||||
|
||||
# Initial ramdisk
|
||||
|
||||
|
@ -305,12 +297,6 @@ $(INITRD): sysroot
|
|||
echo "exclude /next" >> $(INITRD).filter
|
||||
echo "exclude /src/sysroot" >> $(INITRD).filter
|
||||
echo "exclude /tmp" >> $(INITRD).filter
|
||||
for OTHER_PLATFORM in $(OTHER_PLATFORMS); do \
|
||||
echo "exclude /$$OTHER_PLATFORM" >> $(INITRD).filter; \
|
||||
echo "exclude /etc/$$OTHER_PLATFORM" >> $(INITRD).filter; \
|
||||
echo "exclude /include/$$OTHER_PLATFORM" >> $(INITRD).filter; \
|
||||
echo "exclude /tix/$$OTHER_PLATFORM" >> $(INITRD).filter; \
|
||||
done;
|
||||
if ! which mkinitrd; then echo You need to install mkinitrd; fi
|
||||
mkinitrd --format=sortix-initrd-2 --filter=$(INITRD).filter "$(SYSROOT)" -o $(INITRD)
|
||||
rm -f $(INITRD).filter
|
||||
|
@ -330,7 +316,7 @@ $(SORTIX_BUILDS_DIR)/$(BUILD_NAME).tar.xz: sysroot $(INITRD) $(SORTIX_BUILDS_DIR
|
|||
rm -rf $(SORTIX_BUILDS_DIR)/tardir
|
||||
mkdir -p $(SORTIX_BUILDS_DIR)/tardir
|
||||
mkdir -p $(SORTIX_BUILDS_DIR)/tardir/boot
|
||||
cp "$(SYSROOT)/boot/$(HOST)/sortix.bin" $(SORTIX_BUILDS_DIR)/tardir/boot/sortix.bin
|
||||
cp "$(SYSROOT)/boot/sortix.bin" $(SORTIX_BUILDS_DIR)/tardir/boot/sortix.bin
|
||||
cp $(INITRD) $(SORTIX_BUILDS_DIR)/tardir/boot/sortix.initrd
|
||||
tar --create --xz --file $(SORTIX_BUILDS_DIR)/$(BUILD_NAME).tar.xz -C $(SORTIX_BUILDS_DIR)/tardir `ls $(SORTIX_BUILDS_DIR)/tardir`
|
||||
rm -rf $(SORTIX_BUILDS_DIR)/tardir
|
||||
|
@ -344,7 +330,7 @@ $(SORTIX_BUILDS_DIR)/$(BUILD_NAME).iso: sysroot $(INITRD) $(SORTIX_BUILDS_DIR)
|
|||
rm -rf $(SORTIX_BUILDS_DIR)/$(BUILD_NAME)-iso
|
||||
mkdir -p $(SORTIX_BUILDS_DIR)/$(BUILD_NAME)-iso
|
||||
cp -RT isosrc $(SORTIX_BUILDS_DIR)/$(BUILD_NAME)-iso
|
||||
cp "$(SYSROOT)/boot/$(HOST)/sortix.bin" $(SORTIX_BUILDS_DIR)/$(BUILD_NAME)-iso/boot/sortix.bin
|
||||
cp "$(SYSROOT)/boot/sortix.bin" $(SORTIX_BUILDS_DIR)/$(BUILD_NAME)-iso/boot/sortix.bin
|
||||
cp $(INITRD) $(SORTIX_BUILDS_DIR)/$(BUILD_NAME)-iso/boot/sortix.initrd
|
||||
grub-mkrescue -o $(SORTIX_BUILDS_DIR)/$(BUILD_NAME).iso $(SORTIX_BUILDS_DIR)/$(BUILD_NAME)-iso
|
||||
rm -rf $(SORTIX_BUILDS_DIR)/$(BUILD_NAME)-iso
|
||||
|
|
|
@ -134,16 +134,20 @@ mkdir -p "$SYSROOT"
|
|||
mkdir -p "$SORTIX_REPOSITORY_DIR"
|
||||
|
||||
# Initialize Tix package management in the system root if absent.
|
||||
[ -d "$SYSROOT/tix/$HOST" ] ||
|
||||
tix-collection "$SYSROOT" create --platform=$HOST --prefix=
|
||||
[ -d "$SYSROOT/tix" ] ||
|
||||
tix-collection "$SYSROOT" create --platform=$HOST --prefix= --disable-multiarch
|
||||
|
||||
# Build all the packages (if needed) and otherwise install them.
|
||||
for PACKAGE in $PACKAGES; do
|
||||
[ -f "$SORTIX_REPOSITORY_DIR/$PACKAGE.tix.tar.xz" ] ||
|
||||
# TODO: After releasing Sortix 1.0, remove the --exec-prefix option after fixing
|
||||
# the tix-build exec-prefix default to just the prefix rather than the
|
||||
# prefix plus a host subdirectory.
|
||||
tix-build \
|
||||
--sysroot="$SYSROOT" \
|
||||
--host=$HOST \
|
||||
--prefix= \
|
||||
--exec-prefix= \
|
||||
--destination="$SORTIX_REPOSITORY_DIR" \
|
||||
"$SORTIX_PORTS_DIR/$PACKAGE"
|
||||
tix-install \
|
||||
|
|
|
@ -40,12 +40,10 @@ endif
|
|||
ifeq ($(HOST),i486-sortix)
|
||||
MACHINE:=i486
|
||||
CPU:=x86
|
||||
OTHER_PLATFORMS=x86-64-sortix
|
||||
endif
|
||||
ifeq ($(HOST),x86_64-sortix)
|
||||
MACHINE:=x86_64
|
||||
CPU:=x64
|
||||
OTHER_PLATFORMS=i486-sortix
|
||||
endif
|
||||
|
||||
# Determine the prefix for build tools.
|
||||
|
@ -101,6 +99,11 @@ endif
|
|||
ifndef HOSTOBJCOPY
|
||||
HOSTOBJCOPY:=$(HOST_TOOL_PREFIX)objcopy
|
||||
endif
|
||||
ifdef SYSROOT
|
||||
HOSTCC:=$(HOSTCC) --sysroot="$(SYSROOT)"
|
||||
HOSTCXX:=$(HOSTCXX) --sysroot="$(SYSROOT)"
|
||||
HOSTLD:=$(HOSTLD) --sysroot="$(SYSROOT)"
|
||||
endif
|
||||
|
||||
CC:=$(HOSTCC)
|
||||
CXX:=$(HOSTCXX)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
ifeq ($(HOST_IS_SORTIX),1)
|
||||
DEFAULT_PREFIX=
|
||||
DEFAULT_EXEC_PREFIX=$(PREFIX)/$(HOST)
|
||||
DEFAULT_EXEC_PREFIX=$(PREFIX)
|
||||
else
|
||||
DEFAULT_PREFIX=/usr/local
|
||||
DEFAULT_EXEC_PREFIX=$(PREFIX)
|
||||
|
|
|
@ -47,13 +47,3 @@ TARGET?=$(HOST)
|
|||
BUILD_IS_SORTIX:=$(if $(shell echo $(BUILD) | grep sortix$),1,0)
|
||||
HOST_IS_SORTIX:=$(if $(shell echo $(HOST) | grep sortix$),1,0)
|
||||
TARGET_IS_SORTIX:=$(if $(shell echo $(TARGET) | grep sortix$),1,0)
|
||||
|
||||
# Hack to allow easy filtering in the initrd.
|
||||
ifeq ($(HOST),i486-sortix)
|
||||
OTHER_PLATFORMS=x86-64-sortix
|
||||
OTHER_PLATFORM_1=x86-64-sortix
|
||||
endif
|
||||
ifeq ($(HOST),x86_64-sortix)
|
||||
OTHER_PLATFORMS=i486-sortix
|
||||
OTHER_PLATFORM_1=i486-sortix
|
||||
endif
|
||||
|
|
|
@ -80,20 +80,19 @@ Filesystem Structure
|
|||
|
||||
This as an incomplete list of the common top level directories in Sortix.
|
||||
|
||||
* `/bin` - Programs.
|
||||
* `/boot` - Kernel images, initrd images.
|
||||
* `/dev` - Device filesystem.
|
||||
* `/etc` - System-wide configuration.
|
||||
* `/home` - User directories.
|
||||
* `/include` - Header files.
|
||||
* `/libexec` - Non-user programs.
|
||||
* `/lib` - Shared libraries.
|
||||
* `/root` - Directory of the root user.
|
||||
* `/share` - Architecture independent files.
|
||||
* `/share/doc` - Documentation.
|
||||
* `/src` - System source code.
|
||||
* `/tmp` - Temporary files.
|
||||
* `/$cputype` - Files for $cputype.
|
||||
* `/$cputype/bin` - Programs for $cputype.
|
||||
* `/$cputype/lib` - Shared libaries for $cputype.
|
||||
* `/$cputype/libexec` - Non-user programs for $cputype.
|
||||
|
||||
Some of these directories not be present or empty on your installation.
|
||||
|
||||
|
|
|
@ -215,8 +215,7 @@ try_reboot_system:
|
|||
chroot(path);
|
||||
chdir("/");
|
||||
|
||||
assert(getenv("cputype"));
|
||||
char* init_path = print_string("/%s/bin/init", getenv("cputype"));
|
||||
const char* init_path = "/bin/init";
|
||||
execl(init_path, init_path, NULL);
|
||||
exit(127);
|
||||
}
|
||||
|
@ -479,13 +478,7 @@ int init_main(int argc, char* argv[])
|
|||
umask(022);
|
||||
|
||||
// Set up the PATH variable.
|
||||
const char* prefix = "/";
|
||||
const char* cputype = getenv("cputype");
|
||||
const char* suffix = "/bin";
|
||||
char* path = new char[strlen(prefix) + strlen(cputype) + strlen(suffix) + 1];
|
||||
stpcpy(stpcpy(stpcpy(path, prefix), cputype), suffix);
|
||||
setenv("PATH", path, 1);
|
||||
delete[] path;
|
||||
setenv("PATH", "/bin", 1);
|
||||
|
||||
// Set the terminal type.
|
||||
setenv("TERM", "sortix", 1);
|
||||
|
|
|
@ -214,5 +214,5 @@ install-headers: install-include-dirs headers
|
|||
install-kernel: install-kernel-binary
|
||||
|
||||
install-kernel-binary: sortix.bin
|
||||
mkdir -p $(DESTDIR)$(BOOTDIR)/$(HOST)
|
||||
cp sortix.bin $(DESTDIR)$(BOOTDIR)/$(HOST)
|
||||
mkdir -p $(DESTDIR)$(BOOTDIR)
|
||||
cp sortix.bin $(DESTDIR)$(BOOTDIR)/sortix.bin
|
||||
|
|
|
@ -648,14 +648,6 @@ static void BootThread(void* /*user*/)
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(__i386__)
|
||||
#define CPUTYPE_STR "i486-sortix"
|
||||
#elif defined(__x86_64__)
|
||||
#define CPUTYPE_STR "x86_64-sortix"
|
||||
#else
|
||||
#error No cputype environmental variable provided here.
|
||||
#endif
|
||||
|
||||
static void InitThread(void* /*user*/)
|
||||
{
|
||||
// We are the init process's first thread. Let's load the init program from
|
||||
|
@ -681,7 +673,7 @@ static void InitThread(void* /*user*/)
|
|||
|
||||
dtable.Reset();
|
||||
|
||||
const char* initpath = "/" CPUTYPE_STR "/bin/init";
|
||||
const char* initpath = "/bin/init";
|
||||
Ref<Descriptor> init = root->open(&ctx, initpath, O_EXEC | O_READ);
|
||||
if ( !init )
|
||||
PanicF("Could not open %s in early kernel RAM filesystem:\n%s",
|
||||
|
@ -711,9 +703,8 @@ static void InitThread(void* /*user*/)
|
|||
|
||||
int argc = 1;
|
||||
const char* argv[] = { "init", NULL };
|
||||
const char* cputype = "cputype=" CPUTYPE_STR;
|
||||
int envc = 1;
|
||||
const char* envp[] = { cputype, NULL };
|
||||
int envc = 0;
|
||||
const char* envp[] = { NULL };
|
||||
struct thread_registers regs;
|
||||
assert((((uintptr_t) ®s) & (alignof(regs)-1)) == 0);
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Copyright(C) Jonas 'Sortie' Termansen 2013.
|
||||
Copyright(C) Jonas 'Sortie' Termansen 2013, 2014, 2015.
|
||||
|
||||
This file is part of Tix.
|
||||
|
||||
|
@ -107,6 +107,7 @@ typedef struct
|
|||
char* package_info_path;
|
||||
char* package_name;
|
||||
char* prefix;
|
||||
char* exec_prefix;
|
||||
char* sysroot;
|
||||
char* tar;
|
||||
char* target;
|
||||
|
@ -140,11 +141,22 @@ bool has_in_path(const char* program)
|
|||
_exit(1);
|
||||
}
|
||||
|
||||
void emit_compiler_wrapper_invocation(FILE* wrapper,
|
||||
metainfo_t* minfo,
|
||||
const char* name)
|
||||
{
|
||||
fprintf(wrapper, "%s", name);
|
||||
if ( minfo->sysroot )
|
||||
fprintf(wrapper, " --sysroot=\"$SYSROOT\"");
|
||||
fprintf(wrapper, " \"$@\"");
|
||||
}
|
||||
|
||||
void emit_compiler_warning_wrapper(metainfo_t* minfo,
|
||||
const char* bindir,
|
||||
const char* name)
|
||||
{
|
||||
(void) minfo;
|
||||
if ( !minfo->sysroot )
|
||||
return;
|
||||
if ( !has_in_path(name) )
|
||||
return;
|
||||
const char* warnings_dir = getenv("TIX_WARNINGS_DIR");
|
||||
|
@ -156,14 +168,22 @@ void emit_compiler_warning_wrapper(metainfo_t* minfo,
|
|||
fprintf(wrapper, "#!/bin/bash\n");
|
||||
fprint_shell_variable_assignment(wrapper, "PATH", getenv("PATH"));
|
||||
fprint_shell_variable_assignment(wrapper, "TIX_WARNINGS_DIR", warnings_dir);
|
||||
if ( minfo->sysroot )
|
||||
fprint_shell_variable_assignment(wrapper, "SYSROOT", minfo->sysroot);
|
||||
fprintf(wrapper, "warnfile=$(mktemp --tmpdir=\"$TIX_WARNINGS_DIR\")\n");
|
||||
fprintf(wrapper, "(%s \"$@\") 2> >(tee $warnfile >&2)\n", name);
|
||||
fprintf(wrapper, "(");
|
||||
emit_compiler_wrapper_invocation(wrapper, minfo, name);
|
||||
fprintf(wrapper, ") 2> >(tee $warnfile >&2)\n");
|
||||
fprintf(wrapper, "exitstatus=$?\n");
|
||||
fprintf(wrapper, "if test -s \"$warnfile\"; then\n");
|
||||
fprintf(wrapper, " if test $exitstatus = 0; then\n");
|
||||
fprintf(wrapper, " (echo \"cd $(pwd) && %s $@\" && cat \"$warnfile\") > \"$warnfile.warn\"\n", name);
|
||||
fprintf(wrapper, " (echo \"cd $(pwd) && ");
|
||||
emit_compiler_wrapper_invocation(wrapper, minfo, name);
|
||||
fprintf(wrapper, " && cat \"$warnfile\") > \"$warnfile.warn\"\n");
|
||||
fprintf(wrapper, " else\n");
|
||||
fprintf(wrapper, " (echo \"cd $(pwd) && %s $@\" && cat \"$warnfile\") > \"$warnfile.err\"\n", name);
|
||||
fprintf(wrapper, " (echo \"cd $(pwd) && ");
|
||||
emit_compiler_wrapper_invocation(wrapper, minfo, name);
|
||||
fprintf(wrapper, " && cat \"$warnfile\") > \"$warnfile.err\"\n");
|
||||
fprintf(wrapper, " fi\n");
|
||||
fprintf(wrapper, "fi\n");
|
||||
fprintf(wrapper, "rm -f \"$warnfile\"\n");
|
||||
|
@ -184,6 +204,38 @@ void emit_compiler_warning_cross_wrapper(metainfo_t* minfo,
|
|||
free(cross_name);
|
||||
}
|
||||
|
||||
void emit_compiler_sysroot_wrapper(metainfo_t* minfo,
|
||||
const char* bindir,
|
||||
const char* name)
|
||||
{
|
||||
if ( !has_in_path(name) )
|
||||
return;
|
||||
char* wrapper_path = print_string("%s/%s", bindir, name);
|
||||
FILE* wrapper = fopen(wrapper_path, "w");
|
||||
if ( !wrapper )
|
||||
error(1, errno, "`%s'", wrapper_path);
|
||||
fprint_shell_variable_assignment(wrapper, "PATH", getenv("PATH"));
|
||||
if ( minfo->sysroot )
|
||||
fprint_shell_variable_assignment(wrapper, "SYSROOT", minfo->sysroot);
|
||||
fprintf(wrapper, "exec ");
|
||||
emit_compiler_wrapper_invocation(wrapper, minfo, name);
|
||||
fprintf(wrapper, "\n");
|
||||
fflush(wrapper);
|
||||
fchmod_plus_x(fileno(wrapper));
|
||||
fclose(wrapper);
|
||||
|
||||
free(wrapper_path);
|
||||
}
|
||||
|
||||
void emit_compiler_sysroot_cross_wrapper(metainfo_t* minfo,
|
||||
const char* bindir,
|
||||
const char* name)
|
||||
{
|
||||
char* cross_name = print_string("%s-%s", minfo->host, name);
|
||||
emit_compiler_sysroot_wrapper(minfo, bindir, cross_name);
|
||||
free(cross_name);
|
||||
}
|
||||
|
||||
void emit_pkg_config_wrapper(metainfo_t* minfo)
|
||||
{
|
||||
char* bindir = print_string("%s/tmppid.%ju.bin", minfo->tmp, (uintmax_t) getpid());
|
||||
|
@ -228,8 +280,8 @@ void emit_pkg_config_wrapper(metainfo_t* minfo)
|
|||
char* var_pkg_config = print_string("%s/pkg-config", bindir);
|
||||
char* var_pkg_config_for_build = print_string("%s/build-pkg-config", bindir);
|
||||
char* var_pkg_config_libdir =
|
||||
print_string("%s%s/%s/lib/pkgconfig",
|
||||
minfo->sysroot, minfo->prefix, minfo->host);
|
||||
print_string("%s%s/lib/pkgconfig",
|
||||
minfo->sysroot, minfo->exec_prefix);
|
||||
char* var_pkg_config_path = print_string("%s", var_pkg_config_libdir);
|
||||
char* var_pkg_config_sysroot_dir = print_string("%s", minfo->sysroot);
|
||||
setenv("PKG_CONFIG", var_pkg_config, 1);
|
||||
|
@ -258,6 +310,12 @@ void emit_pkg_config_wrapper(metainfo_t* minfo)
|
|||
free(warnings_dir);
|
||||
}
|
||||
|
||||
emit_compiler_sysroot_cross_wrapper(minfo, bindir, "cc");
|
||||
emit_compiler_sysroot_cross_wrapper(minfo, bindir, "gcc");
|
||||
emit_compiler_sysroot_cross_wrapper(minfo, bindir, "c++");
|
||||
emit_compiler_sysroot_cross_wrapper(minfo, bindir, "g++");
|
||||
emit_compiler_sysroot_cross_wrapper(minfo, bindir, "ld");
|
||||
|
||||
if ( getenv("TIX_WARNINGS_DIR") )
|
||||
{
|
||||
emit_compiler_warning_wrapper(minfo, bindir, "cc");
|
||||
|
@ -297,6 +355,15 @@ void Configure(metainfo_t* minfo)
|
|||
bool with_sysroot =
|
||||
parse_boolean(dictionary_get(pkg_info, "pkg.configure.with-sysroot",
|
||||
"false"));
|
||||
// After releasing Sortix 1.0, remove this and hard-code the default o
|
||||
// false. This allows building Sortix 0.9 with its own ports using this
|
||||
// tix-build version.
|
||||
const char* with_sysroot_ld_bug_default = "false";
|
||||
if ( !strcmp(minfo->package_name, "binutils") )
|
||||
with_sysroot_ld_bug_default = "true";
|
||||
bool with_sysroot_ld_bug =
|
||||
parse_boolean(dictionary_get(pkg_info, "pkg.configure.with-sysroot-ld-bug",
|
||||
with_sysroot_ld_bug_default ));
|
||||
bool with_build_sysroot =
|
||||
parse_boolean(dictionary_get(pkg_info, "pkg.configure.with-build-sysroot",
|
||||
"false"));
|
||||
|
@ -322,7 +389,7 @@ void Configure(metainfo_t* minfo)
|
|||
print_string("--host=%s", minfo->host),
|
||||
print_string("--target=%s", minfo->target),
|
||||
print_string("--prefix=%s", minfo->prefix),
|
||||
print_string("--exec-prefix=%s/%s", minfo->prefix, minfo->host),
|
||||
print_string("--exec-prefix=%s", minfo->exec_prefix),
|
||||
NULL
|
||||
};
|
||||
string_array_t args = string_array_make();
|
||||
|
@ -333,18 +400,20 @@ void Configure(metainfo_t* minfo)
|
|||
string_array_append(&args, print_string("--with-build-sysroot=%s",
|
||||
minfo->sysroot));
|
||||
if ( minfo->sysroot && with_sysroot )
|
||||
string_array_append(&args, "--with-sysroot=/");
|
||||
unsetenv("HOST_SYSTEM_ROOT");
|
||||
{
|
||||
// TODO: Binutils has a bug where the empty string means that
|
||||
// sysroot support is disabled and ld --sysroot won't work
|
||||
// so set it to / here for compatibility.
|
||||
if ( with_sysroot_ld_bug )
|
||||
string_array_append(&args, "--with-sysroot=/");
|
||||
else
|
||||
string_array_append(&args, "--with-sysroot=");
|
||||
}
|
||||
}
|
||||
else if ( minfo->sysroot && with_sysroot )
|
||||
{
|
||||
string_array_append(&args, print_string("--with-sysroot=%s",
|
||||
minfo->sysroot));
|
||||
unsetenv("HOST_SYSTEM_ROOT");
|
||||
}
|
||||
else if ( minfo->sysroot )
|
||||
{
|
||||
setenv("HOST_SYSTEM_ROOT", minfo->sysroot, 1);
|
||||
}
|
||||
string_array_append_token_string(&args, conf_extra_args);
|
||||
string_array_append(&args, NULL);
|
||||
|
@ -379,12 +448,6 @@ void Make(metainfo_t* minfo, const char* make_target,
|
|||
if ( dictionary_get(pkg_info, "pkg.make.needed-vars.CXX", NULL) )
|
||||
setenv("CXX", strcmp(minfo->build, minfo->host) ?
|
||||
print_string("%s-g++", minfo->host) : "g++", 1);
|
||||
bool with_sysroot =
|
||||
parse_boolean(dictionary_get(pkg_info, "pkg.configure.with-sysroot",
|
||||
"false"));
|
||||
bool with_build_sysroot =
|
||||
parse_boolean(dictionary_get(pkg_info, "pkg.configure.with-build-sysroot",
|
||||
"false"));
|
||||
if ( chdir(minfo->build_dir) != 0 )
|
||||
error(1, errno, "chdir: `%s'", minfo->build_dir);
|
||||
if ( subdir && chdir(subdir) != 0 )
|
||||
|
@ -395,13 +458,13 @@ void Make(metainfo_t* minfo, const char* make_target,
|
|||
setenv("HOST", minfo->host, 1);
|
||||
setenv("TARGET", minfo->target, 1);
|
||||
if ( minfo->prefix )
|
||||
setenv("PREFIX", minfo->prefix, 1),
|
||||
setenv("EXEC_PREFIX", join_paths(minfo->prefix, minfo->host), 1);
|
||||
setenv("PREFIX", minfo->prefix, 1);
|
||||
else
|
||||
unsetenv("PREFIX");
|
||||
if ( minfo->exec_prefix )
|
||||
setenv("EXEC_PREFIX", minfo->exec_prefix, 1);
|
||||
else
|
||||
unsetenv("PREFIX"),
|
||||
unsetenv("EXEC_PREFIX");
|
||||
if ( !(with_sysroot || with_build_sysroot) && minfo->sysroot )
|
||||
setenv("HOST_SYSTEM_ROOT", minfo->sysroot, 1);
|
||||
if ( minfo->makeflags )
|
||||
setenv("MAKEFLAGS", minfo->makeflags, 1);
|
||||
setenv("MAKE", minfo->make, 1);
|
||||
|
@ -530,14 +593,20 @@ void BuildPackage(metainfo_t* minfo)
|
|||
setenv("TIX_BUILD_DIR", minfo->build_dir, 1);
|
||||
setenv("TIX_SOURCE_DIR", minfo->package_dir, 1);
|
||||
setenv("TIX_INSTALL_DIR", destdir, 1);
|
||||
if ( minfo->sysroot )
|
||||
setenv("TIX_SYSROOT", minfo->sysroot, 1);
|
||||
else
|
||||
unsetenv("TIX_SYSROOT");
|
||||
setenv("BUILD", minfo->build, 1);
|
||||
setenv("HOST", minfo->host, 1);
|
||||
setenv("TARGET", minfo->target, 1);
|
||||
if ( minfo->prefix )
|
||||
setenv("PREFIX", minfo->prefix, 1),
|
||||
setenv("EXEC_PREFIX", join_paths(minfo->prefix, minfo->host), 1);
|
||||
setenv("PREFIX", minfo->prefix, 1);
|
||||
else
|
||||
unsetenv("PREFIX");
|
||||
if ( minfo->exec_prefix )
|
||||
setenv("EXEC_PREFIX", minfo->exec_prefix, 1);
|
||||
else
|
||||
unsetenv("PREFIX"),
|
||||
unsetenv("EXEC_PREFIX");
|
||||
const char* cmd_argv[] =
|
||||
{
|
||||
|
@ -693,7 +762,8 @@ int main(int argc, char* argv[])
|
|||
minfo.makeflags = strdup_null(getenv_def("MAKEFLAGS", NULL));
|
||||
minfo.make = strdup(getenv_def("MAKE", "make"));
|
||||
minfo.prefix = strdup_null(getenv_def("PREFIX", NULL));
|
||||
minfo.sysroot = strdup_null(getenv_def("HOST_SYSTEM_ROOT", NULL));
|
||||
minfo.exec_prefix = strdup_null(getenv_def("EXEC_PREFIX", NULL));
|
||||
minfo.sysroot = strdup_null(getenv_def("SYSROOT", NULL));
|
||||
minfo.target = NULL;
|
||||
minfo.tar = strdup(getenv_def("TAR", "tar"));
|
||||
minfo.tmp = strdup(getenv_def("BUILDTMP", "."));
|
||||
|
@ -729,6 +799,7 @@ int main(int argc, char* argv[])
|
|||
else if ( GET_OPTION_VARIABLE("--makeflags", &minfo.makeflags) ) { }
|
||||
else if ( GET_OPTION_VARIABLE("--make", &minfo.make) ) { }
|
||||
else if ( GET_OPTION_VARIABLE("--prefix", &minfo.prefix) ) { }
|
||||
else if ( GET_OPTION_VARIABLE("--exec-prefix", &minfo.exec_prefix) ) { }
|
||||
else if ( GET_OPTION_VARIABLE("--start", &start_step_string) ) { }
|
||||
else if ( GET_OPTION_VARIABLE("--sysroot", &minfo.sysroot) ) { }
|
||||
else if ( GET_OPTION_VARIABLE("--target", &minfo.target) ) { }
|
||||
|
@ -786,12 +857,23 @@ int main(int argc, char* argv[])
|
|||
error(1, errno, "canonicalize_file_name: `%s'", argv[1]);
|
||||
|
||||
if ( !minfo.build && !(minfo.build = GetBuildTriplet()) )
|
||||
error(1, errno, "unable to determine host, use --host or BUILD");
|
||||
error(1, errno, "unable to determine build, use --build or BUILD");
|
||||
if ( !minfo.host && !(minfo.host = strdup_null(getenv("HOST"))) )
|
||||
minfo.host = strdup(minfo.build);
|
||||
if ( !minfo.target && !(minfo.target = strdup_null(getenv("TARGET"))) )
|
||||
minfo.target = strdup(minfo.host);
|
||||
|
||||
if ( minfo.prefix && !minfo.exec_prefix )
|
||||
{
|
||||
// TODO: After releasing Sortix 1.0, switch to this branch that defaults the
|
||||
// exec-prefix to the prefix.
|
||||
#if 0
|
||||
minfo.exec_prefix = strdup(minfo.prefix);
|
||||
#else // Sortix 0.9 compatibility.
|
||||
minfo.exec_prefix = print_string("%s/%s", minfo.prefix, minfo.host);
|
||||
#endif
|
||||
}
|
||||
|
||||
if ( !IsDirectory(minfo.package_dir) )
|
||||
error(1, errno, "`%s'", minfo.package_dir);
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Copyright(C) Jonas 'Sortie' Termansen 2013.
|
||||
Copyright(C) Jonas 'Sortie' Termansen 2013, 2015.
|
||||
|
||||
This file is part of Tix.
|
||||
|
||||
|
@ -65,6 +65,13 @@ int main(int argc, char* argv[])
|
|||
char* collection = strdup_null(getenv_def("TIX_COLLECTION", NULL));
|
||||
char* platform = NULL;
|
||||
char* prefix = NULL;
|
||||
// TODO: After releasing Sortix 1.0, keep the --disable-multiarch option
|
||||
// supported (but ignored), delete all uses of --disable-multiarch,
|
||||
// delete the --enable-multiarch option, delete the use_multiarch=true
|
||||
// case code. Simplify all of this code, remove the tixdb abstraction.
|
||||
// TODO: After releasing Sortix 1.1, delete the --disable-multiarch option
|
||||
// compatibility.
|
||||
bool use_multiarch = true;
|
||||
|
||||
const char* argv0 = argv[0];
|
||||
for ( int i = 0; i < argc; i++ )
|
||||
|
@ -91,6 +98,8 @@ int main(int argc, char* argv[])
|
|||
else if ( GET_OPTION_VARIABLE("--collection", &collection) ) { }
|
||||
else if ( GET_OPTION_VARIABLE("--platform", &platform) ) { }
|
||||
else if ( GET_OPTION_VARIABLE("--prefix", &prefix) ) { }
|
||||
else if ( !strcmp(arg, "--enable-multiarch") ) { use_multiarch = true; }
|
||||
else if ( !strcmp(arg, "--disable-multiarch") ) { use_multiarch = false; }
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "%s: unknown option: `%s'\n", argv0, arg);
|
||||
|
@ -130,9 +139,17 @@ int main(int argc, char* argv[])
|
|||
if ( mkdir_p(tix_path, 0777) != 0 )
|
||||
error(1, errno, "mkdir: `%s'", tix_path);
|
||||
|
||||
char* tixdb_path = join_paths(tix_path, platform);
|
||||
if ( mkdir_p(tixdb_path, 0777) != 0 )
|
||||
error(1, errno, "mkdir: `%s'", tixdb_path);
|
||||
char* tixdb_path;
|
||||
if ( use_multiarch )
|
||||
{
|
||||
tixdb_path = join_paths(tix_path, platform);
|
||||
if ( mkdir_p(tixdb_path, 0777) != 0 )
|
||||
error(1, errno, "mkdir: `%s'", tixdb_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
tixdb_path = strdup(tix_path);
|
||||
}
|
||||
|
||||
char* collection_conf_path = join_paths(tixdb_path, "collection.conf");
|
||||
FILE* conf_fp = fopen(collection_conf_path, "wx");
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Copyright(C) Jonas 'Sortie' Termansen 2013.
|
||||
Copyright(C) Jonas 'Sortie' Termansen 2013, 2015.
|
||||
|
||||
This file is part of Tix.
|
||||
|
||||
|
@ -52,13 +52,6 @@ void TipTixCollection(const char* prefix)
|
|||
"installing packages.", prefix);
|
||||
}
|
||||
|
||||
void TipTixWrongPlatform(const char* prefix, const char* platform)
|
||||
{
|
||||
error(0, 0, "error: `%s' isn't a tix collection for platform `%s', use "
|
||||
"tix-collection to add this platform before installing "
|
||||
"packages.", prefix, platform);
|
||||
}
|
||||
|
||||
void VerifyTixCollection(const char* prefix)
|
||||
{
|
||||
if ( !IsDirectory(prefix) )
|
||||
|
@ -80,16 +73,10 @@ void VerifyTixDirectory(const char* prefix, const char* tix_dir)
|
|||
}
|
||||
|
||||
void VerifyTixDatabase(const char* prefix,
|
||||
const char* tixdb_path,
|
||||
const char* platform)
|
||||
const char* tixdb_path)
|
||||
{
|
||||
if ( !IsDirectory(tixdb_path) )
|
||||
{
|
||||
if ( errno == ENOENT )
|
||||
TipTixWrongPlatform(prefix, platform);
|
||||
error(1, errno, "error: tix database for platform `%s' unavailable: "
|
||||
"`%s'", platform, tixdb_path);
|
||||
}
|
||||
error(1, errno, "error: tix database unavailable: `%s'", tixdb_path);
|
||||
char* info_path = join_paths(tixdb_path, "collection.conf");
|
||||
if ( !IsFile(info_path) )
|
||||
{
|
||||
|
@ -277,10 +264,19 @@ int main(int argc, char* argv[])
|
|||
const char* package_platform = dictionary_get(&tixinfo, "tix.platform");
|
||||
assert(package_platform);
|
||||
|
||||
// TODO: After releasing Sortix 1.0, delete this compatibility.
|
||||
char* tixdb_path = join_paths(tix_directory_path, package_platform);
|
||||
free(tix_directory_path);
|
||||
if ( IsDirectory(tixdb_path ) )
|
||||
{
|
||||
free(tix_directory_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
free(tixdb_path);
|
||||
tixdb_path = tix_directory_path;
|
||||
}
|
||||
|
||||
VerifyTixDatabase(collection, tixdb_path, package_platform);
|
||||
VerifyTixDatabase(collection, tixdb_path);
|
||||
|
||||
char* coll_conf_path = join_paths(tixdb_path, "collection.conf");
|
||||
string_array_t coll_conf = string_array_make();
|
||||
|
|
Loading…
Reference in a new issue