# Compilation Options
CFLAGS := -Wall -std=gnu99 -g -Werror
CPPFLAGS := -I include/ -I ../nativelib
+CPPFLAGS += -I../../Usermode/Libraries/ld-acess.so_src/include_exp/ # Syscalls
K_CPPFLAGS := -I $(KERNEL_SRC)include -I $(MODULE_SRC)
LDFLAGS += -Wl,--defsym,__buildnum=$(BUILD_NUM) -g -L ../ -lnativelib
#define STR(x) #x
#define EXPAND_STR(x) STR(x)
-#define ASSERT(x) do{}while(0)
+//#define ASSERT(x) do{}while(0)
extern char __buildnum[];
#define BUILD_NUM ((int)(Uint)&__buildnum)
// TODO: Move out?
extern int DivUp(int value, int divisor);
extern uint64_t DivMod64U(uint64_t Num, uint64_t Den, uint64_t *Rem);
+static inline int MIN(int a, int b) { return a < b ? a : b; }
+static inline int MAX(int a, int b) { return a > b ? a : b; }
static inline void SHORTLOCK(tShortSpinlock *Lock) {
if(*Lock) Log_KernelPanic("---", "Double short lock");
extern void Log_Log(const char *Ident, const char *Message, ...);
extern void Log_Debug(const char *Ident, const char *Message, ...);
+extern void Panic(const char *Msg, ...);
extern void Warning(const char *Message, ...);
extern void Log(const char *Message, ...);
extern void Debug_HexDump(const char *Prefix, const void *Data, size_t Length);
extern void Debug_TraceLog(const char *Function, const char *Format, ...);
extern void Debug_TraceLeave(const char *Function, char Type, ...);
+
+#if !DISABLE_ASSERTS
+# define ASSERTV(expr,msg,args...) do{if(!(expr))Panic("%s:%i - %s: Assertion '"#expr"' failed"msg,__FILE__,__LINE__,(char*)__func__,##args);}while(0)
+# define ASSERTRV(expr,rv,msg,args...) do{if(!(expr)){Warning("%s:%i: Assertion '"#expr"' failed"msg,__FILE__,__LINE__,(char*)__func__ , ##args);return rv;}}while(0)
+#else
+# define ASSERTV(expr)
+# define ASSERTRV(expr)
+#endif
+#define ASSERT(expr) ASSERTV(expr, "")
+#define ASSERTR(expr,rv) ASSERTRV(expr, rv, "")
+#define ASSERTC(l,rel,r) ASSERTV(l rel r, ": %i"#rel"%i", l, r)
+#define ASSERTCR(l,rel,r,rv) ASSERTRV(l rel r, rv, ": %i"#rel"%i", l, r)
+
#endif