Commit Graph

32 Commits

Author SHA1 Message Date
Augustin Cavalier
a4d27987d2 KernelRules: Add the same -fvisibility=hidden logic in KernelStaticLibrary...
...as was already added to the regular (userland) StaticLibrary some
time ago. Shaves off double-digit percentages of the file size of
e.g. FreeBSD and OpenBSD network drivers.
2022-09-27 19:46:52 -04:00
Augustin Cavalier
7aa5574713 kernel & addons: Build with the non-legacy GCC even on x86_gcc2h.
Only one code change: for some reason, GCC chokes on the cr3 functions
as macros (throwing errors about invalid registers.) The BSDs have them
as inline functions instead, so they are converted to that here.

Tested and working. There seems to be about a 10% decrease in CPU time
on some compilation benchmarks that I briefly tried.

Change-Id: I31666297394d7619f83fca6ff5f933ddd6f07420
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4515
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2021-10-02 18:29:40 +00:00
PulkoMandy
cc6b376cfb KernelLd: the kernel must be rebuilt when its linker script is modified.
Change-Id: I4f8bf6757b716f910116509419452cfc4c7f6216
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3580
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2021-01-01 00:45:13 +00:00
Augustin Cavalier
128781e740 build/jam: Inline HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR where possible.
The "exec" tool can only handle one command with environs set at
the beginning of the line, so now we set the ADD_BUILD_COMPAT...
in this format. This also seems to be a general performance
improvement to builds using real shells, too.

Change-Id: If4b3117651b5475039d5e8116cd3de398582290a
2019-08-30 17:11:50 -04:00
Augustin Cavalier
df34a27137 build: Do not use regular TARGET_*FLAGS in kernel and bootloader.
The generic CCFLAGS are already appended to the HAIKU_KERNEL_*FLAGS
and HAIKU_BOOT_*FLAGS, so these were just duplicates. And now that
we strip certain flags out of the base ones, this was incorrect
(and causes Clang to error in some circumstances.)
2018-11-23 00:06:23 -05:00
Jessica Hamilton
74bfec3b96 build/jam: whitespace cleanup.
Change-Id: I80c9a51417631b1f283923451f5bb530097b74f3
2018-05-07 13:12:16 +12:00
Simon South
9e5091d7a3 Build without linker warnings about missing entry symbols.
* BootRules: Use -Xlinker option correctly to specify entry point.
* KernelRules: Build kernel add-ons as shared objects explicitly.

Signed-off-by: Jérôme Duval <jerome.duval@gmail.com>
2015-10-29 16:59:59 +01:00
Oliver Tappe
220d040227 Use libstdc++, libsupc++ and libgcc from gcc_syslibs.
* Instead of faking libstdc++.so from libstdc++.a, use libstdc++.so
  from the gcc_syslibs build feature for everything except x86_gcc2.
* Use libgcc_s.so from the gcc_syslibs build feature for everything but
  x86_gcc2 (which still carries libgcc as part of libroot.so).
* Drop filtering of libgcc objects for libroot, as that is no longer
  necessary since we're only using libgcc-as-single-object for libroot
  with x86_gcc2, where the filtered object file doesn't exist. Should
  the objects that used to be filtered cause any problems as part of
  libgcc_s.so, we can always filter them as part of the gcc build.
* Use libsupc++.so from the gcc_syslibs build feature for everything but
  x86_gcc2.
* Adjust all Jamfiles accordingly.
* Deactivate building of faked libstdc++.so for non-x86-gcc2. For
  x86_gcc2, we still build libstdc++.so from the sources in the Haiku
  source tree as part of the Haiku build .
* Put gcc_syslibs package onto the image, when needed.
2014-08-13 13:32:44 +02:00
Oliver Tappe
bd04aa3772 Cleanup: Fix missing evaluation of HAIKU_NO_LIBSUPC++.
* There's no user of HAIKU_NO_LIBSUPC++ anywhere, so the typo didn't
  have any effect.
2014-07-31 10:49:36 +02:00
Oliver Tappe
8c54af563c Whitespace cleanup in root and 'build' folder.
* Removed trailing whitespace and empty lines at top of files.
2014-05-01 12:55:41 +02:00
François Revol
39d26e3cdb Set HAIKU_TARGET_IS_EXECUTABLE in KernelLd as well
The kernel also needs to be stripped for m68k.

Propagate it to the revisioned binary as well.
2013-10-12 18:42:57 +02:00
Oliver Tappe
d1246f33f0 Drop use of non-existing variable in KernelAddon rule.
* TARGET_KERNEL_PIC_FLAGS was probably meant to be 
  TARGET_KERNEL_PIC_CCFLAGS at the time this had been added in 2005.
  As correcting the name would mean that kernel add-ons would be 
  compiled such that they wouldn't be position independent, dropping
  the variable makes more sense (which is just a cleanup and doesn't 
  change anything due to that variable being always empty)
2013-08-29 22:44:50 +02:00
Ingo Weinhold
b0944c78b0 More work towards hybrid support
* All packaging architecture dependent variables do now have a
  respective suffix and are set up for each configured packaging
  architecture, save for the kernel and boot loader variables, which
  are still only set up for the primary architecture.
  For convenience TARGET_PACKAGING_ARCH, TARGET_ARCH, TARGET_LIBSUPC++,
  and TARGET_LIBSTDC++ are set to the respective values for the primary
  packaging architecture by default.
* Introduce a set of MultiArch* rules to help with building targets for
  multiple packaging architectures. Generally the respective targets are
  (additionally) gristed with the packaging architecture. For libraries
  the additional grist is usually omitted for the primary architecture
  (e.g. libroot.so and <x86>libroot.so for x86_gcc2/x86 hybrid), so that
  Jamfiles for targets built only for the primary architecture don't
  need to be changed.
* Add multi-arch build support for all targets needed for the stage 1
  cross devel package as well as for libbe (untested).
2013-08-01 08:54:06 +02:00
Ingo Weinhold
d0e6e17436 rule KernelStaticLibrary: Fix comment 2013-05-05 15:04:08 +02:00
Alex Smith
c864ba1a2d Build a separate libsupc++ for the kernel with correct flags.
Kernel mode code on x86_64 needs to be built with -mno-red-zone as
interrupts would corrupt the red zone if it were in use. However, the
kernel is linked with libsupc++, which was not compiled with
-mno-red-zone. If an interrupt occurred in libsupc++ code the red zone
would get corrupted. This was causing random panics, particularly under
heavy system load. Therefore, on x86_64 a separate build of libsupc++
with -mno-red-zone is now done for the kernel to use. Note: this commit
will require a rerun of configure and rebuild of cross tools.
2012-08-16 13:57:04 +01:00
Alex Smith
385d69fc01 Made it possible to build kernel modules for x86_64.
Added the necessary build flags for modules, and added a module (dpc)
to the floppy image for x86_64 builds for testing purposes. The module
gets loaded correctly and its code runs without issue. Only non-trivial
addition is the different method for generating kernel.so, this is
explained in the kernel Jamfile.
2012-07-19 17:53:46 +01:00
Ingo Weinhold
e89f127b9e KernelLd rule: opt-out linking against libsupc++
Introduced HAIKU_NO_LIBSUPC++ variable on target to prevent linking
against libsupc++.
2011-11-12 15:40:17 +01:00
Ingo Weinhold
297827477b Added rule SetVersionScript to set the version script for a target and adjusted
the Link and KernelLd rules to support it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30825 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-22 14:51:16 +00:00
Ingo Weinhold
adfe1993eb Add --no-undefined for kernel add-ons, too.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25071 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-20 03:08:29 +00:00
Ingo Weinhold
34b3b26b3b Merged branch haiku/branches/developer/bonefish/optimization revision
23139 into trunk, with roughly the following changes (for details svn
log the branch):
* The int 99 syscall handler is now fully in assembly.
* Added a sysenter/sysexit handler and use it on Pentiums that support
  it (via commpage).
* Got rid of i386_handle_trap(). A bit of functionality was moved into
  the assembly handler which now uses a jump table to call C functions
  handling the respective interrupt.
* Some optimizations to get user debugger support code out of the
  interrupt handling path.
* Introduced a thread::flags fields which allows to skip handling of
  rare events (signals, user debug enabling/disabling) on the
  common interrupt handling path.
* Got rid of the explicit iframe stack. The iframes can still be
  retrieved by iterating through the stack frames.
* Made the commpage an architecture independent feature. It's used for
  the real time data stuff (instead of creating a separate area).
* The x86 CPU modules can now provide processor optimized versions for
  common functions (currently memcpy() only). They are used in the
  kernel and are provided to the userland via commpage entries.
* Introduced build system feature allowing easy use of C structure
  member offsets in assembly code.

Changes after merging:
* Fixed merge conflict in src/system/kernel/arch/x86/arch_debug.cpp
  (caused by refactoring and introduction of "call" debugger command).



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23370 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-11 00:36:44 +00:00
Ingo Weinhold
da0f9ae040 Added Haiku as host platform supported by the build system ("haiku_host").
Completely untested yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21802 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-02 21:13:56 +00:00
Ingo Weinhold
f7d29d339b Don't include the grist in libraries' sonames.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20233 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-02-26 02:47:12 +00:00
Marcus Overhagen
3f493ef624 Force recreation of *.a archives to avoid build errors caused by
stale dependencies after renaming or deleting object files.
This will avoid link error like the one that was caused by the 
recent mesa update.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20148 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-02-17 22:42:16 +00:00
Jérôme Duval
c49e0c68b0 dropped a useless arg of the KernelAddon rule, hope I don't mess anything
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18879 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-18 10:02:13 +00:00
Jérôme Duval
44d5675324 KernelAddon and KernelStaticLibrary don't include kernel, kernel arch, boot platform headers anymore.
Fixed the build of most of targets using these rules. Though the build can be still broken, feel free to fix.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18521 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-17 12:18:11 +00:00
Jérôme Duval
70418bc5bf KernelAddon rule accepts resources
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18455 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-08 10:41:19 +00:00
Axel Dörfler
cce6f8d05f * Changed the kernel build rules, so that the executables can have resources
files, too.
* Added a temporary icon for the kernel until Stephan comes up with a better
  one (hint hint!) :-))
* This even fixes bug #648.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17825 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-06-13 16:08:55 +00:00
Ingo Weinhold
957a1b17eb * Introduced new build system variables
{HAIKU,HOST,TARGET}_KERNEL_PIC_{CC,LINK}FLAGS which define the
  compiler/linker flags specifying the kind of position independence
  the kernel shall have. For x86 we had and still have -fno-pic, but the
  PPC kernel has -fPIE (position independent executable) now, as we
  need to relocate it.
* The boot loader relocates the kernel now. Mostly copied the relocation
  code from the kernel ELF loader. Almost completely rewrote the PPC
  specific relocation code, though. It's more correct and more complete now
  (some things are still missing though).
* Added boot platform awareness to the kernel. Moved the generic
  Open Firmware code (openfirmware.c/h) from the boot loader to the kernel.
* The kernel PPC serial debug output is sent to the console for the time
  being.
* The PPC boot loader counts the CPUs now and allocates the kernel stacks
  (made OF device iteration a bit more flexible on the way -- the search
  can be restricted to subtree). Furthermore we really enter the kernel...
  (Yay! :-) ... and crash in the first dprintf() (in the atomic_set()
  called by acquire_spinlock()). kprintf() works, though.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15756 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-30 21:20:07 +00:00
Ingo Weinhold
2a1f9fe07a Rewrote KernelAddon. We were using Addon before, with the undesired side
effect that we were linking not only against the complete glue code, but
also against libroot.so. Now we explicitly link against
crtbegin.o/crtend.o only.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15545 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-15 13:01:25 +00:00
Ingo Weinhold
c89fc8752d * More consequent handling of libsupc++. configure looks it up now and
provides it via BuildConfig. We link everything against it.
* Temporarily pass --no-undefined to the linker. Should be in the
  compiler specs, but isn't in the gcc 4 I built.
* Define _BEOS_R5_COMPATIBLE_ macro when building with gcc 2. Can be
  used in headers for instance.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14913 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-14 13:47:52 +00:00
Ingo Weinhold
8b5934c975 * Added support for compiling Haiku with GCC 4. The main difference is that
we use the libstdc++ (including it's headers) that comes with the
  compiler.
* Apparently option "-I-" has been deprecated, which is why we now treat the
  include stuff a bit differently.
* Removed avcodec from the Haiku image, since the library wouldn't build with
  gcc 4, and I'm not in the mood to fix that (declaration of an array of an
  incomplete type).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14876 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-12 22:58:54 +00:00
Ingo Weinhold
338b8dc301 Merged changes from branch build_system_redesign at revision 14573.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14574 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-29 16:27:43 +00:00