summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorruki <[email protected]>2015-04-23 11:34:12 +0800
committerruki <[email protected]>2015-04-23 11:36:43 +0800
commit9a75fb2b8072c9dc5a7f862610e6b19386dcecea (patch)
tree943fc74b2267eeea6dcb653c9337614396afeae9 /core/src
new project
Diffstat (limited to 'core/src')
-rwxr-xr-xcore/src/demo/makefile25
-rwxr-xr-xcore/src/demo/xmake.c30
-rwxr-xr-xcore/src/makefile9
-rw-r--r--core/src/xmake/config.h33
-rwxr-xr-xcore/src/xmake/makefile36
-rwxr-xr-xcore/src/xmake/prefix.h33
-rw-r--r--core/src/xmake/prefix/config.h54
-rw-r--r--core/src/xmake/prefix/prefix.h35
-rwxr-xr-xcore/src/xmake/prefix/version.h58
-rwxr-xr-xcore/src/xmake/xmake.c141
-rwxr-xr-xcore/src/xmake/xmake.h100
11 files changed, 554 insertions, 0 deletions
diff --git a/core/src/demo/makefile b/core/src/demo/makefile
new file mode 100755
index 000000000..b6d8097a3
--- /dev/null
+++ b/core/src/demo/makefile
@@ -0,0 +1,25 @@
+# preifx
+include $(PRO_DIR)/prefix.mak
+
+# module name
+NAMES = demo
+
+# type
+demo_TYPE = BIN
+
+# files
+demo_C_FILES += xmake
+
+# packages
+demo_PKGS-$(TBOX) += tbox
+demo_PKGS-$(BASE) += base
+
+# others
+demo_LIBS += xmake$(DTYPE)
+demo_INC_DIRS += ../
+demo_LIB_DIRS += ../xmake
+demo_CXFLAGS += -D__tb_prefix__=\"demo\"
+
+# suffix
+include $(PRO_DIR)/suffix.mak
+
diff --git a/core/src/demo/xmake.c b/core/src/demo/xmake.c
new file mode 100755
index 000000000..6b62933ef
--- /dev/null
+++ b/core/src/demo/xmake.c
@@ -0,0 +1,30 @@
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * includes
+ */
+#include "xmake/xmake.h"
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * main
+ */
+tb_int_t main(tb_int_t argc, tb_char_t** argv)
+{
+ // init tbox
+#if 0
+ if (!tb_init(tb_null, (tb_byte_t*)malloc(300 * 1024 * 1024), 300 * 1024 * 1024)) return 0;
+#else
+ if (!tb_init(tb_null, tb_null, 0)) return 0;
+#endif
+
+ // init xmake
+ if (!xm_init()) return 0;
+
+
+ // exit xmake
+ xm_exit();
+
+ // exit tbox
+ tb_exit();
+
+ // ok?
+ return 0;
+}
diff --git a/core/src/makefile b/core/src/makefile
new file mode 100755
index 000000000..f712f7abc
--- /dev/null
+++ b/core/src/makefile
@@ -0,0 +1,9 @@
+# prefix
+include $(PRO_DIR)/prefix.mak
+
+# xmake
+SUB_PROS += xmake
+
+# suffix
+include $(PRO_DIR)/suffix.mak
+
diff --git a/core/src/xmake/config.h b/core/src/xmake/config.h
new file mode 100644
index 000000000..10df18701
--- /dev/null
+++ b/core/src/xmake/config.h
@@ -0,0 +1,33 @@
+/*!The Automatic Cross-platform Build Tool
+ *
+ * XMake is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * XMake is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with XMake;
+ * If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
+ *
+ * Copyright (C) 2009 - 2015, ruki All rights reserved.
+ *
+ * @author ruki
+ * @file config.h
+ *
+ */
+#ifndef XM_GBOX_CONFIG_H
+#define XM_GBOX_CONFIG_H
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * includes
+ */
+#include "xmake.config.h"
+
+#endif
+
+
diff --git a/core/src/xmake/makefile b/core/src/xmake/makefile
new file mode 100755
index 000000000..92499372a
--- /dev/null
+++ b/core/src/xmake/makefile
@@ -0,0 +1,36 @@
+# prefix
+include $(PRO_DIR)/prefix.mak
+
+# module name
+NAMES = xmake
+
+# module type
+xmake_TYPE = LIB
+
+# config
+xmake_CONFIG = y
+
+# core files
+xmake_C_FILES += \
+ xmake
+
+
+# flags
+xmake_CXFLAGS += -D__tb_prefix__=\"xmake\"
+
+# header files
+xmake_INC_FILES = \
+ xmake.h \
+ config.h \
+ prefix.h \
+ prefix/prefix.h \
+ prefix/config.h \
+ prefix/version.h
+
+
+# demo
+SUB_PROS-$(DEMO) += ../demo
+
+# suffix
+include $(PRO_DIR)/suffix.mak
+
diff --git a/core/src/xmake/prefix.h b/core/src/xmake/prefix.h
new file mode 100755
index 000000000..c2ec277a6
--- /dev/null
+++ b/core/src/xmake/prefix.h
@@ -0,0 +1,33 @@
+/*!The Automatic Cross-platform Build Tool
+ *
+ * XMake is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * XMake is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with XMake;
+ * If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
+ *
+ * Copyright (C) 2009 - 2015, ruki All rights reserved.
+ *
+ * @author ruki
+ * @file prefix.h
+ *
+ */
+#ifndef XM_PREFIX_H
+#define XM_PREFIX_H
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * includes
+ */
+#include "prefix/prefix.h"
+
+#endif
+
+
diff --git a/core/src/xmake/prefix/config.h b/core/src/xmake/prefix/config.h
new file mode 100644
index 000000000..9bef920ff
--- /dev/null
+++ b/core/src/xmake/prefix/config.h
@@ -0,0 +1,54 @@
+/*!The Automatic Cross-platform Build Tool
+ *
+ * XMake is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * XMake is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with XMake;
+ * If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
+ *
+ * Copyright (C) 2009 - 2015, ruki All rights reserved.
+ *
+ * @author ruki
+ * @file config.h
+ *
+ */
+#ifndef XM_PREFIX_CONFIG_H
+#define XM_PREFIX_CONFIG_H
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * includes
+ */
+#include "../config.h"
+#include "tbox/tbox.h"
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * macros
+ */
+
+/*! @def __xm_small__
+ *
+ * small mode
+ */
+#if XM_CONFIG_SMALL
+# define __xm_small__
+#endif
+
+/*! @def __xm_debug__
+ *
+ * debug mode
+ */
+#ifdef __tb_debug__
+# define __xm_debug__
+#endif
+
+#endif
+
+
diff --git a/core/src/xmake/prefix/prefix.h b/core/src/xmake/prefix/prefix.h
new file mode 100644
index 000000000..c74e19547
--- /dev/null
+++ b/core/src/xmake/prefix/prefix.h
@@ -0,0 +1,35 @@
+/*!The Automatic Cross-platform Build Tool
+ *
+ * XMake is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * XMake is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with XMake;
+ * If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
+ *
+ * Copyright (C) 2009 - 2015, ruki All rights reserved.
+ *
+ * @author ruki
+ * @file prefix.h
+ *
+ */
+#ifndef XM_PREFIX_PREFIX_H
+#define XM_PREFIX_PREFIX_H
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * includes
+ */
+#include "config.h"
+#include "version.h"
+
+
+#endif
+
+
diff --git a/core/src/xmake/prefix/version.h b/core/src/xmake/prefix/version.h
new file mode 100755
index 000000000..8c6419834
--- /dev/null
+++ b/core/src/xmake/prefix/version.h
@@ -0,0 +1,58 @@
+/*!The Automatic Cross-platform Build Tool
+ *
+ * XMake is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * XMake is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with XMake;
+ * If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
+ *
+ * Copyright (C) 2009 - 2015, ruki All rights reserved.
+ *
+ * @author ruki
+ * @file version.h
+ *
+ */
+#ifndef XM_PREFIX_VERSION_H
+#define XM_PREFIX_VERSION_H
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * includes
+ */
+#include "config.h"
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * macros
+ */
+
+/// the major version
+#define XM_VERSION_MAJOR XM_CONFIG_VERSION_MAJOR
+
+/// the minor version
+#define XM_VERSION_MINOR XM_CONFIG_VERSION_MINOR
+
+/// the alter version
+#define XM_VERSION_ALTER XM_CONFIG_VERSION_ALTER
+
+/// the build version
+#define XM_VERSION_BUILD XM_CONFIG_VERSION_BUILD
+
+/// the build version string
+#define XM_VERSION_BUILD_STRING __tb_mstring_ex__(XM_CONFIG_VERSION_BUILD)
+
+/// the version string
+#define XM_VERSION_STRING __tb_mstrcat6__("xmake_", __tb_mstring_ex__(__tb_mconcat8_ex__(v, XM_VERSION_MAJOR, _, XM_VERSION_MINOR, _, XM_VERSION_ALTER, _, XM_CONFIG_VERSION_BUILD)), "_", TB_ARCH_VERSION_STRING, " by ", TB_COMPILER_VERSION_STRING)
+
+/// the short version string
+#define XM_VERSION_SHORT_STRING __tb_mstrcat__("xmake_", __tb_mstring_ex__(__tb_mconcat8_ex__(v, XM_VERSION_MAJOR, _, XM_VERSION_MINOR, _, XM_VERSION_ALTER, _, XM_CONFIG_VERSION_BUILD)))
+
+#endif
+
+
diff --git a/core/src/xmake/xmake.c b/core/src/xmake/xmake.c
new file mode 100755
index 000000000..196d1136b
--- /dev/null
+++ b/core/src/xmake/xmake.c
@@ -0,0 +1,141 @@
+/*!The Automatic Cross-platform Build Tool
+ *
+ * XMake is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * XMake is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with XMake;
+ * If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
+ *
+ * Copyright (C) 2009 - 2015, ruki All rights reserved.
+ *
+ * @author ruki
+ * @file xmake.c
+ *
+ */
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * includes
+ */
+#include "xmake.h"
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * globals
+ */
+
+// the initial count
+static tb_atomic_t g_init = 0;
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * private implementation
+ */
+static __tb_inline__ tb_bool_t xm_check_mode(tb_size_t mode)
+{
+#ifdef __xm_debug__
+ if (!(mode & TB_MODE_DEBUG))
+ {
+ tb_trace_e("libgbox.a has __tb_debug__ but xmake/xmake.h not");
+ return tb_false;
+ }
+#else
+ if (mode & TB_MODE_DEBUG)
+ {
+ tb_trace_e("xmake/xmake.h has __tb_debug__ but libgbox.a not");
+ return tb_false;
+ }
+#endif
+
+#ifdef __xm_small__
+ if (!(mode & TB_MODE_SMALL))
+ {
+ tb_trace_e("libgbox.a has __tb_small__ but xmake/xmake.h not");
+ return tb_false;
+ }
+#else
+ if (mode & TB_MODE_SMALL)
+ {
+ tb_trace_e("xmake/xmake.h has __tb_small__ but libgbox.a not");
+ return tb_false;
+ }
+#endif
+
+ // ok
+ return tb_true;
+}
+static __tb_inline__ tb_bool_t xm_version_check(tb_hize_t build)
+{
+ // the version oly for link the static vtag string
+ tb_version_t const* version = tb_version(); tb_used(version);
+
+ // ok
+ if ((build / 100) == (XM_VERSION_BUILD / 100))
+ {
+ tb_trace_d("version: %s", XM_VERSION_STRING);
+ return tb_true;
+ }
+ else
+ {
+ tb_trace_w("version: %s != %llu", XM_VERSION_STRING, build);
+ }
+
+ // no
+ return tb_false;
+}
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * implementation
+ */
+tb_bool_t xm_init_(tb_size_t mode, tb_hize_t build)
+{
+ // is inited?
+ if (tb_atomic_fetch_and_inc(&g_init)) return tb_true;
+
+ // trace
+ tb_trace_d("init: ..");
+
+ // check mode
+ if (!xm_check_mode(mode)) return tb_false;
+
+ // check version
+ xm_version_check(build);
+
+ // trace
+ tb_trace_d("init: ok");
+
+ // ok
+ return tb_true;
+}
+tb_void_t xm_exit()
+{
+ // need exit?
+ tb_long_t init = 0;
+ if ((init = tb_atomic_dec_and_fetch(&g_init)) > 0) return ;
+
+ // check
+ tb_assert_and_check_return(!init);
+}
+tb_version_t const* xm_version()
+{
+ // init version tag for binary search
+ static __tb_volatile__ tb_char_t const* s_vtag = "[xmake]: [vtag]: " XM_VERSION_STRING; tb_used(s_vtag);
+
+ // init version
+ static tb_version_t s_version = {0};
+ if (!s_version.major)
+ {
+ s_version.major = XM_VERSION_MAJOR;
+ s_version.minor = XM_VERSION_MINOR;
+ s_version.alter = XM_VERSION_ALTER;
+ s_version.build = (tb_hize_t)tb_atoll(XM_VERSION_BUILD_STRING);
+ }
+
+ return &s_version;
+}
+
diff --git a/core/src/xmake/xmake.h b/core/src/xmake/xmake.h
new file mode 100755
index 000000000..a6253330b
--- /dev/null
+++ b/core/src/xmake/xmake.h
@@ -0,0 +1,100 @@
+/*!The Automatic Cross-platform Build Tool
+ *
+ * XMake is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * XMake is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with XMake;
+ * If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
+ *
+ * Copyright (C) 2009 - 2015, ruki All rights reserved.
+ *
+ * @author ruki
+ * @file xmake.h
+ *
+ */
+#ifndef XM_GBOX_H
+#define XM_GBOX_H
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * includes
+ */
+#include "prefix.h"
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * extern
+ */
+__tb_extern_c_enter__
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * macros
+ */
+
+#ifdef __xm_debug__
+# define __xm_mode_debug__ TB_MODE_DEBUG
+#else
+# define __xm_mode_debug__ (0)
+#endif
+
+#ifdef __xm_small__
+# define __xm_mode_small__ TB_MODE_SMALL
+#else
+# define __xm_mode_small__ (0)
+#endif
+
+/*! init xmake
+ *
+ * @return tb_true or tb_false
+ *
+ * @code
+ #include "xmake/xmake.h"
+
+ int main(int argc, char** argv)
+ {
+ // init xmake
+ if (!xm_init()) return 0;
+
+
+ // exit xmake
+ xm_exit();
+ return 0;
+ }
+ * @endcode
+ */
+#define xm_init() xm_init_((tb_size_t)(__xm_mode_debug__ | __xm_mode_small__), XM_VERSION_BUILD)
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * interfaces
+ */
+
+/*! init the xmake library
+ *
+ * @param mode the compile mode for check __tb_small__ and __tb_debug__
+ * @param build the build version
+ *
+ * @return tb_true or tb_false
+ */
+tb_bool_t xm_init_(tb_size_t mode, tb_hize_t build);
+
+/// exit the xmake library
+tb_void_t xm_exit(tb_noarg_t);
+
+/*! the xmake version
+ *
+ * @return the xmake version
+ */
+tb_version_t const* xm_version(tb_noarg_t);
+
+/* //////////////////////////////////////////////////////////////////////////////////////
+ * extern
+ */
+__tb_extern_c_leave__
+
+#endif