Set up a better build system. Started fixing the build.

This commit is contained in:
Pietro Gagliardi 2015-04-22 17:40:58 -04:00
parent 9777f08356
commit f5fa6eb2c7
7 changed files with 122 additions and 71 deletions

51
new/GNUbase.mk Normal file
View File

@ -0,0 +1,51 @@
# 22 april 2015
OUTBASE = new
OUTDIR = out
OBJDIR = .obj
xHFILES = \
ui.h \
$(baseHFILES)
OFILES = \
$(baseCFILES:%.c=$(OBJDIR)/%.o) \
$(baseMFILES:%.m=$(OBJDIR)/%.o)
xCFLAGS = \
-g \
-Wall -Wextra \
-Wno-unused-parameter \
-Wno-switch \
--std=c99 \
-fPIC \
$(CFLAGS) \
$(baseCFLAGS)
xLDFLAGS = \
-g \
-fPIC \
$(LDFLAGS) \
$(baseLDFLAGS)
OUT = $(OUTDIR)/$(OUTBASE)$(baseSUFFIX)
$(OUT): $(OFILES) | $(OUTDIR)/.phony
$(CC) -o $(OUT) $(OFILES) $(xLDFLAGS)
.SECONDEXPANSION:
$(OBJDIR)/%.o: %.c $(xHFILES) | $$(dir $$@).phony
$(CC) -o $@ -c $< $(xCFLAGS)
# see http://www.cmcrossroads.com/article/making-directories-gnu-make
%/.phony:
mkdir -p $(dir $@)
touch $@
.PRECIOUS: %/.phony
ui.h: ui.idl
idl2h -extern _UI_EXTERN < ui.idl > ui.h
clean:
rm -rf $(OUTDIR) $(OBJDIR) ui.h
.PHONY: clean

View File

@ -1,9 +1,5 @@
# 22 april 2015
OUTBASE = new
OUTDIR = out
OBJDIR = .obj
# MAME does this so :/
ifeq ($(OS),Windows_NT)
OS = windows
@ -20,64 +16,24 @@ endif
include $(OS)/GNUmakeinc.mk
HFILES = \
baseHFILES = \
ui.h \
uipriv.h \
ui_$(OS).h
ui_$(OS).h \
$(osHFILES)
OFILES = \
$(CFILES:%.c=$(OBJDIR)/%.o) \
$(osCFILES:%.c=$(OBJDIR)/%.o)
baseCFILES = \
box.c \
$(osCFILES)
xCFLAGS = \
-g \
-Wall -Wextra \
-Wno-unused-parameter \
-Wno-switch \
--std=c99 \
-fPIC \
$(CFLAGS)
baseMFILES = $(osMFILES)
xLDFLAGS = \
-g \
-fPIC \
$(LDFLAGS)
baseCFLAGS = $(osCFLAGS)
baseLDFLAGS = -shared $(osLDFLAGS)
baseSUFFIX = $(osLIBSUFFIX)
OUT = $(OUTDIR)/$(OUTBASE)$(osLIBSUFFIX)
include GNUbase.mk
include test/GNUmakeinc.mk
testOFILES = $(testCFILES:%.c=$(OBJ)/test/%.o)
TEST = $(OUTDIR)/$(OUTBASE)$(osEXESUFFIX)
default: $(OUT)
test: $(TEST)
.PHONY: default test
$(OUT): $(OFILES) dirs
$(CC) -o $(OUT) $(OFILES) -shared $(xLDFLAGS) $(osLDFLAGS)
$(OBJDIR)/%.o: %.c $(HFILES) $(osHFILES) dirs
$(CC) -o $@ -c $< $(xCFLAGS) $(osCFLAGS)
$(TEST): $(OUT) $(testOFILES) dirs $(OBJDIR)/test/.phony
$(CC) -o $(TEST) $(testOFILES) $(OUT) $(xLDFLAGS)
$(OBJDIR)/test/%.o: test/%.c ui.h dirs $(OBJDIR)/test/.phony
$(CC) -o $@ -c $< $(xCFLAGS)
dirs: $(OBJDIR)/.phony $(OBJDIR)/$(OS)/.phony $(OUTDIR)/.phony
.PHONY: dirs
# see http://www.cmcrossroads.com/article/making-directories-gnu-make
%/.phony:
mkdir -p $(dir $@)
touch $@
ui.h: ui.idl
idl2h -extern _UI_EXTERN < ui.idl > ui.h
clean:
rm -rf $(OUTDIR) $(OBJDIR) ui.h
.PHONY: clean
test:
$(MAKE) -f GNUmaketest.mk osLIB=$(OUT) osEXESUFFIX=$(osEXESUFFIX)
.PHONY: test

16
new/GNUmaketest.mk Normal file
View File

@ -0,0 +1,16 @@
# 22 april 2015
# should never be invoked directly, only ever from the main makefile
include test/GNUmakeinc.mk
baseHFILES = \
ui.h \
$(testHFILES)
baseCFILES = $(testCFILES)
baseCFLAGS = $(testCFLAGS)
baseLDFLAGS = $(osLIB) $(testLDFLAGS)
baseSUFFIX = $(osEXESUFFIX)
include GNUbase.mk

View File

@ -1,4 +1,5 @@
// 7 april 2015
#include "ui.h"
#include "uipriv.h"
typedef struct box box;
@ -229,8 +230,8 @@ static void boxShow(uiControl *c)
if (!b->containerHid) {
for (i = 0; i < b->len; i++)
uiControlContainerShow(b->controls[i].c);
if (b->parent != NULL)
uiParentUpdate(b->parent);
if (b->osContainer != NULL)
uiOSContainerUpdate(b->osContainer);
}
}
@ -242,8 +243,8 @@ static void boxHide(uiControl *c)
b->userHid = 1;
for (i = 0; i < b->len; i++)
uiControlContainerHide(b->controls[i].c);
if (b->parent != NULL)
uiParentUpdate(b->parent);
if (b->osContainer != NULL)
uiOSContainerUpdate(b->osContainer);
}
static void boxContainerShow(uiControl *c)
@ -255,8 +256,8 @@ static void boxContainerShow(uiControl *c)
if (!b->userHid) {
for (i = 0; i < b->len; i++)
uiControlContainerShow(b->controls[i].c);
if (b->parent != NULL)
uiParentUpdate(b->parent);
if (b->osContainer != NULL)
uiOSContainerUpdate(b->osContainer);
}
}
@ -268,8 +269,8 @@ static void boxContainerHide(uiControl *c)
b->containerHid = 1;
for (i = 0; i < b->len; i++)
uiControlContainerHide(b->controls[i].c);
if (b->parent != NULL)
uiParentUpdate(b->parent);
if (b->osContainer != NULL)
uiOSContainerUpdate(b->osContainer);
}
static void boxEnable(uiControl *c)
@ -327,10 +328,10 @@ static void boxAppend(uiBox *ss, uiControl *c, int stretchy)
uiControlSethasParent(c, 1);
b->controls[b->len].c = c;
b->controls[b->len].stretchy = stretchy;
b->len++; // must be here for parent updates to work
b->len++; // must be here for OS container updates to work
if (b->osContainer != NULL) {
uiControlSetOSContainer(b->controls[b->len - 1].c, b->osContainer);
uiParentUpdate(b->parent);
uiOSContainerUpdate(b->osContainer);
}
}
@ -349,7 +350,7 @@ static void boxDelete(uiBox *ss, uintmax_t index)
uiControlSetHasParent(removed, 0);
if (b->osContainer != NULL) {
uiControlSetOSContainer(removed, NULL);
uiParentUpdate(b->parent);
uiOSContainerUpdate(b->osContainer);
}
}
@ -365,8 +366,8 @@ static void boxSetPadded(uiBox *ss, int padded)
box *b = (box *) ss;
b->padded = padded;
if (b->parent != NULL)
uiParentUpdate(b->parent);
if (b->osContainer != NULL)
uiOSContainerUpdate(b->osContainer);
}
uiBox *uiNewHorizontalBox(void)

8
new/test/GNUmakeinc.mk Normal file
View File

@ -0,0 +1,8 @@
# 22 april 2015
testCFILES = \
test/main.c \
test/spaced.c
testHFILES = \
test/test.h

8
new/test/main.c Normal file
View File

@ -0,0 +1,8 @@
// 22 april 2015
#include "test.h"
int main(void)
{
printf("hello, world %p\n", uiMain);
return 0;
}

View File

@ -0,0 +1,11 @@
// 6 april 2015
#include <stdlib.h>
extern uiInitOptions options;
extern void *uiAlloc(size_t, const char *);
#define uiNew(T) ((T *) uiAlloc(sizeof (T), #T ))
extern void *uiRealloc(void *, size_t, const char *);
extern void uiFree(void *);
extern void complain(const char *, ...);