diff options
| author | ruki <[email protected]> | 2015-04-23 11:34:12 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2015-04-23 11:36:43 +0800 |
| commit | 9a75fb2b8072c9dc5a7f862610e6b19386dcecea (patch) | |
| tree | 943fc74b2267eeea6dcb653c9337614396afeae9 /core/src | |
new project
Diffstat (limited to 'core/src')
| -rwxr-xr-x | core/src/demo/makefile | 25 | ||||
| -rwxr-xr-x | core/src/demo/xmake.c | 30 | ||||
| -rwxr-xr-x | core/src/makefile | 9 | ||||
| -rw-r--r-- | core/src/xmake/config.h | 33 | ||||
| -rwxr-xr-x | core/src/xmake/makefile | 36 | ||||
| -rwxr-xr-x | core/src/xmake/prefix.h | 33 | ||||
| -rw-r--r-- | core/src/xmake/prefix/config.h | 54 | ||||
| -rw-r--r-- | core/src/xmake/prefix/prefix.h | 35 | ||||
| -rwxr-xr-x | core/src/xmake/prefix/version.h | 58 | ||||
| -rwxr-xr-x | core/src/xmake/xmake.c | 141 | ||||
| -rwxr-xr-x | core/src/xmake/xmake.h | 100 |
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 |
