Add further clarity to example package
parent
d2b20422c8
commit
a2c2d14100
3
Makefile
3
Makefile
|
@ -193,7 +193,8 @@ include test/dsp/core/test.mk
|
||||||
include test/dsp/scale/test.mk
|
include test/dsp/scale/test.mk
|
||||||
include test/dsp/tty/test.mk
|
include test/dsp/tty/test.mk
|
||||||
include test/dsp/test.mk
|
include test/dsp/test.mk
|
||||||
include third_party/make/build.mk
|
include examples/package/lib/build.mk
|
||||||
|
include examples/package/build.mk
|
||||||
#-φ-examples/package/new.sh
|
#-φ-examples/package/new.sh
|
||||||
include test/test.mk
|
include test/test.mk
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ by typing `C-c C-h` with the cursor over a symbol. Please install these:
|
||||||
emacs # for power and glory!
|
emacs # for power and glory!
|
||||||
|
|
||||||
See [tool/emacs/cosmo-stuff.el] for further details. Further note that
|
See [tool/emacs/cosmo-stuff.el] for further details. Further note that
|
||||||
this codebase might seem to have an usual number of include statements
|
this codebase might seem to have unusual numbers of include statements
|
||||||
quoted and vendored code, but that's actually why the tools work since
|
quoted and vendored code, but that's actually why the tools work since
|
||||||
it gives them easy perfect knowledge of what exists, thus performance.
|
it gives them easy perfect knowledge of what exists, thus performance.
|
||||||
|
|
||||||
|
|
|
@ -115,4 +115,6 @@ o/$(MODE)/examples/hellojs.com.dbg: \
|
||||||
@$(APELINK)
|
@$(APELINK)
|
||||||
|
|
||||||
.PHONY: o/$(MODE)/examples
|
.PHONY: o/$(MODE)/examples
|
||||||
o/$(MODE)/examples: $(EXAMPLES_BINS)
|
o/$(MODE)/examples: \
|
||||||
|
o/$(MODE)/examples/package \
|
||||||
|
$(EXAMPLES_BINS)
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
# EXAMPLE
|
# EXAMPLE
|
||||||
#
|
#
|
||||||
# make o//examples/package/lib # build library w/ sanity checks
|
# make o//examples/package/lib # build library w/ sanity checks
|
||||||
# at t o//examples/package/lib/lib.a
|
# ar t o//examples/package/lib/lib.a
|
||||||
#
|
#
|
||||||
# AUTHORS
|
# AUTHORS
|
||||||
#
|
#
|
||||||
|
@ -28,19 +28,22 @@
|
||||||
|
|
||||||
PKGS += EXAMPLES_PACKAGE_LIB
|
PKGS += EXAMPLES_PACKAGE_LIB
|
||||||
|
|
||||||
# Declares build package.
|
# Declares package i.e. library w/ transitive dependencies.
|
||||||
# Other packages may list this variable in their deps list.
|
# We define packages as a thing that lumps similar sources.
|
||||||
# Please note package relationships aren't allowed to be cyclic.
|
# It's needed, so linkage can have a higher level overview.
|
||||||
|
# Mostly due to there being over 9,000 objects in the repo.
|
||||||
EXAMPLES_PACKAGE_LIB = \
|
EXAMPLES_PACKAGE_LIB = \
|
||||||
$(EXAMPLES_PACKAGE_LIB_A_DEPS) \
|
$(EXAMPLES_PACKAGE_LIB_A_DEPS) \
|
||||||
$(EXAMPLES_PACKAGE_LIB_A)
|
$(EXAMPLES_PACKAGE_LIB_A)
|
||||||
|
|
||||||
# While build configs might seem somewhat complicated but rest
|
# Declares library w/o transitive dependencies.
|
||||||
# assured they're mostly maintainence free, thanks to wildcard
|
|
||||||
EXAMPLES_PACKAGE_LIB_A_FILES := $(wildcard examples/package/lib/*)
|
|
||||||
EXAMPLES_PACKAGE_LIB_ARTIFACTS += EXAMPLES_PACKAGE_LIB_A
|
|
||||||
EXAMPLES_PACKAGE_LIB_A_HDRS = $(filter %.h,$(EXAMPLES_PACKAGE_LIB_A_FILES))
|
|
||||||
EXAMPLES_PACKAGE_LIB_A = o/$(MODE)/examples/package/lib/lib.a
|
EXAMPLES_PACKAGE_LIB_A = o/$(MODE)/examples/package/lib/lib.a
|
||||||
|
EXAMPLES_PACKAGE_LIB_ARTIFACTS += EXAMPLES_PACKAGE_LIB_A
|
||||||
|
|
||||||
|
# Build configs might seem somewhat complicated. Rest assured they're
|
||||||
|
# mostly maintainence free. That's largely thanks to how we wildcard.
|
||||||
|
EXAMPLES_PACKAGE_LIB_A_FILES := $(wildcard examples/package/lib/*)
|
||||||
|
EXAMPLES_PACKAGE_LIB_A_HDRS = $(filter %.h,$(EXAMPLES_PACKAGE_LIB_A_FILES))
|
||||||
|
|
||||||
# Define sets of source files without needing further iops.
|
# Define sets of source files without needing further iops.
|
||||||
EXAMPLES_PACKAGE_LIB_A_SRCS_S = \
|
EXAMPLES_PACKAGE_LIB_A_SRCS_S = \
|
||||||
|
@ -57,6 +60,7 @@ EXAMPLES_PACKAGE_LIB_A_OBJS = \
|
||||||
$(EXAMPLES_PACKAGE_LIB_A_SRCS_C:%.c=o/$(MODE)/%.o) \
|
$(EXAMPLES_PACKAGE_LIB_A_SRCS_C:%.c=o/$(MODE)/%.o) \
|
||||||
$(EXAMPLES_PACKAGE_LIB_A_SRCS:%=o/$(MODE)/%.zip.o)
|
$(EXAMPLES_PACKAGE_LIB_A_SRCS:%=o/$(MODE)/%.zip.o)
|
||||||
|
|
||||||
|
# Does the two most important things for C/C++ code sustainability.
|
||||||
# 1. Guarantees each header builds, i.e. includes symbols it needs.
|
# 1. Guarantees each header builds, i.e. includes symbols it needs.
|
||||||
# 2. Guarantees transitive closure of packages is directed acyclic.
|
# 2. Guarantees transitive closure of packages is directed acyclic.
|
||||||
EXAMPLES_PACKAGE_LIB_A_CHECKS = \
|
EXAMPLES_PACKAGE_LIB_A_CHECKS = \
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
#include "libc/macros.h"
|
#include "libc/macros.h"
|
||||||
|
|
||||||
MyAsm: .leafprologue
|
/ Example assembly function.
|
||||||
|
/
|
||||||
|
/ @note param agnostic
|
||||||
|
/ @note we love stack frames
|
||||||
|
/ easiest way to do backtraces
|
||||||
|
/ somehow they usually make code faster
|
||||||
|
/ it's convention for keeping stack 16-byte aligned
|
||||||
|
/ cpus still devote much to pushing & popping b/c i386
|
||||||
|
MyAsm: push %rbp
|
||||||
|
mov %rsp,%rbp
|
||||||
call MyPrint2
|
call MyPrint2
|
||||||
.leafepilogue
|
pop %rbp
|
||||||
|
ret
|
||||||
.endfn MyAsm,globl
|
.endfn MyAsm,globl
|
||||||
|
|
|
@ -1,10 +1,19 @@
|
||||||
#include "examples/package/lib/myprint.h"
|
#include "examples/package/lib/myprint.h"
|
||||||
#include "libc/stdio/stdio.h"
|
#include "libc/stdio/stdio.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls MyPrint2() indirected via assembly function.
|
||||||
|
*/
|
||||||
void MyPrint(const char *s) {
|
void MyPrint(const char *s) {
|
||||||
MyAsm(s);
|
MyAsm(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints string to output.
|
||||||
|
*
|
||||||
|
* @param s is null-terminated c string usually having \n
|
||||||
|
* @see printf() which has domain-specific language
|
||||||
|
*/
|
||||||
void MyPrint2(const char *s) {
|
void MyPrint2(const char *s) {
|
||||||
fputs(s, stdout);
|
fputs(s, stdout);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue