summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjaseg <code@jaseg.net>2016-11-18 10:22:53 +0100
committerjaseg <git@jaseg.net>2016-11-18 10:31:10 +0100
commitce0ee8d53807fdf1028812ffef96a8d481d0e078 (patch)
treef879064f2e84495216e52187827304cd9504584e
parentf585abdc4f9f7562422d2b606d4b1b1993b4e5ac (diff)
downloadlolcat-ce0ee8d53807fdf1028812ffef96a8d481d0e078.tar.gz
lolcat-ce0ee8d53807fdf1028812ffef96a8d481d0e078.tar.bz2
lolcat-ce0ee8d53807fdf1028812ffef96a8d481d0e078.zip
Fix musl build on various platforms
-rw-r--r--Makefile32
-rw-r--r--Makefile.musl27
-rw-r--r--README.md14
3 files changed, 55 insertions, 18 deletions
diff --git a/Makefile b/Makefile
index e38c684..cad5c0b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,11 @@
-LOLCAT_SRC := lolcat.c
-CENSOR_SRC := censor.c
-CFLAGS := -std=c11 -Wall -g
+LOLCAT_SRC ?= lolcat.c
+CENSOR_SRC ?= censor.c
+CFLAGS ?= -std=c11 -Wall -g
-DESTDIR := /usr/local/bin
+DESTDIR ?= /usr/local/bin
+
+include Makefile.musl
ifeq ($(shell uname -s),Darwin)
LOLCAT_SRC += memorymapping/src/fmemopen.c
@@ -15,21 +17,15 @@ all: lolcat-static censor-static
.PHONY: install clean musl static
-musl/lib/libc.a musl/lib/crt1.o:
- cd musl; ./configure
- make -C musl
-
-musl: musl/lib/libc.a musl/lib/crt1.o
-
static: lolcat-static censor-static
-lolcat-static: lolcat.c musl
- gcc -c $(CFLAGS) -Imusl/include -o lolcat.o $<
- gcc -s -nostartfiles -nodefaultlibs -nostdinc -static -ffunction-sections -fdata-sections -Wl,--gc-sections -o $@ lolcat.o musl/lib/crt1.o musl/lib/libc.a
+lolcat-static: lolcat.c
+ gcc -c $(CFLAGS) -I$(MUSLDIR)/include -o lolcat.o $<
+ gcc -s -nostartfiles -nodefaultlibs -nostdinc -static -ffunction-sections -fdata-sections -Wl,--gc-sections -o $@ lolcat.o $(MUSLDIR)/lib/crt1.o $(MUSLDIR)/lib/libc.a
-censor-static: censor.c musl
- gcc -c $(CFLAGS) -Imusl/include -o censor.o $<
- gcc -s -nostartfiles -nodefaultlibs -nostdinc -static -ffunction-sections -fdata-sections -Wl,--gc-sections -o $@ censor.o musl/lib/crt1.o musl/lib/libc.a
+censor-static: censor.c
+ gcc -c $(CFLAGS) -I$(MUSLDIR)/include -o censor.o $<
+ gcc -s -nostartfiles -nodefaultlibs -nostdinc -static -ffunction-sections -fdata-sections -Wl,--gc-sections -o $@ censor.o $(MUSLDIR)/lib/crt1.o $(MUSLDIR)/lib/libc.a
lolcat: $(LOLCAT_SRC)
gcc $(CFLAGS) -o $@ $^
@@ -37,11 +33,11 @@ lolcat: $(LOLCAT_SRC)
censor: $(CENSOR_SRC)
gcc $(CFLAGS) -o $@ $^
-install: lolcat censor
+install: lolcat-static censor-static
install lolcat-static $(DESTDIR)/lolcat
install censor-static $(DESTDIR)/censor
clean:
rm -f lolcat lolcat-static.o lolcat-static censor censor-static.o censor-static
- make -C musl clean
+ # make -C musl clean
diff --git a/Makefile.musl b/Makefile.musl
new file mode 100644
index 0000000..1f19ea0
--- /dev/null
+++ b/Makefile.musl
@@ -0,0 +1,27 @@
+
+ifneq (,$(wildcard /usr/local/musl))
+MUSLDIR ?= /usr/local/musl
+else ifneq (,$(wildcard /usr/lib/musl))
+MUSLDIR ?= /usr/lib/musl
+else ifneq (,$(wildcard musl/Makefile))
+MUSLDIR ?= musl
+lolcat-static: musl
+censor-static: musl
+else
+$(info "musl not found. If the build does not go through, consider either installing")
+$(info "musl system-wide using your favorite package manager or fetching and building a")
+$(info "local copy using:")
+$(info "$ git submodule init")
+$(info "$ git submodule update")
+$(info "$ make musl")
+endif
+$(info "Using musl at $(MUSLDIR)")
+
+musl/lib/libc.a musl/lib/crt1.o: musl/config.mak
+ make -C musl
+
+musl/config.mak:
+ cd musl; ./configure
+
+musl: musl/lib/libc.a musl/lib/crt1.o
+
diff --git a/README.md b/README.md
index 0f173b0..f7a6695 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,20 @@ $ yaourt -S c-lolcat
$ make && sudo make install
```
+If this can't find musl and you have it installed somewhere, run
+```bash
+$ make MUSLDIR=/path/to/musl
+```
+
+If you don't have a musl around yet, the easiest way to build is to run
+```bash
+$ git submodule init
+$ git submodule update
+$ make
+```
+
+This will checkout and build musl in this repository's ```musl``` dir.
+
## Why?
This `lolcat` clone is an attempt to reduce the world's carbon dioxide emissions by optimizing inefficient code. It's >10x as fast and <0.1% as large as the original one.