diff --git a/Makefile.in b/Makefile.in index 4a91760..9f87f7f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,5 +1,9 @@ PACKAGE = @package@ +NICKNAME = @nickname@ PROJECT_DIR = @project_dir@ +GIT_REFERENCE_DIR = @git_reference_dir@ +CUSTOM_INSTALL_HEADERS = @custom_install_headers@ +AVOID_VERSION = @avoid_version@ BUILD = @build@ HOST = @host@ @@ -11,19 +15,25 @@ SYSROOT = @sysroot@ CROSS_COMPILE = @cross_compile@ SHELL = @shell@ -CFLAGS_DEBUG = @cflags_debug@ CFLAGS_COMMON = @cflags_common@ +CFLAGS_DEBUG = @cflags_debug@ CFLAGS_CMDLINE = @cflags_cmdline@ CFLAGS_CONFIG = @cflags_config@ CFLAGS_SYSROOT = @cflags_sysroot@ +CFLAGS_OS = @cflags_os@ +CFLAGS_SITE = @cflags_site@ CFLAGS_PATH = @cflags_path@ +CFLAGS_STRICT = @cflags_strict@ +CFLAGS_UTIL = @cflags_util@ -LDFLAGS_DEBUG = @ldflags_debug@ LDFLAGS_COMMON = @ldflags_common@ +LDFLAGS_DEBUG = @ldflags_debug@ LDFLAGS_CMDLINE = @ldflags_cmdline@ LDFLAGS_CONFIG = @ldflags_config@ LDFLAGS_SYSROOT = @ldflags_sysroot@ LDFLAGS_PATH = @ldflags_path@ +LDFLAGS_STRICT = @ldflags_strict@ +LDFLAGS_UTIL = @ldflags_util@ PE_SUBSYSTEM = @pe_subsystem@ PE_IMAGE_BASE = @pe_image_base@ @@ -51,19 +61,28 @@ USER_CC = @user_cc@ USER_CPP = @user_cpp@ USER_CXX = @user_cxx@ +ALL_SHARED = @all_shared@ +ALL_STATIC = @all_static@ +DISABLE_FRONTEND = @disable_frontend@ +DISABLE_SHARED = @disable_shared@ +DISABLE_STATIC = @disable_static@ all: install: shared: static: - +install-extras: +install-app-extras: include $(PROJECT_DIR)/sysinfo/host/$(HOST).mk include $(PROJECT_DIR)/sysinfo/compiler/$(COMPILER).mk include $(PROJECT_DIR)/sysinfo/toolchain/$(TOOLCHAIN).mk -include $(PROJECT_DIR)/project/defs.mk +include $(PROJECT_DIR)/sofort/defs.mk +include $(PROJECT_DIR)/sofort/version.mk +include $(PROJECT_DIR)/sofort/custom.mk + include $(PROJECT_DIR)/project/tree.mk include $(PROJECT_DIR)/project/depends.mk include $(PROJECT_DIR)/project/headers.mk @@ -74,14 +93,16 @@ include $(PROJECT_DIR)/project/overrides.mk -src/%.lo: $(PROJECT_DIR)/src/%.c $(ALL_HEADERS) host.tag dirs.tag +$(APP_SRCS:%.c=%.o): CFLAGS_STATIC = $(CFLAGS_APP) + +src/%.lo: $(PROJECT_DIR)/src/%.c $(ALL_HEADERS) host.tag tree.tag version.tag $(CC) -c -o $@ $< $(CFLAGS_SHARED) -src/%.o: $(PROJECT_DIR)/src/%.c $(ALL_HEADERS) host.tag dirs.tag +src/%.o: $(PROJECT_DIR)/src/%.c $(ALL_HEADERS) host.tag tree.tag version.tag $(CC) -c -o $@ $< $(CFLAGS_STATIC) -lib/%$(OS_LIB_SUFFIX): - $(LD) -shared -o $@ $^ $(LDFLAGS_SHARED) +lib/%$(OS_LIB_SUFFIX)$(VER_XYZ): + $(CC) -shared -o $@ $^ $(LDFLAGS_SHARED) lib/%$(OS_ARCHIVE_EXT): rm -f $@ @@ -89,42 +110,67 @@ lib/%$(OS_ARCHIVE_EXT): -all: shared static +all: package-shared package-static app + +install: package-install-app +install: package-install-extras +install: install-libs -install: install-libs install-headers +app: app-tag +app.tag: + cp $(PACKAGE_APP) $(APP) + touch app.tag -install-libs: install-shared install-static install-implib +install-libs: package-install-shared +install-libs: package-install-static -install-headers:shared static +install-headers-default: mkdir -p $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE) - mkdir -p $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits - mkdir -p $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits/i386 - mkdir -p $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits/x86_64 cp $(API_HEADERS) $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE) - cp $(API_HEADERS_BITS) $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits - cp $(API_HEADERS_I386) $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits/i386 - cp $(API_HEADERS_X86_64) $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits/x86_64 -install-shared: shared install-implib +install-shared: shared install-lib install-implib +install-shared: package-install-soname package-install-solink +install-shared: install-headers + +install-lib: shared mkdir -p $(DESTDIR)$(LIBDIR) cp $(SHARED_LIB) $(DESTDIR)$(LIBDIR) -install-static: static +install-static: static install-headers mkdir -p $(DESTDIR)$(LIBDIR) cp $(STATIC_LIB) $(DESTDIR)$(LIBDIR) +install-app: app install-app-extras + mkdir -p $(DESTDIR)$(BINDIR) + cp $(APP) $(DESTDIR)$(BINDIR) + +install-static-app: static-app install-app-extras + mkdir -p $(DESTDIR)$(BINDIR) + cp $(STATIC_APP) $(DESTDIR)$(BINDIR)/$(NICKNAME)$(OS_APP_SUFFIX) -shared: shared-lib shared-implib + +shared: shared-lib implib +shared: package-shared-soname package-shared-solink static: static-lib shared-lib: shared-objs $(SHARED_LIB) +shared-soname: shared-lib $(SHARED_SONAME) + +shared-solink: shared-lib $(SHARED_SOLINK) + static-lib: static-objs $(STATIC_LIB) -shared-implib: shared-lib + + +default-app: version.tag static-objs $(DEFAULT_APP) + +shared-app: version.tag shared $(SHARED_APP) + +static-app: version.tag static-objs $(STATIC_APP) @@ -132,16 +178,33 @@ shared-objs: dirs $(SHARED_OBJS) static-objs: dirs $(STATIC_OBJS) +app-objs: dirs $(APP_OBJS) + $(SHARED_LIB): $(SHARED_OBJS) $(STATIC_LIB): $(STATIC_OBJS) +$(APP): $(PACKAGE_APP) + +$(DEFAULT_APP): $(STATIC_OBJS) $(APP_OBJS) + rm -f app.tag + $(CC) -o $@ $^ $(LDFLAGS_APP) -dirs: dirs.tag tree.tag +$(SHARED_APP): $(SHARED_LIB) $(APP_OBJS) + rm -f app.tag + $(CC) -o $@ $(APP_OBJS) -l$(PACKAGE) $(LDFLAGS_SHARED) + +$(STATIC_APP): $(STATIC_OBJS) $(APP_OBJS) + rm -f app.tag + $(CC) -static -o $@ $^ $(LDFLAGS_STATIC) + + +dirs: dirs.tag dirs.tag: + mkdir -p bin mkdir -p lib touch dirs.tag @@ -149,24 +212,46 @@ host.tag: Makefile $(PROJECT_DIR)/sysinfo/host/host.sh --compiler="$(CC)" --cflags="$(CFLAGS)" touch host.tag +version.tag: $(GIT_REFERENCE_DIR) + $(PROJECT_DIR)/sysinfo/version.sh \ + -s $(PROJECT_DIR) \ + -o build/$(PACKAGE)_version.h \ + -p $(PACKAGE) + touch version.tag + distclean: clean rm -f Makefile -clean: +clean: clean-implib rm -f tree.tag rm -f dirs.tag rm -f host.tag + rm -f version.tag + rm -f app.tag rm -f $(SHARED_OBJS) rm -f $(STATIC_OBJS) + rm -f $(APP_OBJS) rm -f $(SHARED_LIB) + rm -f $(SHARED_SONAME) + rm -f $(SHARED_SOLINK) rm -f $(STATIC_LIB) - rm -f $(SHARED_IMPLIB) + rm -f $(APP) + rm -f $(DEFAULT_APP) + rm -f $(SHARED_APP) + rm -f $(STATIC_APP) .display: .display-project .display-env .display-tools .display-flags \ - .display-pe .display-elf .display-dirs .display-build + .display-pe .display-elf .display-dirs .display-build \ + .display-config + +.conf: PAGER ?= less +.conf: + $(MAKE) .display | $(PAGER) .display-project: + @echo PACKAGE:' '$(PACKAGE) + @echo NICKNAME:' '$(NICKNAME) @echo PROJECT_DIR:' '$(PROJECT_DIR) @echo BUILD_DIR:' '$(CURDIR) @echo @@ -207,19 +292,26 @@ clean: @echo .display-flags: - @echo CFLAGS_DEBUG:' '$(CFLAGS_DEBUG) @echo CFLAGS_COMMON:' '$(CFLAGS_COMMON) + @echo CFLAGS_DEBUG:' '$(CFLAGS_DEBUG) + @echo CFLAGS_VERSION:' '$(CFLAGS_VERSION) @echo CFLAGS_CMDLINE:' '$(CFLAGS_CMDLINE) @echo CFLAGS_CONFIG:' '$(CFLAGS_CONFIG) @echo CFLAGS_SYSROOT:' '$(CFLAGS_SYSROOT) + @echo CFLAGS_OS:' '$(CFLAGS_OS) + @echo CFLAGS_SITE:' '$(CFLAGS_SITE) @echo CFLAGS_PATH:' '$(CFLAGS_PATH) + @echo CFLAGS_STRICT:' '$(CFLAGS_STRICT) + @echo CFLAGS_UTIL:' '$(CFLAGS_UTIL) @echo - @echo LDFLAGS_DEBUG:' '$(LDFLAGS_DEBUG) - @echo LDFLAGS_COMMON:' '$(LDFLAGS_COMMON) - @echo LDFLAGS_CMDLINE:' '$(LDFLAGS_CMDLINE) - @echo LDFLAGS_CONFIG:' '$(LDFLAGS_CONFIG) - @echo LDFLAGS_SYSROOT:' '$(LDFLAGS_SYSROOT) - @echo LDFLAGS_PATH:' '$(LDFLAGS_PATH) + @echo LDFLAGS_COMMON:' '$(LDFLAGS_COMMON) + @echo LDFLAGS_DEBUG:' '$(LDFLAGS_DEBUG) + @echo LDFLAGS_CMDLINE:' '$(LDFLAGS_CMDLINE) + @echo LDFLAGS_CONFIG:' '$(LDFLAGS_CONFIG) + @echo LDFLAGS_SYSROOT:' '$(LDFLAGS_SYSROOT) + @echo LDFLAGS_PATH:' '$(LDFLAGS_PATH) + @echo LDFLAGS_STRICT:' '$(LDFLAGS_STRICT) + @echo LDFLAGS_UTIL:' '$(LDFLAGS_UTIL) @echo .display-pe: @@ -256,12 +348,39 @@ clean: @echo USER_CXX:' '$(USER_CXX) @echo +.display-config: + @echo ALL_SHARED:' '$(ALL_SHARED) + @echo ALL_STATIC:' '$(ALL_STATIC) + @echo DISABLE_FRONTEND:' '$(DISABLE_FRONTEND) + @echo DISABLE_SHARED:' '$(DISABLE_SHARED) + @echo DISABLE_STATIC:' '$(DISABLE_STATIC) + +.display-host: + @$(CC) $(CFLAGS) -dumpmachine + +.display-cc: + @echo $(CC) + +.display-cflags: + @echo $(CFLAGS) + -.PHONY: all install shared static .display \ - shared-objs shared-lib shared-implib \ +.PHONY: all install shared static app \ + package-app \ + shared-objs shared-lib \ + shared-soname shared-solink \ + package-shared-soname package-shared-solink \ static-objs static-lib \ - install-shared install-static install-implib \ - install-headers \ - clean distclean \ + default-app shared-app static-app \ + install-shared install-static \ + install-soname install-solink \ + package-install-soname package-install-solink \ + install-headers install-app \ + install-headers-default install-headers-custom \ + clean distclean clean-implib version \ + .display .conf \ .display-project .display-env .display-tools .display-flags \ - .display-pe .display-elf .display-dirs .display-build + .display-pe .display-elf .display-dirs .display-build \ + implib implib-ver implib-soname implib-solink \ + install-implib install-implib-ver \ + install-implib-soname install-implib-solink diff --git a/config.project b/config.project index 818eca7..a96084b 100644 --- a/config.project +++ b/config.project @@ -1,6 +1,8 @@ # project mb_package=ntapi mb_require_out_of_tree=no +mb_custom_install_headers=yes +mb_avoid_version=yes # build @@ -16,19 +18,27 @@ mb_default_shell=sh # switches +mb_default_cflags_common="-std=c99 -ffreestanding" +mb_default_cflags_common="$mb_default_cflags_common -I\$(PROJECT_DIR)/src/internal" +mb_default_cflags_common="$mb_default_cflags_common -I\$(PROJECT_DIR)/include" +mb_default_cflags_common="$mb_default_cflags_common -Ibuild" + mb_default_cflags_debug= -mb_default_cflags_common="-I\$(PROJECT_DIR)/src/internal -I\$(PROJECT_DIR)/include -Ibuild" mb_default_cflags_cmdline= mb_default_cflags_config= mb_default_cflags_sysroot= mb_default_cflags_path= +mb_default_cflags_strict= +mb_default_cflags_util= -mb_default_ldflags_debug= mb_default_ldflags_common="-Llib" +mb_default_ldflags_debug= mb_default_ldflags_cmdline= mb_default_ldflags_config= mb_default_ldflags_sysroot= mb_default_ldflags_path= +mb_default_ldflags_strict= +mb_default_ldflags_util= mb_default_pe_subsystem=windows mb_default_pe_image_base= @@ -37,3 +47,11 @@ mb_default_pe_config_defs= mb_default_elf_eh_frame= mb_default_elf_hash_style= mb_default_elf_config_defs= + + +# config +mb_all_static= +mb_all_shared= +mb_disable_frontend=yes +mb_disable_static= +mb_disable_shared= diff --git a/config.usage b/config.usage index 8544fbe..3d334a8 100644 --- a/config.usage +++ b/config.usage @@ -4,6 +4,9 @@ supported switches: ------------------- --help + --nickname + --avoid-version + --prefix --exec-prefix --bindir @@ -24,9 +27,27 @@ supported switches: --shell --debug + --strict + --ccstrict + --ldstrict + + --all-static + --all-shared + --enable-static + --enable-shared + --disable-static + --disable-shared + + --enable-app + --enable-frontend + --disable-app + --disable-frontend + supported variables: -------------------- + NICKNAME + PREFIX EXEC_PREFIX BINDIR @@ -57,6 +78,8 @@ supported variables: CFLAGS_CONFIG CFLAGS_SYSROOT CFLAGS_PATH + CFLAGS_STRICT + CFLAGS_UTIL LDFLAGS LDFLAGS_DEBUG @@ -65,6 +88,8 @@ supported variables: LDFLAGS_CONFIG LDFLAGS_SYSROOT LDFLAGS_PATH + LDFLAGS_STRICT + LDFLAGS_UTIL PE_SUBSYSTEM PE_IMAGE_BASE diff --git a/configure b/configure index 504bfcb..4dacc2a 100755 --- a/configure +++ b/configure @@ -13,7 +13,7 @@ usage() error_msg() { - echo $@ >&2 + echo "$@" >&2 } @@ -28,6 +28,14 @@ init_vars() . "$mb_config" || exit 2 fi + # git + if [ -d "$mb_project_dir/.git" ]; then + mb_git_reference_dir="\$(PROJECT_DIR)/.git" + fi + + # project + mb_nickname=$NICKNAME + # dirs mb_prefix=$PREFIX mb_exec_prefix=$EXEC_PREFIX @@ -57,7 +65,11 @@ init_vars() mb_cflags_cmdline=$CFLAGS_CMDLINE mb_cflags_config=$CFLAGS_CONFIG mb_cflags_sysroot=$CFLAGS_SYSROOT + mb_cflags_os=$CFLAGS_OS + mb_cflags_site=$CFLAGS_SITE mb_cflags_path=$CFLAGS_PATH + mb_cflags_strict=$CFLAGS_STRICT + mb_cflags_util=$CFLAGS_UTIL mb_ldflags=$LDFLAGS mb_ldflags_debug=$LDFLAGS_DEBUG @@ -66,6 +78,8 @@ init_vars() mb_ldflags_config=$LDFLAGS_CONFIG mb_ldflags_sysroot=$LDFLAGS_SYSROOT mb_ldflags_path=$LDFLAGS_PATH + mb_ldflags_strict=$LDFLAGS_STRICT + mb_ldflags_util=$LDFLAGS_UTIL mb_pe_subsystem=$PE_SUBSYSTEM mb_pe_image_base=$PE_IMAGE_BASE @@ -103,6 +117,10 @@ verify_build_directory() common_defaults() { + # project + [ -z "$mb_nickname" ] && mb_nickname=$mb_package + [ -z "$mb_avoid_version" ] && mb_avoid_version='no' + # dirs [ -z "$mb_prefix" ] && [ -z "$mb_prefix_set" ] \ && mb_prefix='/usr/local' @@ -135,7 +153,11 @@ common_defaults() [ -z "$mb_cflags_cmdline" ] && mb_cflags_cmdline=$mb_default_cflags_cmdline [ -z "$mb_cflags_config" ] && mb_cflags_config=$mb_default_cflags_config [ -z "$mb_cflags_sysroot" ] && mb_cflags_sysroot=$mb_default_cflags_sysroot + [ -z "$mb_cflags_os" ] && mb_cflags_os=$mb_default_cflags_os + [ -z "$mb_cflags_site" ] && mb_cflags_site=$mb_default_cflags_site [ -z "$mb_cflags_path" ] && mb_cflags_path=$mb_default_cflags_path + [ -z "$mb_cflags_strict" ] && mb_cflags_strict=$mb_default_cflags_strict + [ -z "$mb_cflags_util" ] && mb_cflags_util=$mb_default_cflags_util [ -z "$mb_ldflags_debug" ] && mb_ldflags_debug=$mb_default_ldflags_debug [ -z "$mb_ldflags_common" ] && mb_ldflags_common=$mb_default_ldflags_common @@ -143,6 +165,8 @@ common_defaults() [ -z "$mb_ldflags_config" ] && mb_ldflags_config=$mb_default_ldflags_config [ -z "$mb_ldflags_sysroot" ] && mb_ldflags_sysroot=$mb_default_ldflags_sysroot [ -z "$mb_ldflags_path" ] && mb_ldflags_path=$mb_default_ldflags_path + [ -z "$mb_ldflags_strict" ] && mb_ldflags_strict=$mb_default_ldflags_strict + [ -z "$mb_ldflags_util" ] && mb_ldflags_util=$mb_default_ldflags_util [ -z "$mb_pe_subsystem" ] && mb_pe_subsystem=$mb_default_pe_subsystem [ -z "$mb_pe_image_base" ] && mb_pe_image_base=$mb_default_pe_image_base @@ -152,6 +176,13 @@ common_defaults() [ -z "$mb_elf_hash_style" ] && mb_elf_hash_style=$mb_default_elf_hash_style [ -z "$mb_elf_config_defs" ] && mb_elf_config_defs=$mb_default_elf_config_defs + # config + [ -z "$mb_all_static" ] && mb_all_static='no' + [ -z "$mb_all_shared" ] && mb_all_shared='no' + [ -z "$mb_disable_frontend" ] && mb_disable_frontend='no' + [ -z "$mb_disable_static" ] && mb_disable_static='no' + [ -z "$mb_disable_shared" ] && mb_disable_shared='no' + # host/target [ -z "$mb_host" ] && mb_host=$mb_target [ -z "$mb_target" ] && mb_target=$mb_host @@ -282,9 +313,10 @@ native_defaults() exit 2 fi - [ -z "$mb_native_os" ] && mb_native_os=$mb_native_os - [ -z "$mb_native_os_bits" ] && mb_native_os_bits=$mb_native_os_bits - [ -z "$mb_native_os_underscore" ] && mb_native_os_underscore=$mb_native_os_underscore + # fallback os recipe + if ! [ -f $mb_project_dir/sysinfo/os/$mb_native_os.mk ]; then + mb_native_os='any-os'; + fi } @@ -296,10 +328,36 @@ cross_defaults() } +config_flags() +{ + mb_ldflags_tmp=" $mb_ldflags " + mb_ldflags_libs=`echo "$mb_ldflags_tmp" | sed 's/ -static / /g'` + + if [ "$mb_ldflags_tmp" != "$mb_ldflags_libs" ]; then + mb_ldflags="$mb_ldflags_libs" + mb_ldflags_util="$mb_ldflags_util -static" + fi + + # ccstrict + if [ "$mb_ccstrict" = 'yes' ]; then + mb_cflags_strict='-Wall -Werror -Wextra -Wundef' + fi + + # ldstrict + if [ "$mb_ldstrict" = 'yes' ]; then + mb_ldflags_strict='-Wl,--no-undefined' + fi +} + + config_copy() { sed -e 's^@package@^'"$mb_package"'^g' \ + -e 's^@nickname@^'"$mb_nickname"'^g' \ -e 's^@project_dir@^'"$mb_project_dir"'^g' \ + -e 's^@git_reference_dir@^'"$mb_git_reference_dir"'^g' \ + -e 's^@custom_install_headers@^'"$mb_custom_install_headers"'^g' \ + -e 's^@avoid_version@^'"$mb_avoid_version"'^g' \ \ -e 's^@build@^'"$mb_build"'^g' \ -e 's^@host@^'"$mb_host"'^g' \ @@ -317,7 +375,11 @@ config_copy() -e 's^@cflags_cmdline@^'"$mb_cflags $mb_cflags_cmdline"'^g' \ -e 's^@cflags_config@^'"$mb_cflags_config"'^g' \ -e 's^@cflags_sysroot@^'"$mb_cflags_sysroot"'^g' \ + -e 's^@cflags_os@^'"$mb_cflags_os"'^g' \ + -e 's^@cflags_site@^'"$mb_cflags_site"'^g' \ -e 's^@cflags_path@^'"$mb_cflags_path"'^g' \ + -e 's^@cflags_strict@^'"$mb_cflags_strict"'^g' \ + -e 's^@cflags_util@^'"$mb_cflags_util"'^g' \ \ -e 's^@ldflags@^'"$mb_ldflags"'^g' \ -e 's^@ldflags_debug@^'"$mb_ldflags_debug"'^g' \ @@ -326,6 +388,8 @@ config_copy() -e 's^@ldflags_config@^'"$mb_ldflags_config"'^g' \ -e 's^@ldflags_sysroot@^'"$mb_ldflags_sysroot"'^g' \ -e 's^@ldflags_path@^'"$mb_ldflags_path"'^g' \ + -e 's^@ldflags_strict@^'"$mb_ldflags_strict"'^g' \ + -e 's^@ldflags_util@^'"$mb_ldflags_util"'^g' \ \ -e 's^@pe_subsystem@^'"$mb_pe_subsystem"'^g' \ -e 's^@pe_image\_base@^'"$mb_pe_image_base"'^g' \ @@ -346,16 +410,43 @@ config_copy() \ -e 's^@native_cc@^'"$mb_native_cc"'^g' \ -e 's^@native_os@^'"$mb_native_os"'^g' \ - -e 's^@native_os_bits@^'"$mb_native_os_bits"'^g' \ + -e 's^@native_os_bits@^'"$mb_native_os_bits"'^g' \ -e 's^@native_os_underscore@^'"$mb_native_os_underscore"'^g' \ \ -e 's^@user_cc@^'"$mb_user_cc"'^g' \ -e 's^@user_cpp@^'"$mb_user_cpp"'^g' \ -e 's^@user_cxx@^'"$mb_user_cxx"'^g' \ + \ + -e 's^@all_static@^'"$mb_all_static"'^g' \ + -e 's^@all_shared@^'"$mb_all_shared"'^g' \ + -e 's^@disable_frontend@^'"$mb_disable_frontend"'^g' \ + -e 's^@disable_static@^'"$mb_disable_static"'^g' \ + -e 's^@disable_shared@^'"$mb_disable_shared"'^g' \ $mb_project_dir/Makefile.in > $mb_pwd/Makefile } +config_support() +{ + [ "$mb_disable_shared" = 'yes' ] && return 0 + + mbt_cc=`make .display-cc` + mbt_cflags=`make .display-cflags` + mbt_source='int foo(int x){return ++x;}' + mbt_result='no' + + rm -f a.out + echo "$mbt_source" | "$mbt_cc" -shared -o a.out -xc - + stat a.out >/dev/null 2>&1 && mbt_result='yes' + rm -f a.out + + if [ "$mbt_result" = 'no' ]; then + mb_disable_shared='yes' + config_copy + fi +} + + config_host() { make -s host.tag && return 0 @@ -442,6 +533,59 @@ for arg ; do --debug) mb_debug='yes' ;; + + # config + --all-static) + mb_all_static='yes' + ;; + --all-shared) + mb_all_shared='yes' + ;; + --disable-frontend) + mb_disable_frontend='yes' + ;; + --disable-app) + mb_disable_frontend='yes' + ;; + --enable-frontend) + mb_disable_frontend='no' + ;; + --enable-app) + mb_disable_frontend='no' + ;; + --disable-static) + mb_disable_static='yes' + ;; + --disable-shared) + mb_disable_shared='yes' + ;; + --enable-static) + mb_disable_static='no' + ;; + --enable-shared) + mb_disable_shared='no' + ;; + + # convenience + --strict) + mb_ccstrict='yes' + mb_ldstrict='yes' + ;; + --ccstrict) + mb_ccstrict='yes' + ;; + --ldstrict) + mb_ldstrict='yes' + ;; + + # project + --nickname=*) + mb_nickname=${arg#*=} + ;; + --avoid-version) + mb_avoid_version='yes' + ;; + *) error_msg ${arg#}: "unsupported config argument." exit 2 @@ -459,7 +603,9 @@ cross_defaults # four: config +config_flags config_copy +config_support config_host config_status diff --git a/project/defs.mk b/project/defs.mk deleted file mode 100644 index b91ed07..0000000 --- a/project/defs.mk +++ /dev/null @@ -1,31 +0,0 @@ -SHARED_LIB_DEPS = -SHARED_APP_DEPS = -STATIC_APP_DEPS = - -COMMON_LOBJS = $(COMMON_SRCS:.c=.lo) -COMMON_OBJS = $(COMMON_SRCS:.c=.o) - -ARCH_LOBJS = $(ARCH_SRCS:.c=.lo) -ARCH_OBJS = $(ARCH_SRCS:.c=.o) - -SHARED_OBJS = $(COMMON_LOBJS) $(ARCH_LOBJS) -STATIC_OBJS = $(COMMON_OBJS) $(ARCH_OBJS) - -SHARED_LIB = lib/$(OS_LIB_PREFIX)$(PACKAGE)$(OS_LIB_SUFFIX) -STATIC_LIB = lib/$(OS_LIB_PREFIX)$(PACKAGE)$(OS_ARCHIVE_EXT) -SHARED_IMPLIB = lib/$(OS_LIB_PREFIX)$(PACKAGE)$(OS_IMPLIB_EXT) - -CFLAGS = $(CFLAGS_DEBUG) $(CFLAGS_CONFIG) $(CFLAGS_SYSROOT) \ - $(CFLAGS_COMMON) $(CFLAGS_CMDLINE) $(CFLAGS_HOST) \ - $(CFLAGS_PATH) - -CFLAGS_SHARED = $(CFLAGS) $(CFLAGS_PIC) $(CFLAGS_SHARED_ATTR) -CFLAGS_STATIC = $(CFLAGS) $(CFLAGS_OBJ) $(CFLAGS_STATIC_ATTR) - -LDFLAGS_SHARED = $(LDFLAGS_DEBUG) $(LDFLAGS_CONFIG) $(LDFLAGS_SYSROOT) \ - $(LDFLAGS_COMMON) $(LDFLAGS_CMDLINE) $(LDFLAGS_HOST) \ - $(LDFLAGS_PATH) $(SHARED_LIB_DEPS) $(LDFLAGS_LAST) - -LDFLAGS_STATIC = $(LDFLAGS_DEBUG) $(LDFLAGS_CONFIG) $(LDFLAGS_SYSROOT) \ - $(LDFLAGS_COMMON) $(LDFLAGS_CMDLINE) $(LDFLAGS_HOST) \ - $(LDFLAGS_PATH) $(STATIC_APP_DEPS) $(LDFLAGS_LAST) diff --git a/project/extras.mk b/project/extras.mk index 338d3ac..791b91e 100644 --- a/project/extras.mk +++ b/project/extras.mk @@ -1,16 +1,29 @@ CFLAGS_SHARED_ATTR += -DNTAPI_BUILD CFLAGS_STATIC_ATTR += -DNTAPI_STATIC -CFLAGS_CONFIG += -DMIDIPIX_FREESTANDING -ffreestanding -D__NT$(HOST_BITS) +CFLAGS_CONFIG += -DMIDIPIX_FREESTANDING -D__NT$(HOST_BITS) CFLAGS_CONFIG += -UWIN32 -U_WIN32 -U__WIN32 -U__WIN32__ CFLAGS_CONFIG += -UWIN64 -U_WIN64 -U__WIN64 -U__WIN64__ -LDFLAGS_SHARED += --out-implib $(SHARED_IMPLIB) -LDFLAGS_SHARED += --exclude-all-symbols +LDFLAGS_SHARED += -Wl,--exclude-all-symbols LDFLAGS_SHARED += -lpemagine -ldalist ifeq ($(HOST_BITS),32) - LDFLAGS_SHARED += --entry $(HOST_UNDERSCORE)__ntapi_entry_point@12 + LDFLAGS_SHARED += -Wl,--entry -Wl,$(HOST_UNDERSCORE)__ntapi_entry_point@12 else - LDFLAGS_SHARED += --entry $(HOST_UNDERSCORE)__ntapi_entry_point + LDFLAGS_SHARED += -Wl,--entry -Wl,$(HOST_UNDERSCORE)__ntapi_entry_point endif + +install-headers-custom: install-headers-default + mkdir -p $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits + mkdir -p $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits/i386 + mkdir -p $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits/x86_64 + + cp $(API_HEADERS_BITS) \ + $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits + + cp $(API_HEADERS_I386) \ + $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits/i386 + + cp $(API_HEADERS_X86_64) \ + $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)/bits/x86_64 diff --git a/project/overrides.mk b/project/overrides.mk index 2a67ff9..80594c4 100644 --- a/project/overrides.mk +++ b/project/overrides.mk @@ -1,6 +1,6 @@ # direct linker invocation LDFLAGS_SYSROOT = $(CFLAGS_SYSROOT) -ifneq ($(PE_SUBSYSTEM)x,x) - LDFLAGS_COMMON += --subsystem=$(PE_SUBSYSTEM) +ifneq ($(PE_SUBSYSTEM),) + LDFLAGS_COMMON += -Wl,--subsystem=$(PE_SUBSYSTEM) endif diff --git a/project/tagver.mk b/project/tagver.mk new file mode 100644 index 0000000..81f1d87 --- /dev/null +++ b/project/tagver.mk @@ -0,0 +1,5 @@ +VER_NAMESPACE = NTAPI + +VER_MAJOR = 0 +VER_MINOR = 0 +VER_PATCH = 0 diff --git a/sofort/custom.mk b/sofort/custom.mk new file mode 100644 index 0000000..8e0bbc4 --- /dev/null +++ b/sofort/custom.mk @@ -0,0 +1,76 @@ +ifeq ($(OS_BINFMT),PE) +include $(PROJECT_DIR)/sysinfo/os/pe.mk +endif + +ifeq ($(OS_BINFMT),ELF) +include $(PROJECT_DIR)/sysinfo/os/elf.mk +endif + + + +ifeq ($(DISABLE_STATIC),yes) +package-static: +package-install-static: +else +package-static: static +package-install-static: install-static +endif + +ifeq ($(DISABLE_SHARED),yes) +package-shared: +package-install-shared: +else +package-shared: shared +package-install-shared: install-shared +endif + + + +ifeq ($(DISABLE_FRONTEND),yes) +app-tag: +package-install-app: +package-install-extras: +else +app-tag: package-app app.tag +package-install-app: install-app +package-install-extras: install-extras +endif + + + +ifeq ($(ALL_STATIC),yes) + +package-app: static-app +app: PACKAGE_APP = $(STATIC_APP) +app-tag: PACKAGE_APP = $(STATIC_APP) +app.tag: $(STATIC_APP) + + +else ifeq ($(ALL_SHARED),yes) + +package-app: shared-app +app: PACKAGE_APP = $(SHARED_APP) +app-tag: PACKAGE_APP = $(SHARED_APP) +app.tag: $(SHARED_APP) + + +else + +package-app: default-app +app: PACKAGE_APP = $(DEFAULT_APP) +app-tag: PACKAGE_APP = $(DEFAULT_APP) +app.tag: $(DEFAULT_APP) + +endif + + + +ifeq ($(CUSTOM_INSTALL_HEADERS),yes) + +install-headers:install-headers-custom + +else + +install-headers:install-headers-default + +endif diff --git a/sofort/defs.mk b/sofort/defs.mk new file mode 100644 index 0000000..11cec0f --- /dev/null +++ b/sofort/defs.mk @@ -0,0 +1,64 @@ +SHARED_LIB_DEPS = +SHARED_APP_DEPS = +STATIC_APP_DEPS = + +COMMON_LOBJS = $(COMMON_SRCS:.c=.lo) +COMMON_OBJS = $(COMMON_SRCS:.c=.o) + +ARCH_LOBJS = $(ARCH_SRCS:.c=.lo) +ARCH_OBJS = $(ARCH_SRCS:.c=.o) + +APP_LOBJS = $(APP_SRCS:.c=.lo) +APP_OBJS = $(APP_SRCS:.c=.o) + +SHARED_OBJS = $(COMMON_LOBJS) $(ARCH_LOBJS) +STATIC_OBJS = $(COMMON_OBJS) $(ARCH_OBJS) + +STATIC_LIB = lib/$(OS_LIB_PREFIX)$(PACKAGE)$(OS_ARCHIVE_EXT) + +DSO_VER = $(OS_LIB_PREFIX)$(PACKAGE)$(OS_LIB_SUFFIX)$(VER_XYZ) +DSO_SONAME = $(OS_LIB_PREFIX)$(PACKAGE)$(OS_LIB_SUFFIX)$(VER_SONAME) +DSO_SOLINK = $(OS_LIB_PREFIX)$(PACKAGE)$(OS_LIB_SUFFIX) + +SHARED_LIB = lib/$(DSO_VER) +SHARED_SONAME = lib/$(DSO_SONAME) +SHARED_SOLINK = lib/$(DSO_SOLINK) + +IMP_DEF = $(OS_LIB_PREFIX)$(PACKAGE)$(VER_XYZ)$(OS_LIBDEF_EXT) +IMP_VER = $(OS_LIB_PREFIX)$(PACKAGE)$(VER_XYZ)$(OS_IMPLIB_EXT) +IMP_SONAME = $(OS_LIB_PREFIX)$(PACKAGE)$(VER_SONAME)$(OS_IMPLIB_EXT) +IMP_SOLINK = $(OS_LIB_PREFIX)$(PACKAGE)$(OS_IMPLIB_EXT) + +IMPLIB_DEF = lib/$(IMP_DEF) +IMPLIB_VER = lib/$(IMP_VER) +IMPLIB_SONAME = lib/$(IMP_SONAME) +IMPLIB_SOLINK = lib/$(IMP_SOLINK) + +APP = bin/$(OS_APP_PREFIX)$(NICKNAME)$(OS_APP_SUFFIX) +DEFAULT_APP = bin/$(OS_APP_PREFIX)$(NICKNAME)-default$(OS_APP_SUFFIX) +SHARED_APP = bin/$(OS_APP_PREFIX)$(NICKNAME)-shared$(OS_APP_SUFFIX) +STATIC_APP = bin/$(OS_APP_PREFIX)$(NICKNAME)-static$(OS_APP_SUFFIX) + +CFLAGS = $(CFLAGS_DEBUG) $(CFLAGS_CONFIG) $(CFLAGS_SYSROOT) \ + $(CFLAGS_COMMON) $(CFLAGS_CMDLINE) $(CFLAGS_HOST) \ + $(CFLAGS_PATH) $(CFLAGS_OS) $(CFLAGS_SITE) \ + $(CFLAGS_VERSION) $(CFLAGS_STRICT) + +CFLAGS_SHARED = $(CFLAGS) $(CFLAGS_PIC) $(CFLAGS_SHARED_ATTR) +CFLAGS_STATIC = $(CFLAGS) $(CFLAGS_OBJ) $(CFLAGS_STATIC_ATTR) +CFLAGS_APP = $(CFLAGS) $(CFLAGS_OBJ) $(CFLAGS_APP_ATTR) $(CFLAGS_UTIL) + +LDFLAGS_SHARED = $(LDFLAGS_DEBUG) $(LDFLAGS_CONFIG) $(LDFLAGS_SYSROOT) \ + $(LDFLAGS_COMMON) $(LDFLAGS_CMDLINE) $(LDFLAGS_HOST) \ + $(LDFLAGS_PATH) $(SHARED_LIB_DEPS) $(LDFLAGS_STRICT) \ + $(LDFLAGS_LAST) + +LDFLAGS_APP = $(LDFLAGS_DEBUG) $(LDFLAGS_CONFIG) $(LDFLAGS_SYSROOT) \ + $(LDFLAGS_COMMON) $(LDFLAGS_CMDLINE) $(LDFLAGS_HOST) \ + $(LDFLAGS_PATH) $(SHARED_APP_DEPS) $(LDFLAGS_STRICT) \ + $(LDFLAGS_UTIL) $(LDFLAGS_LAST) + +LDFLAGS_STATIC = $(LDFLAGS_DEBUG) $(LDFLAGS_CONFIG) $(LDFLAGS_SYSROOT) \ + $(LDFLAGS_COMMON) $(LDFLAGS_CMDLINE) $(LDFLAGS_HOST) \ + $(LDFLAGS_PATH) $(STATIC_APP_DEPS) $(LDFLAGS_STRICT) \ + $(LDFLAGS_LAST) diff --git a/sofort/version.mk b/sofort/version.mk new file mode 100644 index 0000000..930a295 --- /dev/null +++ b/sofort/version.mk @@ -0,0 +1,63 @@ +include $(PROJECT_DIR)/project/tagver.mk + +CFLAGS_VERSION += -D$(VER_NAMESPACE)_TAG_VER_MAJOR=$(VER_MAJOR) +CFLAGS_VERSION += -D$(VER_NAMESPACE)_TAG_VER_MINOR=$(VER_MINOR) +CFLAGS_VERSION += -D$(VER_NAMESPACE)_TAG_VER_PATCH=$(VER_PATCH) + +ifeq ($(AVOID_VERSION),yes) + +VER_XYZ = +VER_SONAME = + +package-shared-soname: +package-shared-solink: +package-install-soname: +package-install-solink: + +else + +VER_XYZ = .$(VER_MAJOR).$(VER_MINOR).$(VER_PATCH) +VER_SONAME = .$(VER_MAJOR) + +package-shared-soname: shared-soname +package-shared-solink: shared-solink +package-install-soname: install-soname +package-install-solink: install-solink + + + +# libfoo.so (common) +install-solink: install-lib + rm -f $@.tmp + ln -s $(DSO_VER) $@.tmp + mv $@.tmp $(DESTDIR)$(LIBDIR)/$(DSO_SOLINK) + +$(SHARED_SOLINK): $(SHARED_LIB) + rm -f $@.tmp + ln -s $(DSO_VER) $@.tmp + mv $@.tmp $@ + +# libfoo.so.x (symlink) +ifeq ($(OS_SONAME),symlink) +$(SHARED_SONAME): $(SHARED_LIB) + rm -f $@.tmp + ln -s $(DSO_VER) $@.tmp + mv $@.tmp $@ + +install-soname: install-lib + rm -f $@.tmp + ln -s $(DSO_VER) $@.tmp + mv $@.tmp $(DESTDIR)$(LIBDIR)/$(DSO_SONAME) +endif + + +# libfoo.so.x (copy) +ifeq ($(OS_SONAME),copy) +install-soname: install-lib + cp $(SHARED_LIB) $(DESTDIR)$(LIBDIR)/$(DSO_SONAME) + +$(SHARED_SONAME): $(SHARED_LIB) + cp $(SHARED_LIB) $(SHARED_SONAME) +endif + +endif diff --git a/sysinfo/host/host.sh b/sysinfo/host/host.sh index 9caa07b..b3975ae 100755 --- a/sysinfo/host/host.sh +++ b/sysinfo/host/host.sh @@ -21,7 +21,6 @@ host_test() exit 2 } - # one: args for arg ; do case "$arg" in diff --git a/sysinfo/host/i686-nt32-midipix.mk b/sysinfo/host/i686-nt32-midipix.mk index df3185b..fd4b8f8 100644 --- a/sysinfo/host/i686-nt32-midipix.mk +++ b/sysinfo/host/i686-nt32-midipix.mk @@ -1,5 +1,5 @@ include $(PROJECT_DIR)/sysinfo/os/midipix.mk -ARCH = nt32 -HOST_BITS = 32 +ARCH = nt32 +HOST_BITS = 32 HOST_UNDERSCORE = '_' diff --git a/sysinfo/host/i686-unknown-linux.mk b/sysinfo/host/i686-unknown-linux.mk deleted file mode 100644 index 79d497b..0000000 --- a/sysinfo/host/i686-unknown-linux.mk +++ /dev/null @@ -1,5 +0,0 @@ -include $(PROJECT_DIR)/sysinfo/os/linux.mk - -ARCH = i386 -HOST_BITS = 32 -HOST_UNDERSCORE = '_' diff --git a/sysinfo/host/i686-w64-mingw32.mk b/sysinfo/host/i686-w64-mingw32.mk index b8ba461..b18e2e3 100644 --- a/sysinfo/host/i686-w64-mingw32.mk +++ b/sysinfo/host/i686-w64-mingw32.mk @@ -1,5 +1,5 @@ include $(PROJECT_DIR)/sysinfo/os/mingw.mk -ARCH = w32 -HOST_BITS = 32 +ARCH = w32 +HOST_BITS = 32 HOST_UNDERSCORE = '_' diff --git a/sysinfo/host/native.mk b/sysinfo/host/native.mk index 08b02b6..f0cf720 100644 --- a/sysinfo/host/native.mk +++ b/sysinfo/host/native.mk @@ -1,7 +1,7 @@ include $(PROJECT_DIR)/sysinfo/os/$(NATIVE_OS).mk -OS = $(NATIVE_OS) -HOST_BITS = $(NATIVE_OS_BITS) +OS = $(NATIVE_OS) +HOST_BITS = $(NATIVE_OS_BITS) HOST_UNDERSCORE = $(NATIVE_OS_UNDERSCORE) ifeq ($(OS),linux) diff --git a/sysinfo/host/x86_64-nt64-midipix.mk b/sysinfo/host/x86_64-nt64-midipix.mk index fef6345..d0e1d52 100644 --- a/sysinfo/host/x86_64-nt64-midipix.mk +++ b/sysinfo/host/x86_64-nt64-midipix.mk @@ -1,5 +1,5 @@ include $(PROJECT_DIR)/sysinfo/os/midipix.mk -ARCH = nt64 -HOST_BITS = 64 +ARCH = nt64 +HOST_BITS = 64 HOST_UNDERSCORE = '' diff --git a/sysinfo/host/x86_64-unknown-linux.mk b/sysinfo/host/x86_64-unknown-linux.mk deleted file mode 100644 index 76afb56..0000000 --- a/sysinfo/host/x86_64-unknown-linux.mk +++ /dev/null @@ -1,5 +0,0 @@ -include $(PROJECT_DIR)/sysinfo/os/linux.mk - -ARCH = x86_64 -HOST_BITS = 64 -HOST_UNDERSCORE = '' diff --git a/sysinfo/host/x86_64-w64-mingw32.mk b/sysinfo/host/x86_64-w64-mingw32.mk index 7cded15..a86f9b0 100644 --- a/sysinfo/host/x86_64-w64-mingw32.mk +++ b/sysinfo/host/x86_64-w64-mingw32.mk @@ -1,5 +1,5 @@ include $(PROJECT_DIR)/sysinfo/os/mingw.mk -ARCH = w64 -HOST_BITS = 64 +ARCH = w64 +HOST_BITS = 64 HOST_UNDERSCORE = '' diff --git a/sysinfo/os/any-os.mk b/sysinfo/os/any-os.mk index 0aa0a75..cf8ec00 100644 --- a/sysinfo/os/any-os.mk +++ b/sysinfo/os/any-os.mk @@ -6,5 +6,7 @@ OS_LIB_SUFFIX = .so OS_IMPLIB_EXT = .invalid OS_LIBDEF_EXT = .invalid OS_ARCHIVE_EXT = .a +OS_SONAME = symlink +OS_BINFMT = ELF -.PHONY: $(SHARED_IMPLIB) +.PHONY: $(IMPLIB_DEF) $(IMPLIB_VER) $(IMPLIB_SONAME) $(IMPLIB_SOLINK) diff --git a/sysinfo/os/bsd.mk b/sysinfo/os/bsd.mk deleted file mode 100644 index 3fe6711..0000000 --- a/sysinfo/os/bsd.mk +++ /dev/null @@ -1,10 +0,0 @@ -OS = bsd -OS_APP_PREFIX = -OS_APP_SUFFIX = -OS_LIB_PREFIX = lib -OS_LIB_SUFFIX = .so -OS_IMPLIB_EXT = .invalid -OS_LIBDEF_EXT = .invalid -OS_ARCHIVE_EXT = .a - -.PHONY: $(SHARED_IMPLIB) diff --git a/sysinfo/os/darwin.mk b/sysinfo/os/darwin.mk deleted file mode 100644 index b27a486..0000000 --- a/sysinfo/os/darwin.mk +++ /dev/null @@ -1,10 +0,0 @@ -OS = darwin -OS_APP_PREFIX = -OS_APP_SUFFIX = -OS_LIB_PREFIX = lib -OS_LIB_SUFFIX = .dylib -OS_IMPLIB_EXT = .invalid -OS_LIBDEF_EXT = .invalid -OS_ARCHIVE_EXT = .a - -.PHONY: $(SHARED_IMPLIB) diff --git a/sysinfo/os/elf.mk b/sysinfo/os/elf.mk new file mode 100644 index 0000000..5a3940f --- /dev/null +++ b/sysinfo/os/elf.mk @@ -0,0 +1,2 @@ +LDFLAGS_SHARED += -Wl,-soname +LDFLAGS_SHARED += -Wl,$(DSO_SONAME) diff --git a/sysinfo/os/linux.mk b/sysinfo/os/linux.mk deleted file mode 100644 index d6221cf..0000000 --- a/sysinfo/os/linux.mk +++ /dev/null @@ -1,10 +0,0 @@ -OS = linux -OS_APP_PREFIX = -OS_APP_SUFFIX = -OS_LIB_PREFIX = lib -OS_LIB_SUFFIX = .so -OS_IMPLIB_EXT = .invalid -OS_LIBDEF_EXT = .invalid -OS_ARCHIVE_EXT = .a - -.PHONY: $(SHARED_IMPLIB) diff --git a/sysinfo/os/midipix.mk b/sysinfo/os/midipix.mk index 4b5a608..d99b249 100644 --- a/sysinfo/os/midipix.mk +++ b/sysinfo/os/midipix.mk @@ -1,12 +1,10 @@ -OS = midipix -OS_APP_PREFIX = -OS_APP_SUFFIX = -OS_LIB_PREFIX = lib -OS_LIB_SUFFIX = .so -OS_IMPLIB_EXT = .lib.a -OS_LIBDEF_EXT = .so.def -OS_ARCHIVE_EXT = .a - -install-implib: shared-implib - mkdir -p $(DESTDIR)$(LIBDIR) - cp $(SHARED_IMPLIB) $(DESTDIR)$(LIBDIR) +OS = midipix +OS_APP_PREFIX = +OS_APP_SUFFIX = +OS_LIB_PREFIX = lib +OS_LIB_SUFFIX = .so +OS_IMPLIB_EXT = .lib.a +OS_LIBDEF_EXT = .so.def +OS_ARCHIVE_EXT = .a +OS_SONAME = copy +OS_BINFMT = PE \ No newline at end of file diff --git a/sysinfo/os/mingw.mk b/sysinfo/os/mingw.mk index 085d1be..6ade8d5 100644 --- a/sysinfo/os/mingw.mk +++ b/sysinfo/os/mingw.mk @@ -1,14 +1,12 @@ -OS = mingw -OS_APP_PREFIX = -OS_APP_SUFFIX = .exe -OS_LIB_PREFIX = lib -OS_LIB_SUFFIX = .dll -OS_IMPLIB_EXT = .dll.a -OS_LIBDEF_EXT = .def -OS_ARCHIVE_EXT = .a +OS = mingw +OS_APP_PREFIX = +OS_APP_SUFFIX = .exe +OS_LIB_PREFIX = lib +OS_LIB_SUFFIX = .dll +OS_IMPLIB_EXT = .dll.a +OS_LIBDEF_EXT = .def +OS_ARCHIVE_EXT = .a +OS_SONAME = copy +OS_BINFMT = PE -CFLAGS_PIC = - -install-implib: shared-implib - mkdir -p $(DESTDIR)$(LIBDIR) - cp $(SHARED_IMPLIB) $(DESTDIR)$(LIBDIR) +CFLAGS_PIC = diff --git a/sysinfo/os/pe.mk b/sysinfo/os/pe.mk new file mode 100644 index 0000000..abc76e8 --- /dev/null +++ b/sysinfo/os/pe.mk @@ -0,0 +1,70 @@ +LDFLAGS_IMPLIB += -Wl,--output-def +LDFLAGS_IMPLIB += -Wl,$(IMPLIB_DEF) +LDFLAGS_SHARED += $(LDFLAGS_IMPLIB) + +LDFLAGS_SHARED += -Wl,-soname +LDFLAGS_SHARED += -Wl,$(DSO_SONAME) + +implib: implib-ver package-implib-soname package-implib-solink + +implib-ver: shared-lib $(IMPLIB_VER) + +implib-soname: shared-lib $(IMPLIB_SONAME) + +implib-solink: shared-lib $(IMPLIB_SOLINK) + +$(IMPLIB_DEF): shared-lib + +$(IMPLIB_VER): $(IMPLIB_DEF) + $(DLLTOOL) -l $(IMPLIB_VER) -d $(IMPLIB_DEF) -D $(DSO_VER) + +install-implib: install-implib-ver \ + package-install-implib-soname \ + package-install-implib-solink + +install-implib-ver: implib-ver + mkdir -p $(DESTDIR)$(LIBDIR) + cp $(IMPLIB_VER) $(DESTDIR)$(LIBDIR) + +clean-implib: + rm -f $(SHARED_LIB) + rm -f $(IMPLIB_DEF) + rm -f $(IMPLIB_VER) + rm -f $(IMPLIB_SONAME) + rm -f $(IMPLIB_SOLINK) + + +ifeq ($(AVOID_VERSION),yes) + +package-implib-soname: +package-implib-solink: +package-install-implib-soname: +package-install-implib-solink: + +else + +package-implib-soname: implib-soname +package-implib-solink: implib-solink +package-install-implib-soname: install-implib-soname +package-install-implib-solink: install-implib-solink + + +$(IMPLIB_SONAME): $(IMPLIB_DEF) + $(DLLTOOL) -l $(IMPLIB_SONAME) -d $(IMPLIB_DEF) -D $(DSO_SONAME) + +$(IMPLIB_SOLINK): $(IMPLIB_SONAME) + rm -f $(IMPLIB_SOLINK).tmp + ln -s $(IMP_SONAME) $(IMPLIB_SOLINK).tmp + mv $(IMPLIB_SOLINK).tmp $(IMPLIB_SOLINK) + +install-implib-soname: implib-soname + mkdir -p $(DESTDIR)$(LIBDIR) + cp $(IMPLIB_SONAME) $(DESTDIR)$(LIBDIR) + +install-implib-solink: implib-soname + mkdir -p $(DESTDIR)$(LIBDIR) + rm -f $@.tmp + ln -s $(IMP_SONAME) $@.tmp + mv $@.tmp $(DESTDIR)$(LIBDIR)/$(IMP_SOLINK) + +endif diff --git a/sysinfo/toolchain/binutils.mk b/sysinfo/toolchain/binutils.mk index a29ac0c..3232915 100644 --- a/sysinfo/toolchain/binutils.mk +++ b/sysinfo/toolchain/binutils.mk @@ -15,3 +15,4 @@ CXXFILT = $(CROSS_COMPILE)c++filt ELFEDIT = $(CROSS_COMPILE)elfedit OBJCOPY = $(CROSS_COMPILE)objcopy READELF = $(CROSS_COMPILE)readelf +DLLTOOL = $(CROSS_COMPILE)dlltool diff --git a/sysinfo/toolchain/llvm.mk b/sysinfo/toolchain/llvm.mk index 3c805a8..65b5396 100644 --- a/sysinfo/toolchain/llvm.mk +++ b/sysinfo/toolchain/llvm.mk @@ -15,3 +15,4 @@ CXXFILT = $(CROSS_COMPILE)c++filt ELFEDIT = $(CROSS_COMPILE)elfedit OBJCOPY = $(CROSS_COMPILE)objcopy READELF = $(CROSS_COMPILE)readelf +DLLTOOL = $(CROSS_COMPILE)dlltool diff --git a/sysinfo/version.sh b/sysinfo/version.sh new file mode 100755 index 0000000..8157765 --- /dev/null +++ b/sysinfo/version.sh @@ -0,0 +1,61 @@ +#!/bin/sh + +usage() +{ +cat << EOF >&2 + +Usage: + -h show this HELP message + -s SRCDIR set source directory + -o OUTPUT set output header + -p PREFIX set macro prefix + +EOF +exit 1 +} + + +# one +workdir=$(pwd) +srcdir= +output= +prefix= + + +while getopts "hs:o:p:" opt; do + case $opt in + h) + usage + ;; + s) + srcdir="$OPTARG" + ;; + o) + output="$OPTARG" + ;; + p) + prefix="$OPTARG" + ;; + \?) + printf "Invalid option: -%s" "$OPTARG" >&2 + usage + ;; + esac +done + + +# two +if [ -z "$srcdir" ] || [ -z "$output" ] || [ -z "$prefix" ]; then + usage +fi + +cd "$srcdir" || exit 2 + +gitver=`git rev-parse --verify HEAD 2>/dev/null` || gitver="unknown" +macro=`echo "$prefix"_GIT_VERSION | tr '[:lower:]' '[:upper:]'` + +cd "$workdir" || exit 2 +printf "#define $macro\t\"$gitver\"\n" > "$output" + +# all done +exit 0