#!/usr/bin/env make # # 2018 makefile # # This work by Landon Curt Noll, Simon Cooper, and Leonid A. Broukhis # is licensed under: # # Creative Commons Attribution-ShareAlike 3.0 Unported License. # # See: http://creativecommons.org/licenses/by-sa/3.0/ ################ # tool locations ################ # SHELL= /bin/bash CP= cp CPP= cpp GUNZIP= gunzip BUNZIP2= bunzip2 GZIP_PROG= gzip BZIP2= bzip2 CURL= curl DD= dd LD= ld MAKE= make RM= rm SED= sed TAR= tar TRUE= true MKDIR= mkdir MV= mv TR= tr GREP= grep SORT= sort UNIQ= uniq STRIP= strip # Set X11_LIBDIR to the directory where the X11 library resides # #X11_LIBDIR= /usr/X11R6/lib #X11_LIBDIR= /usr/X11/lib X11_LIBDIR= /opt/X11/lib # Set X11_INCLUDEDIR to the directory where the X11 include files reside # #X11_INCDIR= /usr/X11R6/include #X11_INCDIR= /usr/X11/include X11_INCDIR= /opt/X11/include # Compiler warnings # #CWARN= #CWARN= -Wall #CWARN= -Wall -Wextra CWARN= -Wall -Wextra -pedantic ${CSILENCE} #CWARN= -Wall -Wextra -Weverything #CWARN= -Wall -Wextra -Weverything -pedantic #CWARN= -Wall -Wextra -Weverything -pedantic ${CSILENCE} # Silence warnings that ${CWARN} would normally complain about # CSILENCE= #CSILENCE= -Wno-implicit-int # compiler standard # #CSTD= #CSTD= -ansi #CSTD= -std=c11 CSTD= -std=c99 # compiler bit architecture # # Some entries require 32-bitness: # ARCH= -m32 # # Some entries require 64-bitness: # ARCH= -m64 # # By default we assume nothing: # ARCH= # defines that are needed to compile # CDEFINE= #CDEFINE= -DIOCCC=25 # include files that are needed to compile # CINCLUDE= $(shell sdl2-config --cflags) #CINCLUDE= -include stdlib.h #CINCLUDE= -include stdio.h #CINCLUDE= -include stdlib.h -include stdio.h #CINCLUDE= -I ${X11_INCDIR} # optimization # # Most compiles will safely use -O2. Some can use only -O1 or -O. # A few compilers have broken optimizers or this entry make break # under those buggy optimizers and thus you may not want anything. # Reasonable compilers will allow for -O3. # #OPT= #OPT= -O #OPT= -O1 #OPT= -O2 OPT= -O3 # default flags for ANSI C compilation # CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT} # Libraries needed to build # LIBS= $(shell sdl2-config --libs) #LIBS= -L ${X11_LIBDIR} # ANSI compiler # # Set CC to the name of your ANSI compiler. # # Some entries seem to need gcc. If you have gcc, set # both CC and MAY_NEED_GCC to gcc. # # If you do not have gcc, set CC to the name of your ANSI compiler, and # set MAY_NEED_GCC to either ${CC} (and hope for the best) or to just : # to disable such programs. # CC= cc #CC=clang MAY_NEED_GCC= gcc ############################## # Special flags for this entry ############################## # OBJ= prog.o DATA= TARGET= prog # ALT_OBJ= ALT_TARGET= ################# # build the entry ################# # all: ${TARGET} ${DATA} @${TRUE} prog: prog.c ${CC} ${CFLAGS} $< -o $@ ${LIBS} # alternative executable # alt: ${ALT_TARGET} @${TRUE} # data files # data: ${DATA} @${TRUE} ############### # utility rules ############### # everything: all alt clean: ${RM} -f ${OBJ} ${ALT_OBJ} clobber: clean ${RM} -f ${TARGET} ${ALT_TARGET} @-if [ -e sandwich ]; then \ ${RM} -f sandwich; \ echo 'ate sandwich'; \ fi nuke: clobber @${TRUE} dist_clean: nuke @${TRUE} install: @echo "Surely you are performing, Dr. May!" @${TRUE} # backwards compatibility # build: all @${TRUE} ################## # 133t hacker rulz ################## # love: @echo 'not war?' @${TRUE} haste: $(MAKE) waste @${TRUE} waste: @echo 'haste' @${TRUE} make: @echo 'Attend a maker faire' @${TRUE} easter_egg: @echo you expected to often mis-understand this $${RANDOM} magic @echo chongo '' "/\\oo/\\" @echo Eggy fabricate fashion form frame manufacture produce: make @${TRUE} sandwich: @if [ `id -u` -eq 0 ]; then \ echo 'Okay.'; \ echo $${RANDOM}`date +%s`$${RANDOM} > $@; \ else \ echo 'What? Make it yourself.'; \ exit 1; \ fi # Understand the history of the Homebrew Computer Club # as well as the West Coast Computer Faire and # you might be confused different. :-) # supernova: nuke @-if [ -r .code_anal ]; then \ ${RM} -f .code_anal_v6; \ else \ echo "planet deniers, like some members of the IAU, are so cute when they try to defend their logic"; \ fi @echo A $@ helps ${MAKE} the elements that help form planets @${TRUE} deep_magic: @-if [ -r .code_anal ]; then \ ccode_analysis --deep_magic 3a3fabb90892eeb2f610ae0f74a35a970060665a063ab702bd686c17c4ae07f6 --FNV1a_hash_256_bit "prog"; \ else \ echo "Wrong! Do it again!"; \ sleep 2; \ echo "Wrong! Do it again!"; \ sleep 2; \ echo "Wrong! Do it again!"; \ fi @${TRUE} magic: deep_magic @-if [ -r .code_anal ]; then \ ccode_analysis --mode 216091 --level 216193 --FNV1a_hash_256_bit "prog"; \ else \ echo "If you don't eat yer meat, you can't have any pudding!"; \ echo "How can you have any pudding if you don't eat yer meat?!"; \ fi @${TRUE} # The IOCCC resident astronomer states # charon: supernova @echo $@ is a dwarf planet @echo dwarf is a type of planet @echo $@ is a planet pluto: supernova ${MAKE} charon @echo $@ is a dwarf planet @echo dwarf is a type of planet @echo $@ is a planet @echo get used to having lots of planets because a $< can ${MAKE} a lot of them